Facebook SDK 4.0 保持登录状态/在 iOS 中保存 FBSDKAccessToken (Swift 3)

Moh*_*dal 2 facebook ios swift

我正在尝试以某种方式保存我的访问令牌/在应用程序退出/崩溃时保持登录状态。我可以登录 Facebook 并使用 FBSDKGraphRequest 检索数据,但是每次我退出应用程序时,我都会遇到另一个登录屏幕,要求我进行身份验证(并说我已经授权了该应用程序)在进行了大量相关的 Google 搜索之后对于特定的 FBSDK 版本,我发现几乎没有任何东西可以帮助我以某种方式保持当前用户登录 Facebook。

FBSession 已被弃用(因此我无法使用它,因为它不再在最新的 SDK 中),而是我必须对 FBSDKAccessToken 做一些事情,但我真的不知道我必须做什么。

这是我用来检查当前是否登录的当前代码:

AppTabBarController(类型 UITabBarController)

override func viewDidAppear(_ animated: Bool) {
    if FBSDKAccessToken.current() == nil {
        //Go to Facebook Login Screen
        performSegue(withIdentifier: "toFBLogin", sender: self)
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序委托

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    FBSDKApplicationDelegate.sharedInstance()
    return true
}
func applicationDidBecomeActive(_ application: UIApplication) {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    FBSDKAppEvents.activateApp();
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
...//Plus rest of protocol-required functions.
Run Code Online (Sandbox Code Playgroud)

我的问题是无法保存我所知道的 AccessToken。(每当应用程序启动时,FBSDKAccessToken.current()为零)

Alt*_*nov 6

使用 AppDelegate 中的 swift,您可以检查用户是否使用以下内容登录:

if (FBSDKAccessToken.currentAccessToken() != nil) {

}
Run Code Online (Sandbox Code Playgroud)

只是想知道,如果你在

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

}
Run Code Online (Sandbox Code Playgroud)

最好打电话

FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
Run Code Online (Sandbox Code Playgroud)

之前if,否则FBSDKAccessToken将是nil,您将再次看到登录屏幕。

例子:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

    if (FBSDKAccessToken.currentAccessToken() != nil) {
        //if you are logged
    } else {
    //if you are not logged
    }

    return 0
}
Run Code Online (Sandbox Code Playgroud)