2017-07-21 74 views
0

我有一個簡單的視圖控制器,有兩個按鈕。首先是官方Facebook登錄按鈕我facebooksdk無法獲得accesstoken swove

let loginButton = FBSDKLoginButton() 

順便說了,我該如何看待FBSDKLoginButton的實施?我試過命令點擊,我沒有看到init函數。 無論如何,這個按鈕工作得很好。我可以登錄,我能夠與

accessToken = FBSDKAccessToken.current() 

但是得到的accessToken每當我做我自己的登錄按鈕,我

FBSDKLoginManager().logIn(withReadPermissions: ["email", "public_profile"], from: self) { (result, err) in 
      if err != nil { 
       print("Custom FB login failed", err ?? "") 
       return 
      } 
     } 

我目前的accessToken返回nil登錄。我無法弄清楚爲什麼它適用於普通的按鈕,但不適合我自己的。我究竟做錯了什麼?

爲了讓這個更奇怪,有時候兩個按鈕都可以工作。這就像9/10次它失敗了,但是當我重新啓動應用程序時,它的作用是它的1/10。

編輯: 好的網上尋找更我看到它,因爲我想

FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 

是所謂的應用程序委託之前獲得訪問令牌。但是這引發了問題。爲什麼我不必擔心與原始按鈕有關的問題,但我爲自定義按鈕做了什麼?我如何確保首先調用委託方法?

編輯:現在,我把我的代碼中的打印語句,我看到,該方法只被調用一次。所以不,這不是問題。

編輯:要清楚,自定義按鈕允許我獲得正確的令牌,但不是在登錄後立即進行。我必須等待一段時間。但我不知道要等多久。

最終編輯:我想我已經解決了它。我現在將FBSDKAccessToken.current()放入facebook登錄管理器的完成處理程序中。中提琴!這似乎工作到目前爲止。不知道爲什麼沒有在線教程必須這樣做,但希望它沒有問題。

+0

你是什麼,如果犯錯!=零的結果呢? –

+0

錯誤總是零。換句話說,登錄是完美的。這是我無法獲得的訪問令牌。 –

+0

您是否試過這個AccessToken.current –

回答

0

如果錯誤是零的的accessToken是FBSDKAccessToken.currentAccessToken()

斯威夫特2

if let token = FBSDKAccessToken.currentAccessToken() { 

    let accessToken = token.tokenString 
    // USE YOUR TOKEN HERE 
} 
+0

我沒有「currentAccessToken()」。 –

+0

currentAccessToken()適用於Swift 2 – Cristina

+0

對不起,我應該表明我在Swift 3中, –