簡體   English   中英

如何獲取尚未安裝該應用程序的Facebook好友列表?

[英]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; 你可以做到貼牆。 強硬。 抱歉。

使用userinstalled字段。 像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM