2017-02-17 12 views
0

Я пытаюсь интегрировать Facebook login для моего приложения swift3.Быстрые проблемы обратного вызова входа в систему Facebook

Я читаю эту документацию Facebook SDK for 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 и чтение Login Behavior documentation не работает, чтобы назначить callback.

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

ответ

2

Ниже может привести маркер доступа будет нулевым

  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' и, таким образом, могут быть незначительные синтаксические различия, но в конечном счете, они работают точно так же.

EDIT

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

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