2012-04-23 10 views
3

Facebookのandroid sdkを使用してダイアログを開くと、すべてうまく動作します。Facebookのダイアログと戻るボタン

ただし、ユーザーが[戻る]ボタンをクリックすると、ダイアログボックスは実際に閉じますが、のダイアログボックスリスナー(または他のメソッド)のメソッドは呼び出されません。

私はこの問題を調査し、gbのfb android sdkからこのプルリクエストが見つかりました:Calls Cancel on DialogListener when Dialog is Cancelled

私は1つの部分を取って、それを修正ビットをこの得るために:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { 
     mWebView.stopLoading(); 
     dismiss(); 
     mListener.onCancel(); 
     return true; 
    } 

    return true; 
} 

を、私はFbDialogクラスに追加して、実際にこれはトリックを行うようです。

私はなぜこれがsdkの一部ではないのだろうか? プルリクエストは1年以上経過しており、最後の応答は約11か月です。 なぜそれをsdkソースに追加しないのですか?

この解決策は緊急ではないので、後で問題が発生する可能性があるため、facebook sdkのソースを変更したくありません。

アイデア?

答えて

0

戻るボタンでキャンセルメソッドがDialogListenerで発生しない場合、SDKにバグがある可能性があります。あなたはこのようなあなたのクラスでそれを実装することができ、それを適用した後https://github.com/facebook/facebook-android-sdk/pull/189

:ここ

は、修正のためにそれをチェックアウト


//call for Fb login dialog 
facebook.authorize(this, Constants.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, (DialogListener) new LoginDialogListener()); 

class LoginDialogListener implements DialogListener{ 
     public void onComplete(Bundle values) { 
      saveCredentials(facebook); 
      postToWall(); 
     } 
     public void onFacebookError(FacebookError error) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 
     } 
     public void onError(DialogError error) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 
     } 
     public void onCancel() { 
      //back button pressed or dialog cancel pressed 
      showToast("Authentication with Facebook cancelled!"); 
      finish(); 
     } 

    } 
+1

感謝を はBACKキーでキャンセルできないダイアログを設定するには、この行を追加します。正直なところ私はこの問題をしばらくチェックしていませんが、なぜFacebook.FORCE_DIALOG_AUTHを使用することをお勧めしますか?より良いユーザーエクスペリエンスのためには、「SSO」を使用することをお勧めします。 –

+0

私が正しく覚えているのは、非SSOがSSOパネルを右からスライドさせている間に認証パネルを表示するためのより良いポップオーバーダイアログを使用していることです。 SDKコードを直接ハックすることなく、このUIを変更する方法はありません。 – repto

+0

他の理由は、アプリケーション要件の1つが、インストールされたFacebookクライアントを使用しないことでした。 – repto

6

あなたは変更する必要がありますFbDialogクラス。

setCancelable(false); 

やバックキークリック処理するために、これらの行を追加します:答えを

@Override 
public void onBackPressed() { 
    mWebView.stopLoading(); 
    dismiss(); 
    mListener.onCancel(); 
} 
+0

返信ありがとう、このコードはもう使用されていないので、私は実際にそれをテストすることはできません.. また、まだfbのソースコードの変更が必要です。 –

+0

@NitzanTomer明らかに、33個のオープンプルリクエストがあるので、この同じバグの重複したものであっても、そのプロジェクトを放棄したことは明らかです。私はfbコードでcancelableを削除し、素晴らしい動作します! – Draiken

関連する問題