IOS Facebook SDK 4.01:我应该使用FBSDKAccessToken.currentAccessToken()来检查用户是否已登录?

Nic*_*ick 9 facebook-ios-sdk swift ios8

我试图熟悉FB最新的IOS SDK(4.0.1).我已将它集成到IOS8 Swift项目中,并使用FBSDKLoginButton来记录和退出用户.我希望应用程序在用户已经登录时跳过显示Login视图控制器.

我应该只检查FBSDKAccessToken currentAccessToken()的返回结果吗?如果用户没有登录,这会返回'nil'吗?文档有关于此方法的以下内容:

您可以在应用程序冷启动时从钥匙串缓存或应用程序书签加载SDK.您应该在视图控制器的viewDidLoad中检查其可用性.

就像是:

// LoginViewController.swift     
override func viewDidLoad() {
        super.viewDidLoad()
        if(FBSDKAccessToken.currentAccessToken()){
            //They are logged in so show another view
        }else{
            //They need to log in
        }
    }
Run Code Online (Sandbox Code Playgroud)

因此,这听起来像它可能是什么我要找的,但我真的不能从这个描述出来.SO的优秀人员如何处理这个常见用例?:)

-缺口

jef*_*fjv 22

是的,FBSDKAccessToken.currentAccessToken()是你应该检查的,虽然你的代码不起作用,因为这不会返回布尔值.你需要这样的东西:

    if(FBSDKAccessToken.currentAccessToken() != nil) {
        //They are logged in so show another view
    } else {
        //They need to log in
    }
Run Code Online (Sandbox Code Playgroud)

此外,这仅适用于应用程序在前景/后台(用户点击主页按钮)之间移动的情况.如果应用程序被终止并且冷启动,则除非您在AppDelegate中的didFinishlaunchingWithOptions中实现以下内容,否则令牌将丢失:

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

您无需担心钥匙串,因为只要您实施必要的部件,就会自动为您处理.

下面的网站有一个很好的教程,可以让一个简单的例子工作:http: //www.brianjcoleman.com/tutorial-how-to-use-login-in-facebook-sdk-4-0-for-swift/

  • 嗯,这似乎适用于“初始”facebook 登录(当用户必须转到 facebook 并授权您的应用程序时),但是当您随后启动应用程序(并且按钮显示“注销”)时,令牌是仍然为零。 (2认同)
  • 我按时调用了AppDelegate方法.我仍然得到nil accessToken.来自[FBSDKAccessToken currentAccessToken] (2认同)