1

不要把它作为一个重复的问题,我提出这个问题是因为答案没有帮助,集成对我来说很好,但是页面加载速度很慢。

加载登录屏幕确实需要很长时间。登录操作需要超过 8-50 秒或更长时间。

有时加载身份验证屏幕需要超过 10 秒。

以下代码用于 FBLoginButtonAction

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

        if(error != nil){

            print(error.localizedDescription)

            return

        }

        if result.isCancelled{

            showAlert(title: "Login Cancelled", message: "You have cancelled login through Facebook")

        }

        if FBSDKAccessToken.currentAccessToken() != nil{

            print("Logged in")

        }

    }
4

1 回答 1

0

您可以使用 NSNotification 方法制作 FLogin。只需按照以下步骤操作。

  1. 在 ViewDidload 中设置 FBDelegate 并为 NSNotification 设置观察者,例如,

    self.btnFBLogin.delegate = self
    self.btnFBLogin.readPermissions = ["public_profile","email","user_friends"]
    
    FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "getUserProfile:", name: FBSDKProfileDidChangeNotification, object: nil)
    

2.现在为 NSNotification 制作一个自定义函数,例如,

   func getUserProfile(notification : NSNotification)
{
    let accessToken = FBSDKAccessToken.currentAccessToken()
    if(accessToken != nil)
    {

        let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
        req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
            if(error == nil)
            {
                print("result \(result)")
                let userInfo = result as AnyObject
                if let email = userInfo.valueForKey("email") as? NSString
                {
                    print(email)
                }
                else
                {
                    let loginManager = FBSDKLoginManager()
                    loginManager.logOut()
                }
            }
            else
            {
                print("error \(error)")
            }
        })
    }
}

注意:不要在 FB 委托方法中编写任何逻辑。把它放在那里。

我认为这将帮助你 bcz 它对我来说很好。:)

于 2016-01-04T08:59:13.280 回答