3

我正在测试新的 3.1 框架。如果我打电话[FBSession openActiveSessionWithReadPermissions:allowLoginUI:completionHandler,我可以看到 UIAlertView 是如何弹出的(因为我在 ios 中有 facebook 登录)。

但是,如果我自己创建会话并调用openWithCompletionHandler,我将被重定向到 facebook 应用程序或 webview(取决于我是否安装了 facebook 应用程序)。

这是坏了吗?我错过了什么吗?

我不想使用 activeSession 的原因是因为我需要设置urlSchemeSuffix,而我在 activeSession 中看不到任何这样做的方法(因为这些仅在 FBSession 的 init 方法中设置)。

谢谢

4

1 回答 1

2

查看他们的代码,看起来您需要设置一个特定的行为才能让它使用系统帐户(这来自 FB SDK):

+ (BOOL)openActiveSessionWithPermissions:(NSArray*)permissions
                        allowLoginUI:(BOOL)allowLoginUI
                  allowSystemAccount:(BOOL)allowSystemAccount
                              isRead:(BOOL)isRead
                     defaultAudience:(FBSessionDefaultAudience)defaultAudience
                   completionHandler:(FBSessionStateHandler)handler {
    // is everything in good order?
    [FBSession validateRequestForPermissions:permissions
                         defaultAudience:defaultAudience
                      allowSystemAccount:allowSystemAccount
                                  isRead:isRead];
    BOOL result = NO;
    FBSession *session = [[[FBSession alloc] initWithAppID:nil
                                           permissions:permissions
                                       defaultAudience:defaultAudience
                                       urlSchemeSuffix:nil
                                    tokenCacheStrategy:nil]
                      autorelease];
    if (allowLoginUI || session.state == FBSessionStateCreatedTokenLoaded) {
        [FBSession setActiveSession:session];
        // we open after the fact, in order to avoid overlapping close
        // and open handler calls for blocks
        FBSessionLoginBehavior howToBehave = allowSystemAccount ?
                                               FBSessionLoginBehaviorUseSystemAccountIfPresent :
                                               FBSessionLoginBehaviorWithFallbackToWebView;
    [session openWithBehavior:howToBehave
            completionHandler:handler];
    result = session.isOpen;
    }
    return result;
}
于 2012-09-29T00:29:19.610 回答