Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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登录失败_Android_Google Play Services - Fatal编程技术网

Android 频繁登录和注销后,Google登录失败

Android 频繁登录和注销后,Google登录失败,android,google-play-services,Android,Google Play Services,我可以先用谷歌账号登录我的应用程序好几次。 一切都很好 但如果我在一两分钟内登录和注销大约20次。 Google登录失败,在ActivityResult函数中返回错误代码12501,resultCode=0 我在用手机:Nexus6,安卓5.1.1 这是我的密码: private GoogleSignInOptions mGso; private GoogleApiClient mGac; public void init(@NonNull final BaseActivity activit

我可以先用谷歌账号登录我的应用程序好几次。 一切都很好

但如果我在一两分钟内登录和注销大约20次。 Google登录失败,在ActivityResult函数中返回错误代码12501,resultCode=0

我在用手机:Nexus6,安卓5.1.1

这是我的密码:

private GoogleSignInOptions mGso;
private GoogleApiClient mGac;

public void init(@NonNull final BaseActivity activity) {
    mGso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(activity.getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

    mGac = new GoogleApiClient.Builder(activity)
            .enableAutoManage(activity /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    ToastUtils.show(activity, R.string.login_failed);
                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, mGso)
            .build();
}

public void signIn(@NonNull final BaseActivity activity,
                   @NonNull GoogleSignInCallback callback,
                   @NonNull final OnLoadingListener<PlatformUserEntity> listener) {

    callback.registerCallback(listener);
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGac);
    activity.startActivityForResult(signInIntent, REQUEST_GOOGLE_SIGNIN);

    // disconnect the client
    mGac.stopAutoManage(activity);
    mGac.disconnect();

}
首先,我使用FragmentActivity初始化GoogleAppClient,然后signIn函数启动Acitvity。GoogleSignInCallback在onActivityResult函数中注册。然后断开客户端,因为每次单击登录按钮时,都会调用init函数

我怀疑我使用
stopAutoManage()
是否太早,但这似乎不是真的。 所以我很困惑,哪一部分可能是错的

我注意到日志:

Could not set socket write timeout: null
12-03 17:21:43.859 264-264/? W/SurfaceFlinger: couldn't log to binary event log: overflow.
12-03 17:21:43.902 1946-12870/? W/Conscrypt: Could not set socket write timeout: null
12-03 17:21:44.327 21168-21168/? W/AccountChipsFragment: Recording consent failed.
12-03 17:21:44.657 29359-29782/? E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE
12-03 17:21:44.664 812-1072/? W/ActivityManager: getRunningAppProcesses: caller 10145 does not hold REAL_GET_TASKS; limiting output
12-03 17:21:44.697 21168-21168/? W/AutoManageHelper: Unresolved error while connecting client. Stopping auto-manage.
它说“您有错误的OAuth2相关配置”,但我可以使用web客户端id在第一时间请求IdToken

这只会让我更困惑


我还发现了一件奇怪的事情。如果我安装本地构建的apk,则不会发生此错误。如果我从google play商店下载,就会出现这个错误。但这两个APK之间并没有区别,因为我提供的是谷歌商店和本地商店

如果您的代码第一次运行良好 你可以这样试试

private GoogleSignInOptions mGso;
private GoogleApiClient mGac;

public void signIn(@NonNull final BaseActivity activity,
           @NonNull GoogleSignInCallback callback,
           @NonNull final OnLoadingListener<PlatformUserEntity> listener) {

    mGso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(activity.getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

    mGac = new GoogleApiClient.Builder(activity)
            .enableAutoManage(activity /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                    ToastUtils.show(activity, R.string.login_failed);
                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, mGso)
            .build();

    callback.registerCallback(listener);
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGac);
    activity.startActivityForResult(signInIntent, REQUEST_GOOGLE_SIGNIN);

    // disconnect the client
    mGac.stopAutoManage(activity);
    mGac.disconnect();

}

对不起,为了我的英语。 我希望这对你有帮助。谢谢

通过更改代码并使用此代码,尝试此解决方案

mGso = newGoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(AuthenticatedActivity.this.getResources()
.getString(R.string.server_client_id))
.requestEmail()
.build();

有关更多信息,请检查此选项,如果它能帮助您。

我终于找到了原因。 我的apk由我们公司的放行程序再次签署。 该过程使用了另一个密钥库,因此更改了我的sha1密钥。 我在GoogleDevelop控制台中配置了新的sha1密钥,这个错误被解决了


但我仍然感到困惑,如果我使用debug keystore apk,成功登录并卸载它,然后我安装了具有不同sha1密钥的google play apk,谷歌登录有时可以工作。它不会立即告诉我错误。

粘贴您的logcat@RavishSharma我张贴我的日志,但不明白为什么会发生请检查此链接…它可能会有所帮助You@RavishSharma好的,谢谢你欢迎……我还发现了一件奇怪的事。如果我安装本地构建的apk,则不会发生此错误。如果我从google play store下载,则会发生此错误。但这两个apk之间没有区别,因为我将google store与本地apk一起交付。你是对的,我的SHA1密钥因某种原因出错。我阅读了so问题,但原因并不完全相同。但无论如何,谢谢。这可能是一个新手问题,但是你能描述一下你可以在谷歌开发控制台的哪里配置sha1密钥吗?@XavierPortebois是的,我不知道我们公司的发布程序。我使用firebase云消息,sha1键在[firebase](console.firebase.google.com)的控制台中设置。如果你不需要firebase,也可以在进行配置。我经过一番努力后发现了这一点。我从未在“签署你的应用”文档中读到你必须通过开发控制台注册已签署的APK,但无论如何,现在已经完成了。对于有同样问题的人,如果你仍然被困住,你可以一步一步地检查我自己的,也许这会有帮助:
 You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE
So, Problem can be:
    1. Sh1 key add in your api
    2. Api key type like for android or web
    3. Check Internet Connection
mGso = newGoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(AuthenticatedActivity.this.getResources()
.getString(R.string.server_client_id))
.requestEmail()
.build();