Ios 使用FBSDK的FbLogin有时工作速度非常慢

Ios 使用FBSDK的FbLogin有时工作速度非常慢,ios,swift,fbsdk,Ios,Swift,Fbsdk,不要把它当作重复的问题,我提出这个问题是因为答案没有帮助, 集成对我来说很好,但是页面加载速度非常慢 加载登录屏幕需要很长时间。登录操作需要8-50秒或更长时间 有时加载身份验证屏幕需要10秒以上 以下代码用于FBLoginButtoAction func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)

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

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

有时加载身份验证屏幕需要10秒以上

以下代码用于FBLoginButtoAction

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")

        }

    }

您可以使用NSNotification方法进行FBlogin。 只需遵循以下步骤

  • 在ViewDidload中为NSNotification设置FBDelegate和观察者

    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它对我来说很好。:)

    您可以使用NSNotification方法进行FBlogin。 只需遵循以下步骤

  • 在ViewDidload中为NSNotification设置FBDelegate和观察者

    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它对我来说很好。:)