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

时间:2012-08-28 05:49:10

标签: ios facebook facebook-graph-api facebook-ios-sdk deep-linking

我读过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 个答案:

答案 0 :(得分:0)

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

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

[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/