Google Plus 登录帐户选择对话框问题
Posted
技术标签:
【中文标题】Google Plus 登录帐户选择对话框问题【英文标题】:Google Plus Sign In Account Selection Dialog Issue 【发布时间】:2017-02-09 18:27:08 【问题描述】:背景
我在我的应用中使用 Google Plus OAuth 和 Firebase。当用户点击登录按钮时,会出现帐户选择对话框,用户选择选择的特定帐户并登录。
问题
假设用户在该设备上有两个帐户,A 和 B。最初,他选择帐户 A 登录,然后使用该应用程序,然后决定退出。现在他再次点击登录按钮,但帐户选择对话框没有出现,它使用之前选择的帐户 A 自动登录。
我想要什么
我希望用户每次都能看到帐户选择对话框,如果他们愿意,让他们有机会选择不同的帐户。
代码
这是我如何使用 Google Api 客户端登录的小代码 sn-p。
String mClientId = parcel.getProviderExtra().getString(CLIENT_ID_KEY);
GoogleSignInOptions googleSignInOptions;
googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(mClientId)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(activity)
.addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
.build();
mGoogleApiClient.connect();
然后退出,
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
我们将不胜感激。
【问题讨论】:
可以在 mGoogleApiClient.connect() 之前注销用户;与应用程序。条件 退出 API 没有帮助。用户注销时不会显示该对话框。唯一的方法是清除数据,清除它存储的一些首选项,然后对话框再次开始出现。 【参考方案1】:通过在每次登录前清除默认帐户来解决此问题。
@Override
public void startLogin(Activity activity, String mEmail)
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
/**
* Clearing default account every time so that the account picker dialog can be enforced
*/
if (mGoogleApiClient != null && mGoogleApiClient.isConnected())
mGoogleApiClient.clearDefaultAccountAndReconnect();
activity.startActivityForResult(signInIntent, RC_SIGN_IN);
这将强制对话框每次出现。
【讨论】:
【参考方案2】: private void revokeAccess()
googleSignInClient.revokeAccess()
.addOnCompleteListener(this, new OnCompleteListener<Void>()
@Override
public void onComplete(@NonNull Task<Void> task)
// ...
Log.d(LOGTAG, " /// revokeAccess() /// ");
);
【讨论】:
这似乎没有回答问题【参考方案3】:只需在用户每次登录时清除默认帐户,使用以下方法即可。
private void signIn()
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
if (mGoogleApiClient != null && mGoogleApiClient.isConnected())
mGoogleApiClient.clearDefaultAccountAndReconnect();
startActivityForResult(signInIntent, RC_SIGN_IN);
【讨论】:
【参考方案4】:从 Firebase 16+ 添加 mGoogleSignInClient.revokeAccess();
// Full Code
private void startGoogleSignIn()
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(Splash.this, gso);
mGoogleSignInClient.revokeAccess();
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
【讨论】:
以上是关于Google Plus 登录帐户选择对话框问题的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Google 身份验证,退出并再次登录将使用上次登录的帐户登录