使 Google 登录对话框不可取消

Posted

技术标签:

【中文标题】使 Google 登录对话框不可取消【英文标题】:Make Google Sign In Dialog Not Cancelable 【发布时间】:2017-02-04 10:04:31 【问题描述】:

我将 Firebase 用于我的 android 应用,并已实施 Google 帐户登录。我的问题是当它显示“选择 Google 帐户”对话框时,如果您点击离开它,它就会关闭。有没有办法让这个对话框不可取消?

【问题讨论】:

您的意思是当他们点击对话之外的屏幕上某处时,对吧?不是实际的取消按钮? 是的。也没有“取消”按钮。 【参考方案1】:

点击外部事件导致状态码返回为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
        
    

【讨论】:

【参考方案2】:

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

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

我不能 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);
    

【讨论】:

以上是关于使 Google 登录对话框不可取消的主要内容,如果未能解决你的问题,请参考以下文章

Jquery UI 对话框使不可关闭

Android 点击AlertDialog上的确定和取消按钮,使对话框不消失方法

Google Plus 登录帐户选择对话框问题

带有进度对话框取消的 Android AsyncTask

如何避免 Google Play 游戏服务登录对话框自动提示?

怎么取消windows8系统的登录密码