Facebook iOS SDK 3.0 中的深度链接和 FBSessionDelegate

Posted

技术标签:

【中文标题】Facebook iOS SDK 3.0 中的深度链接和 FBSessionDelegate【英文标题】:Deep linking and FBSessionDelegate in Facebook iOS SDK 3.0 【发布时间】:2012-08-28 05:49:10 【问题描述】:

我已经阅读了http://developers.facebook.com/docs/howtos/link-to-your-native-app/,我对在 3.0 中应该如何处理深度链接感到困惑。假设用户为我的应用点击了一个 appRequest,FB 用一个特殊的 URL 打开了我的应用。我有我的 Appdelegate 的 openURL 方法:

return [FBSession.activeSession handleOpenURL:url];

教程说:

If your app requires an authorized user, handle the processing of the target URL in the
SDK callbacks implemented after a successful login, the fbDidLogin method.

但是,不再调用 fbDidLogin 委托方法,因为在 3.0 中我们切换到使用 FBSession.activeSession 而不是使用 facebook.m 对象。事实上,任何 FBSessionDelegate 方法都不会被调用,因为 facebook 对象的状态永远不会改变。那么我应该在哪里处理 URL?

【问题讨论】:

【参考方案1】:

您可能会在打开会话时设置的处理程序中处理此问题。

例如,您使用以下内容打开会话:

[FBSession openActiveSessionWithReadPermissions:nil
                                      allowLoginUI:YES
                                 completionHandler:^(FBSession *session,
                                                     FBSessionState state,
                                                     NSError *error) 
                                     [self sessionStateChanged:session
                                                         state:state
                                                         error:error];
                                 ];

您可以将深度链接处理代码放在方法集中,以处理您可以定义的会话更改,例如:

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error

    switch (state) 
        case FBSessionStateOpen:
            if (!error) 
                // Handle deep link      
            
            break;
        case FBSessionStateClosed:
            self.user = nil;
            break;
        case FBSessionStateClosedLoginFailed:
            self.user = nil;
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    

    if (error) 
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    

要查看深度链接处理的工作示例,请参阅https://github.com/fbsamples/ios-social-cafe/

【讨论】:

以上是关于Facebook iOS SDK 3.0 中的深度链接和 FBSessionDelegate的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK 3.0 贴在墙上

FBSession 的 Facebook iOS SDK 3.0 登录教程问题

iOS Facebook SDK 3.0 登录未重定向到原始应用程序

Facebook iOS SDK 3.0 - 会话未打开

Facebook sdk 3.0 与 iOS 5 和 Xcode 4.2

在 iOS Facebook SDK 3.0 上作为粉丝页面发布