3

facebook android SDK を使用してダイアログを開くと、すべて正常に動作します。

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

この問題について検索したところ、github の fb android SDK からこのプル リクエストが見つかりました: Calls Cancel on DialogListener when Dialog is Canceled

私はこれを得るために一部を取り、それを少し修正しました:

@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 のソースを変更することは好きではありません。

何か案は?

4

2 に答える 2

6

FbDialogクラスを変更する必要があります。次の行を追加して、BACK キーでダイアログをキャンセルできないように設定します。

setCancelable(false);

または、次の行を追加して、BACK キーのクリックを処理します。

@Override
public void onBackPressed() {
    mWebView.stopLoading();
    dismiss();
    mListener.onCancel();
}
于 2012-08-30T16:19:10.963 に答える
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();
        }

    }
于 2012-06-19T18:39:24.733 に答える