使 Google 登录对话框不可取消
Make Google Sign In Dialog Not Cancelable
我正在为我的 Android 应用程序使用 Firebase,并已实现 Google 帐户登录。我的问题是当它显示 "Choose Google Account" 对话框时,如果您点击离开它,它就会关闭。有没有办法让这个对话框不可取消?
首先,我想确保您注意到该行为存在的原因。如果没有取消按钮,那么用户怎么能改变主意呢?您通常希望避免强迫用户做他们后来决定不想做的事情。
话虽如此,这是我的答案:
我不能 100% 肯定地说不,但是在查看了 API 参考资料后,我没有看到可以更改该登录对话框的默认行为的方法。
我建议最好的处理方法是在 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);
}
}
点击外部事件导致返回状态代码 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
}
}
}
我正在为我的 Android 应用程序使用 Firebase,并已实现 Google 帐户登录。我的问题是当它显示 "Choose Google Account" 对话框时,如果您点击离开它,它就会关闭。有没有办法让这个对话框不可取消?
首先,我想确保您注意到该行为存在的原因。如果没有取消按钮,那么用户怎么能改变主意呢?您通常希望避免强迫用户做他们后来决定不想做的事情。
话虽如此,这是我的答案:
我不能 100% 肯定地说不,但是在查看了 API 参考资料后,我没有看到可以更改该登录对话框的默认行为的方法。
我建议最好的处理方法是在 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);
}
}
点击外部事件导致返回状态代码 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
}
}
}