使Google登录对话框无法取消

时间:2016-09-26 22:29:32

标签: android firebase firebase-authentication google-signin

我正在为我的Android应用使用Firebase并实施了Google帐户登录。我的问题是当它显示“选择Google帐户”对话框时,如果您点击它就会关闭它。有没有办法让这个对话框无法取消?

2 个答案:

答案 0 :(得分:3)

首先,我想确保您注意到该行为存在的原因。如果没有取消按钮,那么用户如何改变主意呢?您通常希望避免强迫用户进入他们以后决定不想做的事情。

话虽如此,这是我的回答:

我无法100%确定地拒绝,但在查看API参考后,我没有看到有办法更改该登录对话框的默认行为。

请参阅API参考:https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInApi

我建议处理它的最佳方法是在onActivityResult代码中处理它。只需在返回的数据上调用getStatusCode()即可获取登录状态,并查看是否获得SIGN_IN_CANCELLED常量。这将表明用户取消了我认为如果他们离开屏幕就会发生这种情况。无论如何,如果代码没有返回,只需在控制台中打印它,看看当你点击关闭并取消对话框时返回的代码。

然后,如果他们确实取消了,您可以重新启动屏幕或询问他们发生了什么。我建议后者避免强迫他们进入这样一种情况,即获得他们想要的东西的唯一方法是强行关闭你的应用程序。

修改

以下是有关检查该状态代码的文档中的示例。这样做可能比通过拉动状态对象并以此方式获取代码更好:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    }
}

答案 1 :(得分:0)

点击外部事件导致状态代码返回为 12501,我们可以使用它进行验证并在登录失败后再次调用登录提示。

以下代码应该可以完成工作:

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);

        // Signed in successfully, show authenticated UI.
        Toast.makeText(this, "Success!", Toast.LENGTH_SHORT).show();
        getUserAccountInfo();
    } catch (ApiException e) {
        Log.e(TAG, "signInResult:failed code=" + e.getStatusCode());
        if(e.getStatusCode()==12501) {                  // check for sign-in cancellation
            signIn();                                   // if cancelled then call signIn() again
        }
    }
}