iOS 9 Facebook 访问令牌在未来的应用程序发布中为零

iOS 9 Facebook Access Token is nil on future app launches

在最近的 iOS 9 更新以及对 Facebook SDK (4.6.0) 的更新之后,我发现我的登录会话在应用程序启动之间不再持续存在。

到目前为止,我的流程非常简单。

  1. 使用 FBSDKLoginButton 登录 Facebook。
  2. 在未来的视图和启动中检查 FBSDKAccessToken.currentAccessToken() 以便能够在应用程序中使用 Facebook。

我发现在最近的更新之后,如果我关闭并再次启动应用程序,我的 AccessToken 现在显示为 nil。这是一个主要问题,因为以前,我只需要登录一次,然后我的会话就会自动续订。

如果我是正确的,登录应该只发生一次,之后应用程序应该能够存储它在未来连接到 Facebook 所需的信息,或者只是保留一个可以自行刷新的令牌。

有没有人知道 iOS9 或 4.6.0 Facebook SDK 更新后可能发生了什么变化?是否需要保留属性以便在将来刷新令牌,或者令牌是否应该自动更新?我几乎 100% 肯定,使用 Facebook SDK 的预期体验是不必在每次启动应用程序时都登录(当您重新启动应用程序时,完全关闭并再次打开)。

谢谢!

更新

按照回复中的要求,我在我的 Plist 文件的 TransportSecurity 信息中添加了一个额外的密钥。不幸的是,仍然没有运气。

即使在我更新 iOS 9 时它对我不起作用,但在尝试此解决方案后它对我有用。

1) 在info.plist中添加数据,如图

didFinishLaunchingWithOptions 上添加这一行对我有用:

FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

最终方法如下所示:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

    if let accessToken = FBSDKAccessToken.currentAccessToken(){
        print(accessToken)
    }else{
        print("Not logged In.")
    }

    return true
}

我在升级到 FBSDK 4.18.0 时也发生了这种情况

降级到 4.17.0 为我解决了这个问题。

对于 iOS 11 / Swift 4 你应该将下面的代码添加到你的 AppDelegate:didFinishLaunchingWithOptions

SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)

最终代码为:

import FacebookCore

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.\

        // FACEBOOK CONFIGURATION
        SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)


        return true
    }