Проблемы с обратным вызовом при входе в систему Swift Facebook

Я пытаюсь интегрировать Facebook login для своего приложения swift3.

Я читаю эту документацию Facebook SDK для Swift.

После установки с pod

pod 'FacebookLogin'
pod 'FacebookShare'

И добавьте их в Linked framework and libraries, вход в facebook работает, как в примере, отображающем окно сафари для входа в facebook и перенаправляющего тот же ViewController.

Но у меня два конкретных вопроса. Во-первых, мне нужно добавить обратный вызов после перенаправления входа в facebook (успешное или ошибочное) и назначить текущий токен.

Мой текущий код:

import FacebookLogin
import FacebookCore

class LoginViewController: UIViewController {

    override func viewDidLoad(){
        super.viewDidLoad()
        self.navigationItem.setHidesBackButton(true, animated:true);
        var fbtoken = AccessToken.current

        LoginManager().logOut()

        if(fbtoken != nil){
            let connection = GraphRequestConnection()
            connection.add(GraphRequest(graphPath: "/me")) { httpResponse, result in
                switch result {
                case .success(let response):
                    print("Graph Request Succeeded: \(response)")
                case .failed(let error):
                    print("Graph Request Failed: \(error)")
                }
            }
            connection.start()
        }

        let loginButton = LoginButton(readPermissions: [ .publicProfile ])

        let screenSize:CGRect = UIScreen.main.bounds
        let screenHeight = screenSize.height
        let newCenterY = screenHeight - loginButton.frame.height - 10
        let newCenter = CGPoint(x: view.center.x, y: newCenterY)
        loginButton.center = newCenter

        view.addSubview(loginButton)
}

Переменная fbtoken всегда равна nil, и чтение документации по поведению при входе не работает, чтобы назначить callback.

Что я делаю неправильно?


person MrMins    schedule 17.02.2017    source источник


Ответы (1)


Следующее может привести к тому, что токен доступа будет равен нулю

  1. Вы не установили info.plist должным образом: у вас должно быть логическое значение, установленное на YES с ключом NSAllowsArbitraryLoads в словаре NSAppTransportSecurity

  2. Facebook SDK неправильно инициализирован в didFinishLaunchingWithOptions в вашем файле AppDelegate: вы должны сделать этот вызов:

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    
  3. Ваша версия SDK устарела. Сообщается, что в некоторых версиях были ошибки в этой области, поэтому обновление SDK может решить вашу проблему, если для вас покрыты предыдущие 2 пункта.

Чтобы ответить на ваш другой вопрос, Facebook SDK имеет метод login с параметром закрытия следующим образом.

let manager = FBSDKLoginManager()

manager.logIn(withReadPermissions: ["public_profile"], from: self, handler: { (result, error) in
      if error != nil {
         // handle error
      }

      // login successful

})

Примечание: в приведенном мной коде используются pod 'FBSDKLoginKit' и pod 'FBSDKShareKit', поэтому могут быть небольшие синтаксические различия, но в конечном итоге они работают одинаково.

ИЗМЕНИТЬ

Я только что заметил, что вы используете LoginButton Facebook. В этом случае обратитесь к этой странице документации. для получения дополнительной информации. В основном, вот что вы можете сделать:

Убедитесь, что вы соответствуете FBSDKLoginButtonDelegate и реализуете метод didCompleteWithResult, который содержит результат операции входа в систему. Страница, на которую я ссылаюсь, содержит параметры метода и другие детали, которые могут вам понадобиться.

person ThunderStruct    schedule 17.02.2017