iOS facebook检查朋友是否安装了应用程序

时间:2012-01-16 02:38:07

标签: iphone ios facebook api

有没有办法用facebook ios API获取安装了你的应用的朋友列表?我基本上需要类似“Words with Friends”的东西,他们可以确定哪些FB朋友正在玩游戏。我有一个解决方案,需要一些额外的数据库使用,但希望FB api可能内置了这种查询。

4 个答案:

答案 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"
},
...