Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Google Plus登录帐户选择对话框问题_Android_Google Plus_Firebase Authentication_Google Signin - Fatal编程技术网

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

Android Google Plus登录帐户选择对话框问题,android,google-plus,firebase-authentication,google-signin,Android,Google Plus,Firebase Authentication,Google Signin,背景 我在我的应用程序中与Firebase一起使用Google Plus OAuth。当用户点击“登录”按钮,出现“帐户选择”对话框,用户选择所选的特定帐户并登录时 问题 假设用户在该设备中有两个帐户A和B。最初,他选择帐户A登录,然后使用应用程序,然后决定注销。现在,他再次单击登录按钮,但帐户选择对话框不会出现,它会使用以前选择的帐户A自动登录 我想要什么 我希望用户每次都能看到“帐户选择”对话框,并让他们有机会选择不同的帐户 代码 下面是我如何使用GoogleAPI客户端进行登录的一个小代码

背景

我在我的应用程序中与Firebase一起使用Google Plus OAuth。当用户点击“登录”按钮,出现“帐户选择”对话框,用户选择所选的特定帐户并登录时

问题

假设用户在该设备中有两个帐户A和B。最初,他选择帐户A登录,然后使用应用程序,然后决定注销。现在,他再次单击登录按钮,但帐户选择对话框不会出现,它会使用以前选择的帐户A自动登录

我想要什么

我希望用户每次都能看到“帐户选择”对话框,并让他们有机会选择不同的帐户

代码

下面是我如何使用GoogleAPI客户端进行登录的一个小代码片段

  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);

任何帮助都将不胜感激。

在每次登录前清除默认帐户,从而解决了此问题

@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);
    }

这将强制对话框每次出现。

只要使用下面的方法在用户每次登录时清除默认帐户即可

    private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);

    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {

        mGoogleApiClient.clearDefaultAccountAndReconnect();
    }
    startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void revokeAccess(){
googleSignInClient.revokeAccess()的
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
// ...
Log.d(LOGTAG,“///revokeAccess()//”;
}
});
}

您可以在mGoogleApiClient.connect()之前注销用户;使用应用程序。条件注销API没有帮助。该对话框在用户注销时不显示。唯一的方法是清除数据,清除它存储的一些首选项,然后对话框再次出现。这似乎并没有回答问题
    private void revokeAccess() {
        googleSignInClient.revokeAccess()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        // ...
                        Log.d(LOGTAG, " /// revokeAccess() /// ");
                    }
                });
    }