2015-09-05 58 views
1

我的臉書認證在我的應用程序有時調用方法onCancel,我不知道發生了什麼。我覺得我的代碼是正確的,有時候這個認證非常好,有時候不是。Facebook身份驗證有時返回OnCancel

我的身份驗證的源代碼:https://gist.github.com/ppamorim/76d40f0edf3fd4f64d47

然後,將該失敗在管線46首先我請求該信息:

strings.add("public_profile"); 
strings.add("email"); 
loginManager.logInWithReadPermissions(contextCallback.getActivity(), strings); 

然後,我把這種:

ArrayList<String> stringss = new ArrayList<>(); 
stringss.add("publish_actions"); 
loginManager.logInWithPublishPermissions(contextCallback.getActivity(), stringss); 

的auth在那裏工作得很好,但是在返回到我的應用程序後,這個隨機地落到了OnCancel上。

清單:

<!-- Facebook Keys --> 
    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/app_id" /> 

<provider android:authorities="com.facebook.app.FacebookContentProviderHIDDEN_KEY" 
     android:name="com.facebook.FacebookContentProvider" 
     android:exported="true" /> 

我不知道發生了什麼......

編輯1:

我改變了源代碼,但有相同的問題:

https://gist.github.com/ppamorim/446183341ecd5ad099fe

編輯2:

新的更新,當然少了代碼。 但仍然不能工作,它停在53行。 現在我將刪除publish_actions,然後當它解決時,我將返回此功能。

https://gist.github.com/ppamorim/3cd0a141aac5d52bd60e

回答

1

我不認爲你可以調用登錄對話框兩次短時間內連續,就像你正在做的:

public Facebook authorize(/* ... */) { 
    // ... 
    ArrayList<String> strings = new ArrayList<>(); 
    strings.add("public_profile"); 
    strings.add("email"); 
    loginManager.logInWithReadPermissions(contextCallback.getActivity(), strings); 
    ArrayList<String> stringss = new ArrayList<>(); 
    stringss.add("publish_actions"); 
    loginManager.logInWithPublishPermissions(contextCallback.getActivity(), stringss); 
    return this; 
} 

的原因,這並不工作就是 - 我認爲 - 對登錄對話框仍處於打開狀態時,會調用登錄/發佈權限對話框。這是因爲登錄對話框打開,然後異步運行到您自己的authorize()方法,然後再次嘗試打開權限對話框。 顯然,如果第一次登錄對話框尚未正確完成,則可能會失敗。

相反,您應等待第一次登錄的onSuccess()回調完成,然後再決定是否要再次打開權限對話框以請求發佈權限。

這也是documented by Facebook

+0

問題仍然存在。我不知道會是什麼。 :( –

+0

嘗試直接在'authorizeCallback.onSuccess()'中調用您的'publishPermissions()',而不先製作圖API請求。現在,您的代碼看起來非常複雜,基本工作 – derabbink

+0

新的更新:)你可以檢討? –