iOS 9 Facebook 访问令牌在未来的应用程序发布中为零
iOS 9 Facebook Access Token is nil on future app launches
在最近的 iOS 9 更新以及对 Facebook SDK (4.6.0) 的更新之后,我发现我的登录会话在应用程序启动之间不再持续存在。
到目前为止,我的流程非常简单。
- 使用
FBSDKLoginButton
登录 Facebook。
- 在未来的视图和启动中检查
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
}
在最近的 iOS 9 更新以及对 Facebook SDK (4.6.0) 的更新之后,我发现我的登录会话在应用程序启动之间不再持续存在。
到目前为止,我的流程非常简单。
- 使用
FBSDKLoginButton
登录 Facebook。 - 在未来的视图和启动中检查
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
}