0

最新の Facebook iOS SDK 3.1.1 を使用しているときに、フレンド ウォールに UIImage を投稿しようとすると、エラー 5 (エラー: HTTP ステータス コード: 403) が発生します。

私の壁に画像を投稿しようとすると、うまくいきますが、私の友人の画像ではありません.

私のコード:1.投稿する前に、ユーザーが適切な権限を持っているかどうかを確認しています。

-(void)postImageOnFriendsWall:(UIImage*)image FriendsArray:(NSArray*)friends
{
    // if we don't have permission to announce, let's first address that
    if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound)
    {

    [FBSession.activeSession reauthorizeWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                               defaultAudience:FBSessionDefaultAudienceFriends
                                             completionHandler:^(FBSession *session, NSError *error)
     {
         if (!error)
         {
             // re-call assuming we now have the permission
             [self postImageOnFriendsWall:image FriendsArray:friends];

         }
         else
         {
             UIAlertView *alertView = [[UIAlertView alloc]  initWithTitle:@"Error"                        message:error.localizedDescription                                                                                                delegate:nil                                                                                         cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil];
             [alertView show];
         }

     }];
}
else
{

    // can post image
    for (id<FBGraphUser> user in friends)
    {


        NSString *userID = user.id;
        NSLog(@"trying to post image of %@ wall",userID);
        NSMutableDictionary  *postVariablesDictionary = [[NSMutableDictionary alloc] init];
        [postVariablesDictionary setObject:UIImagePNGRepresentation(image) forKey:@"picture"];
        [postVariablesDictionary setObject:@"my image" forKey:@"message"];

        [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/photos",userID] parameters:postVariablesDictionary HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
         {
             if (error)
             {
                 //showing an alert for failure
                 UIAlertView *alertView = [[UIAlertView alloc]  initWithTitle:@"Facebook" message:error.localizedDescription                                                                                                delegate:nil   cancelButtonTitle:@"OK"              otherButtonTitles:nil];
                 [alertView show];
             }
             else
             {
                 //showing an alert for success
                 UIAlertView *alertView = [[UIAlertView alloc]  initWithTitle:@"Facebook" message:@"Shared the photo successfully"                                                                                                delegate:nil   cancelButtonTitle:@"OK"              otherButtonTitles:nil];
                 [alertView show];
             }
         }];



    }
}
}

言及するために、私が変更した場合

startWithGraphPath:[NSString stringWithFormat:@"%@/photos",userID]

startWithGraphPath:[NSString stringWithFormat:@"me/photos",userID]

正常に動作しています。

私は何を間違っていますか?私は答えを探してみましたが、何も役に立ちませんでした。ありがとうございました!

4

2 に答える 2

2

これは、権限レベルが不十分なために発生します。FBのドキュメントが言うように:

Insufficient_scope リクエストには、アクセス トークンによって提供されるよりも高い権限が必要です。リソース サーバーは、HTTP 403 (Forbidden) ステータス コードで応答する必要があり (SHOULD)、保護されたリソースにアクセスするために必要なスコープを含む "scope" 属性を含めることができます (MAY)。

別のユーザーのウォールに投稿するには、高度なアクセス許可を取得する必要があります。必要なパーミッションは @"publish_stream" です。これにより、「アプリがコンテンツ、コメント、いいね! をユーザーのストリームとユーザーの友達のストリームに投稿できるようになります。これは、publish_actions も含むスーパーセットのパブリッシング パーミッションです。」(c)

最新の変更により、必要なアクセス許可を 2 つのレベルに分割する必要があります。ユーザーに関する基本的な情報を読み取ることができる基本レベルと、詳細(投稿など) のレベルです。アクセス許可のリストは次のとおりです

つまり、適切なアクセス許可を 2 つの手順で要求する必要があります。最初に基本を取得してから、高度を要求します。

于 2012-12-11T10:48:21.323 に答える
0

Facebook アプリケーション ID を確認する必要がある場合があります。問題が発生することがあります。友達の壁に壁を投稿するのと同じ問題がありますが、Facebook アプリケーション ID を変更すると、その動作は完璧になります。

于 2013-02-05T09:29:46.723 に答える