2011-12-10 5 views
8

私はアンドロイドアプリにFacebookのログインを統合しようとしています。私はインターネット上で多くの例を見つけましたが、今私は次の問題があり、解決策を見つけることができません。Android Facebook.authorizeは未完了のメソッドを呼び出さない

facebook.authorize仕上げ作業の後、oncompleteメソッドが呼び出されることはありません。 Facebook.FORCE_DIALOG_AUTHでfacebook.authorizeを使用すると、この場合、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

official documentationに述べたように、あなたが適切にonActivityResult()を実装していることを確認してください:

@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をすべてaspectedとして扱うのでしょうか? – Simone

+0

'onActivityResult()'はあなたのアクティビティのメソッド*( 'onCreate()'など)も*です。上記のスニペットをアクティビティー・クラスにコピーすることができます。私はFORCE_DIALOG_AUTHが動作するのは、facebookがアンドロイドの代わりに別のメカニズムを使用してコールバックに結果を送り返したからです(これは私が信じているすべてのwebviewです)。私はfacebook android sdkがオープンソースであるので、あなたはこれに明確な答えを持ちたいと思うならば、sdkコードを読むことをお勧めします。 –

+0

あなたの助けてくれてありがとうalextsc。私はついに私の問題を解決しました。本当にありがとう – Simone