Facebook iOS API 是否已经有一种方法可以获取安装了您的应用程序的好友列表?我基本上需要类似于“Words with Friends”的东西,他们可以确定你的哪些 Facebook 好友正在玩游戏。我有一个解决方案,需要使用一些额外的数据库,但希望 Facebook API 可能内置了针对此类查询的功能。
创建一个
FBFriendPickerDelegate
委托类并重写此函数:
-(BOOL)friendPickerViewController:(FBFriendPickerViewController *)friendPicker shouldIncludeUser:(id<FBGraphUser>)user{
BOOL installed = [user objectForKey:@"installed"] != nil;
return installed;
}
对于没有安装您的应用程序的用户,
installed
字段将为nil
,但您必须在加载数据时请求:
self.friendsController = [[FBFriendPickerViewController alloc] initWithNibName:nil bundle:nil];
//...
NSSet *fields = [NSSet setWithObjects:@"installed", nil];
self.friendPickerController.fieldsForRequest = fields;
//...
[self.friendsController loadData];
我认为 fql 对我来说有点复杂,所以我在 Facebook SDK 3.5 中使用 FBRequest 中的这个函数来调用 Graph API 来解决这个问题
+ (FBRequest *)requestWithGraphPath:(NSString*)graphPath parameters:(NSDictionary*)parameters HTTPMethod:(NSString*)HTTPMethod;
代码是:
FBRequest *request = [FBRequest requestWithGraphPath:@"me/friends"
parameters:@{@"fields":@"name,installed,first_name"}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBRequestConnection *connection,
id result,
NSError *error){
}];
您可以将所有感兴趣的字段放入参数字典中。 根据 SDK 参考,对象包含类型(始终为“用户”)、id(用户的 ID)和可选的已安装字段(如果返回则始终为 true); 仅当用户安装了应用程序时才返回已安装字段,否则它不是返回对象的一部分
我过去曾使用此代码通过用户的朋友获取应用程序。
facebook
是 FB Connect 附带的 Facebook
类。
NSString *fql = [NSString stringWithFormat:@"SELECT name,uid, pic_small FROM user WHERE is_app_user = 1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = %@) order by concat(first_name,last_name) asc",userId,userId]];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:fql ,@"query", [facebook accessToken], @"access_token", nil];
[facebook requestWithMethodName:@"fql.query" andParams:params andHttpMethod:@"GET" andDelegate:self];
最简单的解决方案是使用
- (BOOL)friendPickerViewController: shouldIncludeUser:
最新 3.5.1 Facebook SDK(2013 年 6 月)中 FBFriendPickerDelegate 协议实现的方法,在获取我/朋友时根据“已安装”字段询问委托是否将朋友包含在列表中。
如果好友也是调用应用程序的用户,则安装字段存在(true)。
你可以这样使用:
- (BOOL)friendPickerViewController:(FBFriendPickerViewController *)friendPicker
shouldIncludeUser:(id <FBGraphUser>)user {
return [[user objectForKey:@"installed"] boolValue];
}
重要! 您必须包含以下内容才能在请求中包含该字段并告知friendPicker有关其委托的信息:
self.fieldsForRequest = [NSSet setWithObject:@"installed"];
self.delegate = self;
您可以使用 Graph API Explorer 验证是否只有已安装应用程序的好友通过使用 Graph API Explorer 并输入查询来显示
我/朋友?字段=已安装
您可以像这样取回您的朋友列表,其中一个用户已经安装了您的应用程序(true):
...
{
"id": "100002656xxxxxx"
},
{
"installed": true,
"id": "100004366xxxxxx"
},
...