【问题标题】:FBSDKAccessToken.currentAccessToken() found nil every timeFBSDKAccessToken.currentAccessToken() 每次都发现 nil
【发布时间】:2016-02-10 09:39:21
【问题描述】:

我在我的应用程序中集成了 facebook。但是登录后 FBSDKAccessToken.currentAccessToken() 发现 nil 。

这是我的代码:

override func viewDidLoad() {

    if (FBSDKAccessToken.currentAccessToken() != nil)
    {
        print("Not loggedin...")
    }
    else
    {
        print("logged in...")
    }

    loginbutton.delegate = self
    loginbutton.readPermissions = ["public_profile", "email", "user_friends"]
}


func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {

    if(error == nil)
    {
        print("login complete")
        print(result)
        print(result.grantedPermissions)
    }
    else{
        print(error.localizedDescription)
    }

    if let userToken = result.token
    {
        let token:FBSDKAccessToken = result.token
        print("TOKEN = \(FBSDKAccessToken.currentAccessToken().tokenString)")
        print("User ID = \(FBSDKAccessToken.currentAccessToken().userID)")
    }

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name, email"])

    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            print("Error: \(error)")
        }
        else
        {
            print("fetched user: \(result)")
            let userEmail : NSString = result.valueForKey("email") as! NSString
            print("User Email is: \(userEmail)")
            let userName : NSString = result.valueForKey("name") as! NSString
            print("User Name is: \(userName)")
        }
    })
}

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
    print("User Logged Out")
}

登录后,我得到一个空白屏幕。它会打印登录成功消息,但不会进入:

if let userToken = result.token
{
    let token:FBSDKAccessToken = result.token
    print("TOKEN = \(FBSDKAccessToken.currentAccessToken().tokenString)")
    print("User ID = \(FBSDKAccessToken.currentAccessToken().userID)")
}

所以,我没有得到任何令牌。当它去打印电子邮件时,它显示了这个错误:

这是我在 appdelegate 中的代码

 func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}


func applicationDidBecomeActive(application: UIApplication) {

    FBSDKAppEvents.activateApp()
}

func application(application: UIApplication,
    openURL url: NSURL, options options: [String: AnyObject]) -> Bool {
        return GIDSignIn.sharedInstance().handleURL(url,
            sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey]! as! String,
            annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}

实际上每次调用 gmail 集成的 openurl 方法时,我如何才能将条件设置为调用 facebook 集成的方法

【问题讨论】:

  • var fbAccessToken = FBSDKAccessToken.currentAccessToken().tokenString
  • 我没有收到这个 FBSDKAccessToken.currentAccessToken().userID 它的火灾错误。描述:结果 = @Uma

标签: ios swift facebook swift2 facebook-ios-sdk


【解决方案1】:

在你的代码中做以下更改,它会起作用

 func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
            println("User Logged In")

            if ((error) != nil)
            {
                // Process error
            }
            else if result.isCancelled {
                // Handle cancellations
            }
            else {
                // If you ask for multiple permissions at once, you
                // should check if specific permissions missing
                if result.grantedPermissions.contains("email")
                {
                     // Do work
        self.returnUserData()

                }
            }   
        }

调用此方法获取用户的email id

    func returnUserData()
        {
            let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters:["fields":"name,email,first_name,last_name"])
            graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

                if ((error) != nil)
                {
                    // Process error
                    println("Error: \(error)")
                }
                else
                {
                    println("fetched user: \(result)")
                    let userName : NSString = result.valueForKey("name") as! NSString
                    println("User Name is: \(userName)")
                    let userEmail : NSString = result.valueForKey("email") as! NSString
                    println("User Email is: \(userEmail)")
                }
            })
        }

请移除此方法

func application(application: UIApplication,
    openURL url: NSURL, options options: [String: AnyObject]) -> Bool {
        return GIDSignIn.sharedInstance().handleURL(url,
            sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey]! as! String,
            annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}

更改此方法实现

func application(application: UIApplication,
        openURL url: NSURL,
        sourceApplication: String?,
        annotation: AnyObject?) -> Bool {
if url.scheme == "fbxxxxx"
{
//xxxxx is your APP ID
return FBSDKApplicationDelegate.sharedInstance().application(
                application,
                openURL: url,
                sourceApplication: sourceApplication,
                annotation: annotation)
}else if url.scheme == "com.googleusercontent.apps.xxxxxx"
  {
// string is reverse client ID
 return GIDSignIn.sharedInstance().handleURL(url,
                sourceApplication:  sourceApplication,
                annotation: annotation)
   }
 }

【讨论】:

  • 主要是我得到的结果为零@rohit
  • 是否被调用?
  • 你好@Rohit 实际上我还在该页面上集成了 gmail,因此它调用了 gmail 的 openurl 方法。就是这样,它在 facebook 中返回 nil 请阅读我更新的问题并建议我解决方案
  • 感谢@Rohit,我只是将代码转换为 swift 并且效果很好。要去投票谢谢老兄
  • 在获取电子邮件时仍然崩溃,这是我的响应获取用户:{ id = 1041870089206230; name = "Govind Rakholiya";用户名是:Govind Rakholiya 在下一行它的崩溃,我没有收到电子邮件
猜你喜欢
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2017-02-13
相关资源
最近更新 更多