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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章