使谷歌登录对话框不可取消

6

我正在使用Firebase开发我的安卓应用,并已经实现了Google账户登录。但是,当弹出“选择Google账户”对话框时,如果你点击其他地方,它就会自动关闭。有没有办法让这个对话框不可取消?


你的意思是当他们在对话框之外的屏幕上点击某个地方,对吗?而不是实际的取消按钮? - Ryan
是的。同时也没有“取消”按钮。 - Jared
2个回答

6
首先我想确保您注意到该行为存在的原因。如果没有取消按钮,那么用户如何改变主意?通常您希望避免强迫用户做他们后来不想做的事情。
话虽如此,这是我的答案:
我不能百分之百地否定,但在查看 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);
    }
}

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
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接