【问题标题】:Facebook dialog and the Back buttonFacebook 对话框和返回按钮
【发布时间】:2012-05-03 21:49:29
【问题描述】:

当使用 facebook android sdk 打开对话框时,一切正常。

但是,如果用户单击“后退”按钮,则对话框确实会关闭,但不会调用对话框侦听器的 onCancel 方法(或任何其他方法)。

我搜索了这件事,在github上发现了这个来自fb android sdk的pull request:Calls Cancel on DialogListener when Dialog is Cancelled

我参加了一个部分并对其进行了一些修改以得到这个:

@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 的一部分? 该拉取请求已有一年多的历史,最后一个响应大约有 11 个月的历史。 为什么不将其添加到 sdk 源中?

由于这个解决方案正在运行,它并不紧急,但我不喜欢修改 facebook sdk 的源代码,因为以后可能会出现问题(如果/当它们更新时)。

有什么想法吗?

【问题讨论】:

    标签: facebook dialog back-button facebook-android-sdk


    【解决方案1】:

    您应该修改 FbDialog 类。 添加此行以设置对话框不可使用 BACK 键取消:

    setCancelable(false);
    

    或者添加这些行来处理 BACK 键点击:

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

    【讨论】:

    • 感谢您的回复,由于这段代码已经不用了,所以我无法真正测试它。另外,这仍然需要修改fb源代码。
    • @NitzanTomer 显然 facebook 放弃了那个项目,因为目前有 33 个开放的拉取请求,甚至是同一个错误的重复。我删除了 fb 代码上的可取消项,效果很好!
    【解决方案2】:

    当后退按钮不会导致 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();
            }
    
        }
    

    【讨论】:

    • 感谢您的回答。老实说,我已经有一段时间没有检查这个问题了,但你为什么建议我使用Facebook.FORCE_DIALOG_AUTH?最好使用SSO 以获得更好的用户体验。
    • 如果我没记错的话,主要原因是非 SSO 使用更好的弹出对话框来显示身份验证面板,而 SSO 面板从右侧滑入(然后从右侧滑出)用户完成后)。似乎没有办法更改此 UI,至少无需直接破解 SDK 代码。
    • 其他原因是应用程序要求之一是不使用已安装的 Facebook 客户端。
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2011-09-28
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多