我正在构建一个连接到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,而且我被卡住了。
答案 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和生日。它应该在身份验证之前声明,然后只有会话保持此权限。