2017-01-06 122 views
5

使用LoginManager類登錄時出現奇怪的問題。我從片段調用LoginManager.getInstance().logInWithReadPermissions(..)以使用所需的權限進行登錄。解析sdk的Android Facebook SDK登錄問題

我已經盡我所能進行了調試,並且發現返回到此片段的父活動的onActivityResult的回調請求代碼是錯誤的。以下代碼段來自LoginManager類,該類使用某些請求代碼註冊用於登錄的回調。

... 
CallbackManagerImpl.registerStaticCallback(
       CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode(), 
       new CallbackManagerImpl.Callback() { 
       @Override 
       public boolean onActivityResult(int resultCode, Intent data) { 
        return LoginManager.this.onActivityResult(resultCode, data); 
       } 
       } 
    ); 
... 

但是當它調用它不是CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()活動的onActivityResult但別的東西它像雙。例如,當我試圖調試和檢查這些值是這樣的:

CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()= 64206在Activity類接收

requestCode = 129742

現在因爲這個原因,當callbackManager試圖調用onActivityResult like

callbackManager.onActivityResult(requestCode,resultCo數據);

與此requestCode它沒有找到從地圖logincallback繼續前進,它停在那裏。我不知道爲什麼會發生這種情況,因爲我使用的是ParseFacebookSDK,當我使用ParseFacebookUtils.logInWithReadPermissionsInBackground(..)進行登錄時,它完美地工作。以下是gradle依賴關係。

... 
compile 'com.facebook.android:facebook-android-sdk:4.7.0' 
compile('com.parse:parse-android:1.13.0') { 
     exclude group: 'com.parse.bolts', 
       module: 'bolts-tasks' 
    } 
compile 'com.parse:parsefacebookutils-v4-android:[email protected]' 
... 

如果能夠幫助,將不勝感激。謝謝。

UPDATE:

它的工作對我來說,當我從父活動,而不是片段試圖Facebook登錄,它返回正確的請求代碼活動的onActivityResult這個時候,它只是工作。這已經解決了我的問題,但仍想了解這裏的片段問題,所以如果您知道請分享您的想法。謝謝。

+0

請避免使用庫而Facebook爲Android提供非常SDK。因爲我們知道解析是在棄用過程中。這是一個建議你不要使用解析。 –

+1

我正在使用解析作爲後端,並已將其遷移到專用應用程序服務器上。 – KunalK

回答

3

當您的用戶已經登錄時,試圖撥打ParseFacebookUtils.logInWithReadPermissionsInBackground並不正確,可能這就是爲什麼您沒有收到回撥。

如果您的用戶已經登錄但未鏈接到Facebook,則調用正確的函數是ParseFacebookUtils.linkWithReadPermissionsInBackground,這意味着您要將用戶鏈接到Facebook,而不是登錄到您的應用程序(因爲他已經登錄)。 Take a look in the docs for that.

+0

Ohkay讓我試試這個。感謝您的迴應。 – KunalK

+0

在這種情況下,當另一個用戶已經在另一臺設備上使用Facebook登錄時會發生什麼情況,因爲文檔說__「鏈接時發生的步驟與登錄非常相似。區別在於,在成功登錄時,現有的ParseUser將更新Facebook的信息,未來通過Facebook登錄後會將用戶登錄到他們現有的賬戶中。「__ – KunalK

+0

這是一個不同的問題。答案是否解決了你原來的問題? –

2

如果您從片段中調用LoginManager.getInstance().logInWithReadPermissions(..),則希望在片段的onActivityResult中接收到正確的請求代碼,而不是活動的onActivityResult

請參閱here。片段有自己的'onActivityResult`方法。他們不需要依賴於一項活動。

是不是真棒的東西,這並不一定需要任何UI本身仍提供這種方法:)