iOS facebook 检查好友是否安装了应用程序[重复]

问题描述 投票:0回答:4

Facebook iOS API 是否已经有一种方法可以获取安装了您的应用程序的好友列表?我基本上需要类似于“Words with Friends”的东西,他们可以确定你的哪些 Facebook 好友正在玩游戏。我有一个解决方案,需要使用一些额外的数据库,但希望 Facebook API 可能内置了针对此类查询的功能。

ios facebook
4个回答
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];

9
投票

我认为 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); 仅当用户安装了应用程序时才返回已安装字段,否则它不是返回对象的一部分


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

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 Explorer 并输入查询来显示

我/朋友?字段=已安装

您可以像这样取回您的朋友列表,其中一个用户已经安装了您的应用程序(true):

...
{
  "id": "100002656xxxxxx"
}, 
{
  "installed": true, 
  "id": "100004366xxxxxx"
},
...
© www.soinside.com 2019 - 2024. All rights reserved.