脸书开发工具包。邀请朋友使用该应用

Facebook SDK. Invite friends to the app

我想选择一个朋友并向他们发送使用我的应用程序的邀请。 我使用 Graph API 的 invitable_friends 方法来获取尚未安装我的应用程序的朋友列表。然后我在应用程序 UI 中渲染我的朋友。用户选择朋友并点击发送邀请。 这就是问题所在。 我尝试使用 FBSDKAppInviteDialog,但无法在其内容中设置特定用户。选择朋友的唯一可能是使用 facebook 对话框,而不是自定义视图。

我尝试使用 FBSDKGameRequestDialog。它的内容有一个属性 to 来设置特定的用户,但是FBSDKGameRequestDialogDelegate 方法是不可达的。而且我不确定使用游戏请求是否是邀请朋友使用我的应用程序的正确方式。

提供了较旧的 Facebook SDK [FBWebDialogs presentRequestsDialogModallyWithSession:message:title:parameters:handler:]。这很好用。

我是这样用的:

首先,您获取 FB 好友列表并将其存储在 NSMutableArray 中:

- (void) getFriendsFromFB:(NSDictionary*)parameters invitable:(BOOL) invitable {
    NSString* graphPath = @"/me/friends";

    if (invitable) {
        graphPath = @"/me/invitable_friends";
    }

    FBSDKGraphRequest* request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath parameters:parameters];
    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection * connection, id result, NSError *error){
        if (error) {
            NSLog(@"Facebook: error handling friend invite request at path %@: %@", graphPath, error.description);
        }else{
            NSLog(@"Facebook: successfully handled friend request for graph path %@",graphPath);

            NSArray *friendArray = [result objectForKey:@"data"];

            for (NSDictionary* friendDict in friendArray) {

                FContact* contact = [[FContact alloc] initWithFaceBookID:friendDict[@"id"] name:friendDict[@"name"] avatarURL:friendDict[@"picture"][@"data"][@"url"]];
                contact.hasMyGameInstalled = !invitable;
                [[FStorage sharedInstance].friends addObject:contact];
            }

            NSLog(@"Facebook contacts received: %lu contacts",(unsigned long)friendArray.count);

            if (!invitable) {
                NSLog(@"Facebook: making game");
                storage.currentGame = [[FGame alloc] initWithPreset];
                [storage.savedGames addObject:storage.currentGame];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"GameInfoUpdated" object:nil];
            }
        }

    }];
}

现在,我可以显示 FB 好友列表,让用户选择邀请谁。 当我选择了用户时,我会向他推荐一个游戏:

- (void) proposeGameTo:(FContact*) contact{
    FBSDKGameRequestContent *gameRequestContent = [[FBSDKGameRequestContent alloc] init];

    // Look at FBSDKGameRequestContent for futher optional properties
    gameRequestContent.message = @"Let's play My brilliant game together";
    gameRequestContent.title = @"My custom invitation";
    gameRequestContent.to = @[contact.facebookID];
    gameRequestContent.actionType = FBSDKGameRequestActionTypeTurn;

    FBSDKGameRequestDialog* dialog = [[FBSDKGameRequestDialog alloc] init];
    dialog.frictionlessRequestsEnabled = YES;
    dialog.content = gameRequestContent;
    dialog.delegate = self;

    // Assuming self implements <FBSDKGameRequestDialogDelegate>
    [dialog show];
}

我终于找到了解决问题的方法。使用像 Dmitry Timoshenko 发布的代码,FBSDKGameRequestDialog 调用它的 dealloc,在那里它消除了他的 _delegate。这就是为什么我没有达到任何 FBSDKGameRequestDialogDelegate 方法。 我为 FBSDKGameRequestDialog 创建了一个强大的 @property,现在我在 gameRequestDialog:didCompleteWithResults:.

中收到了 facebook 用户 ID