2017-02-17 176 views
0

我正在嘗試爲我的swift3應用程序集成Facebook loginSwift Facebook集成登錄回調問題

我在閱讀本文檔Facebook SDK for Swift

安裝後與pod

pod 'FacebookLogin' 
pod 'FacebookShare' 

而且在Linked framework and libraries添加它們,Facebook登錄工作作爲顯示Safari窗口的例子與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適當的:你必須有NSAppTransportSecurity字典下設置爲YES用鑰匙NSAllowsArbitraryLoads一個布爾值

  2. 您的AppDelegate文件中的Facebook SDK未在didFinishLaunchingWithOptions中正確初始化:您必須撥打此電話:

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
    
  3. 您擁有的SDK版本不是最新的。據報道,有些版本有漏洞在這一領域,以便更新,如果前2點覆蓋你

爲了回答您的其他問題,Facebook的SDK有login方法與閉合參數如下SDK可能會解決你的問題

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',所以有可能是輕微的語法差異,但最終他們的工作方式相同。

編輯

我只注意到你正在使用Facebook的LoginButton。在這種情況下,請參閱文檔this以瞭解更多信息。主要是,您可以執行以下操作:

確保您符合FBSDKLoginButtonDelegate並執行didCompleteWithResult方法,該方法包含登錄操作的結果。我鏈接的頁面包含您可能需要的方法參數和其他詳細信息。