android - 频繁登录退出后谷歌登录失败

标签 android google-play-services

我可以先使用 Google 帐户登录我的应用程序几次。 一切都很好。

但是如果我在一两分钟内登录和退出大约 20 次。 Google 登录失败,在 onActivityResult 函数中,它返回错误代码 12501,resultCode = 0;

我使用的手机:Nexus 6,Android 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();

}

这里是gradle:

compile 'com.google.android.gms:play-services-base:9.6.1'
compile 'com.google.android.gms:play-services-gcm:9.6.1'
compile 'com.google.android.gms:play-services-auth:9.6.1'

首先,我使用 FragmentActivity 初始化 GoogleApiClient,然后 signIn 函数启动 Acitvity。 GoogleSignInCallback 在 onActivityResult 函数中注册。然后断开Client,因为每次点击登录按钮,都会调用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相关配置”,但我可以在第一时间使用网络客户端id来请求IdToken。

这只会让我更加困惑。

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

最佳答案

终于找到原因了。 我的apk被我们公司的发布程序再次签名了。 该过程使用了另一个 keystore ,因此更改了我的 sha1 key 。 我在谷歌开发控制台配置了新的 sha1 key ,这个错误被解决了。

但我仍然感到困惑,如果我使用调试 keystore apk,成功登录并卸载它,然后我安装具有不同 sha1 key 的 google play apk,google 登录有时可以工作。它赢了'马上告诉我错了。

关于android - 频繁登录退出后谷歌登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40945914/

相关文章:

android - 获取报警间隔

java - 自动更新 Android 应用程序,无需用户点击

android - Google Play 服务未在模拟器上更新至 10.0.+

android - Admob - 横幅显示黑色背景且无广告

android - 无法使用 Google Play 服务构建 Android 项目

android - 在android应用程序中使用BroadCastReceiver获取经纬度?

Android 进度条样式语法

android - Android 版 OpenCV : Sample Project ClassNotFound Exception

android - 如果使用Google Play服务,则不能在没有版本冲突的情况下使用最新的compileSdkVersion和targetSdkVersion

android - 在 Android 中初始化游戏客户端