当会话开放时,Facebook对朋友的请求会返回0个朋友

时间:2014-03-11 06:01:32

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

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

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

我现在的问题是我想要一个用户朋友列表,所以我在app delegate中执行以下请求。

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);
}];

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

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

2 个答案:

答案 0 :(得分: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"]);
        }
     }];
}

答案 1 :(得分:0)

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

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

注意:我希望用户知道我的权限包含该字段的电子邮件ID和生日。它应该在身份验证之前声明,然后只有会话保持此权限。