2011-12-10 62 views
8

我試圖整合Facebook登錄我的Android應用程序。我在互聯網上發現了很多例子,但現在我遇到以下問題,找不到解決方案。Android的Facebook.authorize不要調用oncomplete方法

在facebook.authorize完成工作後,永不會調用oncomplete方法。 如果我使用facebook.authorize和Facebook.FORCE_DIALOG_AUTH,在這種情況下,oncomplete方法被調用,我可以保存access_token。 我附上了一段我的代碼。 任何人都可以幫我解決這個問題嗎?

if(!facebook.isSessionValid()) {   
facebook.authorize(Login.this, new String[] {"publish_stream","read_stream", "offline_access"}, //Facebook.FORCE_DIALOG_AUTH, 
     new DialogListener() { 

       @Override 
       public void onComplete(Bundle values) { 

         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", facebook.getAccessToken()); 
         editor.putLong("access_expires", facebook.getAccessExpires()); 
         editor.commit();         
       } 

       @Override 
       public void onFacebookError(FacebookError error) {Log.e("FB:","Facebook Error");} 

       @Override 
       public void onError(DialogError e) {Log.e("FB:","Error");} 

       @Override 
       public void onCancel() {} 
     }); 
} 

感謝 廝磨

回答

22

確保您實現onActivityResult()正確作爲official documentation說:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    facebook.authorizeCallback(requestCode, resultCode, data); 
} 
+0

嗨Alextsc,感謝您的答覆。我附加的代碼是用於登錄按鈕的onclicklistener方法。那麼我必須把onActivityResult放在哪裏呢?另外,爲什麼Facebook.FORCE_DIALOG_AUTH的所有功能都能正常運作? – Simone

+0

'onActivityResult()'是你的Activity的一個方法*('onCreate()'等等也是活動方法)*。您可以將上面的代碼片段複製到活動課程中。我猜FORCE_DIALOG_AUTH的工作原理是因爲facebook使用了一種不同的機制而不是androids活動來將結果發回給回調(在這種情況下,我相信這是所有基於webview的)。如果你想對此有一個明確的答案,我推薦閱讀sdk代碼,因爲facebooks android sdk是開源的。 – 2011-12-11 20:30:30

+0

感謝您的幫助alextsc。我終於解決了我的問題。非常感謝 – Simone

相關問題