0

我已经阅读了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?

4

1 回答 1

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/

于 2012-10-22T22:46:33.683 回答