有没有办法用facebook ios API获取安装了你的应用的朋友列表?我基本上需要类似“Words with Friends”的东西,他们可以确定哪些FB朋友正在玩游戏。我有一个解决方案,需要一些额外的数据库使用,但希望FB api可能内置了这种查询。
答案 0 :(得分:10)
创建一个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];
答案 1 :(得分:9)
我觉得fql对我来说有点复杂,所以我在FBRequest中使用这个函数调用Graph API来解决Facebook SDK 3.5中的这个问题
+ (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); 只有在用户安装了应用程序时才会返回已安装的字段,否则它不是返回对象的一部分
答案 2 :(得分:2)
我过去曾使用此代码来使用用户的朋友来获取应用。
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];
答案 3 :(得分:1)
最简单的解决方案是使用
- (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资源管理器显示并输入查询
我/朋友?字段=装
你可以回复一下这样的朋友列表,其中一个用户安装了你的应用程序(true):
...
{
"id": "100002656xxxxxx"
},
{
"installed": true,
"id": "100004366xxxxxx"
},
...