[英]How to get the list of Facebook friends who have not installed the app?
我正在开发一个社交网络应用程序。 我在我的iOS应用程序中集成了Facebook SDK 3.14。 现在,我想获取所有Facebook好友的列表,这样我就可以邀请那些没有使用该应用程序的朋友,并向已安装该应用程序的朋友发送好友请求。
我可以使用"/me/friends"
获取已经使用我的应用程序的朋友列表。
[FBRequestConnection startWithGraphPath:@"/me/friends"
parameters:nil
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSLog(@"All == %@", result);
}];
它给朋友的Facebook ID(例如id = 654330727444458)作为回应,以便我可以向他们发送朋友请求。
要获取所有未下载应用程序的Facebook好友的列表,如果我想邀请那些,我需要使用"me/taggable_friends"
让所有朋友(如果我错了请纠正我)。
[FBRequestConnection startWithGraphPath:@"/me/taggable_friends"
parameters:nil
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSlog("%@", result);
}];
在taggable_friends
响应中我得到朋友的id为id = "AaLYBzZzHdzCmlytqyMAjO0OLDZIOs74Urn93ikeRmmTB3vX_Xl81OYUt4XnoWG0BDLuX67umVkheVdDjzyvm0fcqMqu84GgM9JnNHc-1B63eg
”这是朋友的令牌ID并且它不是唯一的。 我无法使用它,必须使用朋友的Facebook Id邀请他们。 不幸的是,我无法在可标记的朋友回复中得到它。
这只能在Facebook API v1上实现,该API将于明年4月左右停止工作。 即使现在只有现有的Facebook应用程序允许您使用V1,所以如果您没有足够旧的应用程序,则无法执行此操作。 在V2中,您只能获得已登录同一应用程序的朋友,但用户ID对于应用程序是唯一的,以防止这种情况发生。 我猜Facebook的原因是,通过这样做可以阻止人们通过应用程序向朋友发送垃圾邮件:
正如@joelrb所说,你可以为游戏创建一个画布应用程序并使用invitable_friends但FB会审核你的“游戏”,所以你不能真正作弊。
有关详细信息,请参阅https://developers.facebook.com/docs/apps/changelog/ 。
TLDR; 你可以做到贴墙。 强硬。 抱歉。
使用user
的installed
字段。 像这样:
NSMutableArray *notYetUsers = [NSMutableArray array];
FBRequest *fbRequest = [FBRequest requestForGraphPath:@"me/friends?fields=installed"];
[fbRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSAssert(!error, error.localizedDescription);
NSArray *friends = [(NSDictionary *)result objectForKey:@"data"];
for (NSDictionary<FBGraphUser> *user in friends) {
if ([user[@"installed"] isEqual:@(NO)])
[notYetUsers addObject:user];
}
}];
notYetUsers
将包含尚未安装该应用程序的所有朋友。
- (void)getFBFriendsWithCompletion:(void (^)(NSError *, id))callback
{
NSString *query = @"select uid, name, is_app_user "
@"from user "
@"where uid in (select uid2 from friend where uid1=me() )";
NSDictionary *queryParam =
[NSDictionary dictionaryWithObjectsAndKeys:query, @"q", nil];
// Make the API request that uses FQL
[FBRequestConnection startWithGraphPath:@"/fql"
parameters:queryParam
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (callback)
callback(error, result);
}];
}
- (void)foo
{
[self getFBFriendsWithCompletion:^(NSError *error, id result) {
if (!error)
{
NSMutableArray *friendsUsingApp = [NSMutableArray array];
NSMutableArray *friendsNotUsingApp = [NSMutableArray array];
for (NSDictionary *data in result[@"data"]) {
if ([data[@"is_app_user"] boolValue] == NO) {
[friendsNotUsingApp addObject:data];
} else {
[friendsUsingApp addObject:data];
}
}
// Do something with friendsUsingApp and friendsNotUsingApp
}
}];
}
taggable_friends是指可以在发布到Facebook的故事中标记或提及的朋友列表。 您获得的结果只是一个标记令牌,只能用于标记朋友,而不能用于其他目的。
虽然这是指游戏应用程序,但如果您使用invitable_friends API,我认为更容易。 但它需要Facebook Canvas应用程序实现。 您可以在Canvas中提供通知,以便用户只需使用移动应用程序等。
这是使用invitable_friends API的教程: https : //developers.facebook.com/docs/games/mobile/ios-tutorial/
而且, invitable_friends API详细信息: https : //developers.facebook.com/docs/games/invitable-friends/v2.0
您可以尝试此操作来获取好友应用用户的ID:
NSMutableArray *appFriendUsers = [[NSMutableArray alloc] init];
[[FBRequest requestForGraphPath:@"me/friends?fields=installed"]
startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary *result,
NSError *error) {
//if result, no errors
if (!error && result)
{
//result dictionary in key "data"
NSArray *allFriendsList = [result objectForKey:@"data"];
if ([allFriendsList count] > 0)
{
// Loop
for (NSDictionary *aFriendData in allFriendsList) {
// Friend installed app?
if ([aFriendData objectForKey:@"installed"]) {
[appFriendUsers addObject: [aFriendData objectForKey:@"id"]];
break;
}
}
}
}
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.