尝试使用Google登录到Firebase并使用Google Play游戏服务,并且在尝试登录时遇到以下异常:
W/MainActivity: Google sign in failed
com.google.android.gms.common.api.ApiException: 13:
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source:14)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source:47)
at ca.doophie.scarletflames.MainActivity.onActivityResult(MainActivity.kt:63)
at android.app.Activity.dispatchActivityResult(Activity.java:7276)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4264)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4312)
at android.app.ActivityThread.-wrap19(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1644)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
我按照指南here设置了Google登录,仅更改了我的登录选项(如下所示)。我还为Google Play控制台中的应用打开了Google Play服务,添加了Android调试密钥存储区SHA1和发布SHA1密钥。
代码如下:
// Configure Google Sign In
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestIdToken(context.getString(R.string.default_web_client_id))
.requestEmail()
.build()
在我的清单中我有这个:
<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"/>
<meta-data android:name="com.google.android.gms.games.API_KEY"
android:value= "@string/api_key" />
这些就在我的掌中:
implementation "com.google.android.gms:play-services-games:15.0.1"
implementation "com.google.android.gms:play-services-auth:15.0.1"
implementation 'com.google.firebase:firebase-auth:16.0.2'
最后,这是我登录的地方:
val signInIntent = mGoogleSignInClient?.signInIntent ?: return
startActivityForResult(signInIntent, rc)
和:
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == LoginController.RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
// Google Sign In was successful, authenticate with Firebase
val account = task.getResult(ApiException::class.java)
loginController?.firebaseAuthWithGoogle(account)
} catch (e: ApiException) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e) //Exception is here
}
}
}