在 iOS 中获取 Facebook 好友时出错

Posted

技术标签:

【中文标题】在 iOS 中获取 Facebook 好友时出错【英文标题】:Error while fetching Facebook friends in iOS 【发布时间】:2014-05-20 07:42:30 【问题描述】:

我正在尝试获取已登录用户的 facebook 好友列表,它在我的帐户中运行良好,但是当我将应用详细信息迁移到新帐户并更改应用 ID 和应用密码时,我在下面收到此错误

Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0xf89c0b0 com.facebook.sdk:HTTPStatusCode=400, com.facebook.sdk:ParsedJSONResponseKey=
    body =     
        error =         
            code = 100;
            message = "(#100) Unknown fields: username.";
            type = OAuthException;
        ;
    ;
    code = 400;
, com.facebook.sdk:ErrorSessionKey=<FBSession: 0xe5a6c30, state: FBSessionStateOpen, loginHandler: 0xe58d5a0, appID: 705259966179163, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0xf87b180>, expirationDate: 4001-01-01 00:00:00 +0000, refreshDate: 2014-05-20 07:14:50 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
    status,
    permission
)>

这是我目前用于获取朋友的代码

- (BOOL)retrieveFacebookFriendsForProfileId:(NSString *)fbProfileId completionBlock:(void (^)(NSArray *, NSError *))completionBlock


    [FBSession openActiveSessionWithReadPermissions:nil
                                       allowLoginUI:YES
                                  completionHandler:^(FBSession *session,
                                                      FBSessionState state,
                                                      NSError *error) 
                                      if (error) 

                                          NSLog(@"Error");
                                       else if (session.isOpen) 

    [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) 
        if (error) 
            //Throws the code 100 error here
            completionBlock(nil, error);
        else
            FBRequest* friendsRequest = [FBRequest requestForMyFriends];
            [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,NSDictionary* result,NSError *error) 
                if(error)
                    completionBlock(nil, error);
                else
                
                    NSArray *friendJSONs = [result objectForKey:@"data"];

                    NSMutableArray *friends=[NSMutableArray array];
                    for(NSDictionary * friendDict in friendJSONs)
                    
                        SocialProfile *friend=[[SocialProfile alloc] initWithDictionary:friendDict socialMedia:kSocialMediaFacebook];
                        [friends addObject:friend];
                    
                    completionBlock(friends, nil);
                
            ];
        
    ];

                                      
                                  ];
    return YES;

如果我使用旧的应用程序 ID 和密码,此代码可以正常工作。我检查了新帐户中的设置,一切都与我在旧帐户中所做的相同,我不明白问题是什么。任何帮助表示赞赏

【问题讨论】:

我也遇到了同样的问题。每当您得到解决方案时,请分享..谢谢\ 您是否请求了 user_friends 权限? 04/30之后创建的应用受Graph API v2.0的约束,需要申请user_friends权限。获得该权限后,您将能够获得也在使用您的应用的用户朋友列表。 [FBRequest requestForMyFriends] 会不会那样做? 【参考方案1】:

根据https://developers.facebook.com/docs/apps/changelog 好友列表现在仅返回也使用您的应用的好友:通过 /me/friends 端点返回的好友列表现在仅限于已授权您的应用的好友列表。

所以我将上面的代码更改为这个,它给了我使用该应用程序的朋友列表,而不是整个 FB 朋友列表

FBRequest *friendsRequest = [FBRequest requestForGraphpath:@"/me/friends"];

【讨论】:

@Karun 你也可以参考这个帖子***.com/questions/23417356/…

以上是关于在 iOS 中获取 Facebook 好友时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中获取 Facebook 好友列表

如何在 iOS 6 中获取 Facebook 好友?

iOS 获取用户的 Facebook ID 和好友列表以及好友的头像 URL

我如何在 iOS sdk 的 facebook 上获取好友生日和用户生日

如何使用 FBSDK for iOS 获取 Facebook 好友列表?

iOS:通过分页获取 Facebook 好友