Google Play 登录一直失败异常:4 [重复]

Posted

技术标签:

【中文标题】Google Play 登录一直失败异常:4 [重复]【英文标题】:Google Play Sign in keeps failing Exception: 4 [duplicate] 【发布时间】:2018-12-02 08:23:35 【问题描述】:

所以我一直在努力让我的应用程序获得谷歌玩游戏的成就,但我无法让它工作。我一直在关注本指南:https://developers.google.com/games/services/android/signin#implementing_player_sign-in 并且没有成功,每次我打开我的应用程序时它都会启动登录过程,但随后它会停止并说它失败了。这可能是我错过的东西,但我仍然无法弄清楚。

一些代码的时间:

build.gradle:

dependencies 
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.google.code.gson:gson:2.8.0'
    implementation "com.google.android.gms:play-services-games:12.0.1"
    implementation "com.google.android.gms:play-services:12.0.1"
    implementation 'com.android.support:multidex:1.0.3'

清单:

<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.one.second">
<uses-permission android:name="android.permission.INTERNET" />
<application
    android:allowBackup="true"
    android:label="One Second"
    android:icon="@drawable/app_icon"
    android:theme="@style/AppTheme">
    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    <meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>
    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|screenSize"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category   android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity
        android:name=".LowestActivity"
        android:configChanges="orientation|screenSize"
        android:screenOrientation="portrait"/>
</application>

main.java 中重要的部分:

private static final int RC_SIGN_IN = 9001;

@Override
protected void onCreate(Bundle _savedInstanceState) 
    ...
    signInSilently();


private void signInSilently() 
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    signInClient.silentSignIn().addOnCompleteListener(this,
            new OnCompleteListener<GoogleSignInAccount>() 
                @Override
                public void onComplete(@NonNull Task<GoogleSignInAccount> task) 
                    if (task.isSuccessful()) 
                        Log.d(TAG, "Success signInSilently");
                        GoogleSignInAccount signedInAccount = task.getResult();
                     else 
                        Log.d(TAG, "Failed signInSilently");
                        startSignInIntent();
                    
                
            );


private void startSignInIntent() 
    Log.d(TAG, "startSignInIntent()");
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
            GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    Intent intent = signInClient.getSignInIntent();
    startActivityForResult(intent, RC_SIGN_IN);


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) 
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) 
    try 
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);
        Log.w(TAG, "signInResult:success");
     catch (ApiException e) 
        Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
        signInSilently();
    

ids.xml

...
<!-- app_id -->
<string name="app_id" translatable="false">874********</string>
...

看图:

【问题讨论】:

【参考方案1】:

根据我的经验,这个错误可能是由 3 个不同的原因引起的:

    您需要手动登录才能使用silentSignIn。

    您尚未将用于测试的电子邮件添加到 Google Play 游戏控制台的“测试人员”标签中(或启用所有电子邮件)。

    您的构建版本未使用与生成 Google Play 游戏应用 ID 相同的 SHA1 密钥进行签名

参考:

ApiException on silent signing using GoogleSignInClient on Android

Google play game service error code 400

【讨论】:

好的,我从没注意过数字 3。我该怎么做? (对第三个选项的详细解释将非常有帮助:) developers.google.com/games/services/console/enabling你有按照这些步骤操作吗?在数字 3 上生成一个应用程序 ID。为此,需要 .keystore 文件中包含的 SHA1 密钥。您需要确保您的应用使用与生成应用 ID 相同的 SHA1 密钥进行签名。请记住,您可能必须为每个环境(DEV、QA、PROD)创建不同的应用程序 ID,并且它们中的每一个都应对应于其构建所使用的 SHA1 密钥。 developer.android.com/studio/publish/app-signing

以上是关于Google Play 登录一直失败异常:4 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

部分手机上google play游戏登录失败错误

Google Play 服务登录失败 ApiException 4

Google Play 游戏登录失败

Google play 游戏服务登录失败

为啥我的google play一直显示网络连接失败?

登录/重试失败时的 Google Play 游戏服务怪异(活动生命周期)