PFUser currentUser возвращает ноль после входа в Facebook с помощью Parse SDK

В настоящее время я разрабатываю приложение для iOS, которое позволяет входить в систему через Facebook/Parse. Процесс входа в систему выглядит следующим образом:

  • при нажатии кнопки входа в систему открывается окно входа в Facebook;

  • пользователь входит в систему и дает разрешение на Facebook;

  • приложение получает информацию о accessToken Facebook;

  • приложение выполняет [PFFacebookUtils logInBackGroundWithAccessToken:(accessToken) ^block{}], чтобы выполнить аутентификацию входа Parse;

  • app переходит к представлению и пытается выполнить запрос для получения данных, связанных с этим пользователем, из Parse.

Проблема в следующем: после выполнения logInInBackgroundWithAccessToken [PFUser currentUser] возвращает nil, и я получаю сообщение об ошибке «Невозможно выполнить запрос сравнения для типа: (null)».


person bedranfleck    schedule 05.08.2015    source источник


Ответы (2)


Ok! Решил!

Покопавшись в коде немного дальше, я понял, что

[PFFacebookUtils logInInBackgroundWithAccessToken:(accessToken) block:^(nullable__block){}];

обратный вызов не выполнялся по неизвестным причинам.

Чтобы решить эту проблему, я добавил проверку в метод представления -viewDidLoad, чтобы увидеть, существует ли действительный [FBSDKAccessToken currentAccessToken], но НЕ действительный [PFUser currentUser], и если это так, я принудительно выполнил метод.

Если вам нужно более подробное объяснение, не стесняйтесь оставить свой комментарий! Спасибо!

person bedranfleck    schedule 05.08.2015

if ((currentUser != nil)) {

        if (PFFacebookUtils.isLinkedWithUser(currentUser!)) {
            proccessCurrent(currentUser!)

        } else {
            PFFacebookUtils.linkUserInBackground(currentUser!, withReadPermissions: self.facebookReadPermissions, block: {(success, error) in
                if (success) {
                    self.proccessCurrent(currentUser!)

                } else {
                    self.presentWalkThroughViewController()
                }
            })


        }
    } else {
        //var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()

        if (FBSDKAccessToken.currentAccessToken() == nil) {
            self.presentWalkThroughViewController()

        } else {
            var currentToken: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()
                PFFacebookUtils.logInInBackgroundWithAccessToken(currentToken, block: {(user, error) in
                if (error == nil) {
                    user?.pinInBackgroundWithBlock({(success, error) in
                        if (success) {
                            self.proccessCurrent(user!)
                        } else {
                           self.presentWalkThroughViewController()
                        }

                    })
                } else {
                    self.presentWalkThroughViewController()
                }
            })
        }
    }

Методы processCurrentUser продолжают обрабатывать выполнение моей программы, а PresentWalkThroughViewController представляет экраны входа в систему. Является ли это безопасным способом пропуска экрана входа в систему на Facebook, когда пользователь уже вошел в систему?

person Adil Ansari    schedule 31.03.2016