2012-02-28 9 views
1

うまくいけば、誰かがこの奇妙な問題で私を助けることができます。PHPスクリプトから友達の壁に投稿するには?

私は、登録したすべてのユーザーのFacebook IDを格納するデータベースを持っていますが、これはうまくいきます。

ユーザーは、アプリを介してアクティブ化されたPHPスクリプトを使用してFacebookの友だちにメッセージを送信できます。

私のスクリプトでは、あなたの友人のIDがデータベースに登録されていない(登録されていない)場合は、Facebookの壁にメッセージを掲示して、アプリを使用してそれらに連絡しようとしました。

FBを介して通知したユーザーのIDを格納する2番目のデータベースがあり、複数のリクエストを送信しません。

問題はメッセージが壁に表示されないことです。メッセージは、このような文字列としてPHPスクリプトに送信されます一部を送る=タスク、PHPスクリプトで

NSString *urlString = [@"myApp/myphp.php?"stringByAppendingString:@"task=send"]; 
    urlString = [urlString stringByAppendingString:@"&facebookID="]; 
    urlString = [urlString stringByAppendingString:[friendsToSendTo objectAtIndex:i]]; 
    urlString = [urlString stringByAppendingString:@"&message="]; 
    urlString = [urlString stringByAppendingString:message]; 
    urlString = [urlString stringByAppendingString:@"&sound="]; 
    urlString = [urlString stringByAppendingString:chosenSoundToSend]; 
    urlString = [urlString stringByAppendingString:@"&sendersName="]; 
    urlString = [urlString stringByAppendingString:myName]; 

次いで、受信者にメッセージを送信する処理を開始します。この部分はまったく問題なく動作し、メッセージは全く問題なく受信されます。

自分のIDが見つからない場合には、このへ移動:

$this->_postToFacebook($sendersName, $facebookID); 

_postToFacebook機能は次のようになります。

private function _postToFacebook($sender, $receiver) 
    { 
    require_once "facebook.php"; 

    //registered with developers.facebook for this particular app 
    $app_id = "****************"; 
    $app_secret = "*****************"; 

    $facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    'cookie' => true 
    )); 

    // Get the url to redirect for login to facebook 
    // and request permission to write on the user's wall. 
    $login_url = $facebook->getLoginUrl(
     array('scope' => 'publish_stream') 
    ); 

    // If not authenticated, redirect to the facebook login dialog. 
    // The $login_url will take care of redirecting back to us 
    // after successful login. 
    if (! $facebook->getUser()) { 
     echo <<< EOT 
    <script type="text/javascript"> 
    top.location.href = "$login_url"; 
    </script>; 
    EOT; 

     exit; 
    } 
    // Do the wall post. 
    $facebook->api("/$receiver/feed", "post", array(
     message => "$sender sent you a message", 
     picture => "image.jpg", 
     link => "mywebsite.com", 
     name => "Visit iTunes to download and reply", 
     caption => "mycaption" 
    )); 

} 

これは一見失敗した部分であり、あるいは少なくともその私の最初の仮定だった。 しかし、生成されたURL(.... task = & facebookID = 12345789 ...など)をブラウザに手動で入力してEnterキーを押すと、メッセージがユーザーの壁に投稿されます。

今私は完全に混乱しています。 ブラウザ経由でトリガーすると、Facebook IDが登録されていて、FBに登録されていない場合、そのメッセージがアプリに受信されます。 受信者が登録されたときに、アプリケーション自体からメッセージが受信されますが、FBへの投稿は機能しません。 おそらくどこかの許可を逃してしまったでしょうか?

編集:-)を助けることができる誰にも事前に

ありがとう:

if (![facebook isSessionValid]){ 

    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"user_relationships", @"friends_relationships", 
          @"user_relationship_details", @"friends_relationship_details", 
          @"read_friendlists",@"offline_access", @"publish_stream", 
          nil]; 
    [facebook authorize:permissions]; 
    [permissions release]; 
} 

とFacebookで:ケースでは、権限のことですが、私はこれらのアクセス権が設定されていることを追加する必要があります私はこれらをNOに変更しなければなりませんでした。それ以外の場合はまったく接続されません。おそらくこれも問題の原因になりますか?

- (void)authorize:(NSArray *)permissions { 
    self.permissions = permissions; 

    [self authorizeWithFBAppAuth:NO safariAuth:NO]; 
} 

答えて

1

URL文字列をエンコードする必要がある場合があります。フィールド(名前、メッセージなど)にスペースやその他の特殊文字が含まれていると、iOSからのURLリクエスト/接続は失敗します。 Webブラウザは通常このエンコーディングを自動的に行いますが、iOSは自動的にエンコードしません。

あなたのURL文字列を持っていたら、試してください:サイドノートとして

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

、あなたではなく、複数のよりstringByAppendingString呼び出しを[NSString stringWithFormat:@"", ...]を使用する場合があります。次のようなものがあります。

urlString = [NSString stringWithFormat: 
      @"myApp/myphp.php?facebookID=%@&message=%@&sound=%@", 
      [friendsToSendTo objectAtIndex:i]], message, sound]; 
+0

[OK]を参照してください。私が言うように、出力された文字列は、私がコピーしてブラウザに貼り付けると、私が探しているメッセージをトリガーします - 私はそれが正しくエンコードされていると思いますか?また、アプリケーションに試してもらうとコードの半分がトリガされますが、2番目の部分を起動するようには見えません。 – TheBestBigAl

+0

ブラウザで作業することは、PHP側が良いことを示す良い兆候です。私が答えて言ったように、ブラウザは自動的にURLやクエリー文字列にスペースなどの文字をエンコードしますが、iOSに 'stringByAddingPercentEscapesUsingEncoding:'で明示的に指示する必要があります。 – gregheo

+0

ああ、今何を意味しているのか分かります。私はまだストーリーはありませんでしたが、stringByAddingPercentEscapesUsingEncodingを使用していました。私は、あなたが言ったように、PHPが良いことをかなり確信しています。私も使ってみました:NSString * messageString = [message stringByReplacingOccurrencesOfString:@ "" withString:@ ""];文字列をできるだけ単純にする。最終的な文字列(私はあなたが言ったようにstringWithFormatを使用するように変更する)は大丈夫だと思われますが、まだアプリケーションからFB壁にメッセージを投稿しません。私はまだどこかに権限の問題があるかもしれないと思う。 – TheBestBigAl

関連する問題