2

我想從我的Android活動調用Facebook授權,但由於某種原因它從不調用onActivityResult,因爲它應該。使用facebook.authorize與Android SDK不會調用onActivityResult

我跟着official tutorial,我甚至創造了一個非常簡單的應用程序只是爲了試試這個功能:

public class SimpleFacebookActivity extends Activity { 
    private EditText console; 
    private Facebook facebook = new Facebook(APP_ID); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     this.console = (EditText)super.findViewById(R.id.console); 
     this.console.append("Started\n\n"); 

     String text = Integer.toString(super.getIntent().getFlags() & Intent.FLAG_ACTIVITY_NO_HISTORY); 
     this.console.append(text); 

     this.facebook.authorize(this, new DialogListener() { 
      @Override 
      public void onComplete(Bundle values) {} 

      @Override 
      public void onFacebookError(FacebookError error) {} 

      @Override 
      public void onError(DialogError e) {} 

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

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     this.console.append("onActivityResult, request code: " + requestCode + "\n\n"); 
     super.onActivityResult(requestCode, resultCode, data); 
     this.facebook.authorizeCallback(requestCode, resultCode, data); 

    } 
} 

我添加了一個文本編輯窗口小部件,以我記錄哪些,當我運行這個應用程序的所有我得到的是:

Started 

0 

我檢查發現,因爲提到它的教程,並在另一篇文章中,我看到這裏的堆棧 溢出如果FLAG_ACTIVITY_NO_HISTORY設置,但在我的情況下,它沒有設置,所以不能成爲問題。

我該如何解決這個問題?

+0

我有完全相同的問題!請告訴我,如果你有這個解決方案! –

+0

這是一段時間以前,我不記得,但看起來我接受了下面的答案,它不能幫你解決嗎? –

+0

沒有...我在keytool中輸入了一個錯誤的密碼..輸入「android」作爲密碼進行修復;) –

回答

5

我想這是因爲你需要一些鍵添加到您的應用程序在Facebook的:

https://developers.facebook.com/docs/mobile/android/build/#sig

但關鍵是建立不正確,當你跟着一步一步的指導,讓你必須檢查Facebook SDK的調試器,向您發出錯誤信息,告訴您所使用的密鑰與您的應用不一樣,請複製粘貼和瞧!

+0

我在Facebook開發者應用中添加了密鑰,並且我知道它運行良好,因爲我可以使用sdk成功進行身份驗證,只是在身份驗證過程完成時未調用onActivityResult方法。 –

+4

我明白了,問題在於你期望Dialog返回你喜歡的額外活動,看,當你打開對話框時,它會發生2件事。 1 - 你的手機上安裝了facebook.katana(Facebook應用程序),你可以在其中進行授權(我假設你已經登錄了),而且外部應用程序會在你的ActivityResult中爲你提供一個不錯的代碼,認爲它是32665. 2.第二種情況是你沒有安裝應用程序,因此它會在你的活動中打開一個Web視圖,一個VIEW,它不會離開你的活動永遠不會,所以你必須接受任何你想要的方法... – desgraci

+2

對話框聽衆,就像例子中那樣,你記錄正確,它會調用onComplete(Bundle values){}方法。 現在,如果你確實想要使用Facebook應用程序強制你的活動在activityResult中進行回調,你應該實現一個intent和starActivityForresult,但是這不被推薦。希望這可以澄清你的疑惑。 – desgraci

0

我不知道Facebook SDK,但它看起來應該實施這些DialogListener方法。否則,你當然不會得到任何回調。

+0

實現DialogListener方法沒有幫助,我嘗試在onComplete中添加一些代碼,到那裏,但仍然沒有調用onActivityResult方法。 –

+0

這不正常嗎? onActivityResult僅在使用intent啓動activityForResult時纔會被調用? – Peterdk

+0

@Peterdk,如果單點登錄登錄過程被調用(它使用activityForResult觸發),它會到達那裏。 – harism

相關問題