【问题标题】:Facebook request for friends returns 0 friends when session is open会话打开时,Facebook 好友请求返回 0 个好友
【发布时间】:2014-03-11 14:14:21
【问题描述】:

我正在构建一个连接到 Facebook 的 iOS 应用程序。我从TokenCacheHowTo 项目中获得了大部分与 Facebook 相关的代码(几乎全部复制)。我遇到了两个问题,一个有一个简单的修复,但我认为可能导致我的第二个问题。

起初登录并没有持续。我已经从 TokenCacheHowTo 复制了所有代码,所以我很困惑为什么并寻找解决方案。最终我找到了这个question,它说如果我从权限参数中删除@[@"basic_info"],它就会起作用。它确实做到了。我仍然对它为什么会起作用感到困惑。注意:我从我的应用委托中的openSessionWithAllowLoginUI 方法中删除了@[@"basic_info"]

我现在的问题是我想要一个用户朋友列表,所以我在应用程序委托中执行以下请求。

FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
                                              NSDictionary* result,
                                              NSError *error) {
    NSLog(@"Under");
    NSArray* friends = [result objectForKey:@"data"];
    NSLog(@"Found: %i friends", friends.count);
}];

此代码在我的应用程序委托中输出 Found: 0 friends,但如果我将代码放在 TokenCacheHowTo 中的相同位置,它会输出 Found: X friends,其中 X 是我的实际朋友数量。这让我感到困惑,因为我能够从 Facebook 获取用户信息,例如他们的 ID 和姓名,并将其存储在我的服务器上。

我意识到这可能有一个简单的解决方案,但我还没有很好地掌握 Facebook SDK,所以我被卡住了。

【问题讨论】:

    标签: ios objective-c facebook facebook-graph-api facebook-ios-sdk


    【解决方案1】:

    试试这对我来说很好,并确保像这样的权限

    NSArray *array = [NSArray arrayWithObjects:@"user_friends", nil];
    

    然后获取所有朋友

    -(void)getFriendList   {
        FBRequest* friendsRequest = [FBRequest requestWithGraphPath:@"me?fields=friends.fields(first_name,last_name)" parameters:nil HTTPMethod:@"GET"];
        [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
                                                      NSDictionary* result,
                                                      NSError *error) {
            NSDictionary* friendsDic = [result objectForKey:@"friends"];
            NSArray *friends = [friendsDic objectForKey:@"data"];
            for (NSDictionary *friend in friends) {
                NSLog(@"firstname %@",friend[@"first_name"]);
                NSLog(@"last name %@",friend[@"last_name"]);
            }
         }];
    }
    

    【讨论】:

    • 不。什么都没有打印,因为字典里什么都没有。
    • @SamB 但对我来说工作正常
    • 好的,现在可以了!为什么 TokenCacheHowTo 不必这样做?
    • @SamB TokenCacheHowTo have to do that 是什么意思?
    • 对不起,我的问题描述中列出的 TokenCacheHowTo 项目不必为“user_friends”指定权限来获取好友列表。我很感激它现在可以工作了!
    【解决方案2】:

    您的代码没有问题。我使用了与您在上面使用的相同的代码,我得到了x friends list。但我的许可声明如下

    FBSession.activeSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"user_about_me", @"email",@"user_birthday", nil]];
    

    注意:我想要用户的电子邮件 ID 和生日,说明我的权限为何包含这些字段。并且它应该在身份验证之前声明,然后只有会话保持此权限不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多