java Google play服务游戏显着()失败错误'com。谷歌。安卓gms。常见的应用程序编程接口。ApiException:4:4'
我正在使用google play services signizely(),但我收到了错误signizely(),com失败。谷歌。安卓gms。常见的应用程序编程接口。ApiException:4:4:,但我是应用程序中的测试用户。我已经在我的firebase项目中添加了SHA-1、客户ID、客户机密和启用谷歌登录、谷歌游戏服务。我的代码在下面
class SignInGGPlayBan2 : AppCompatActivity() {
private lateinit var googleSignInClient: GoogleSignInClient
private lateinit var auth: FirebaseAuth
companion object {
private val TAG = "SignInGGPlayBan2"
private const val RC_SIGN_IN = 9001
}
private var btnSignIn: SignInButton? = null
private var btnGGPlayGameSignOut: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_ggplay)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestServerAuthCode(getString(R.string.default_web_client_id))
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
auth = FirebaseAuth.getInstance()
btnSignIn = findViewById(R.id.btnGGPlayGame)
btnGGPlayGameSignOut = findViewById(R.id.btnGGPlayGameSignOut)
btnSignIn!!.setOnClickListener {
startSignInIntent()
}
}
override fun onStart() {
super.onStart()
val currentUser = auth.currentUser
updateUI(currentUser)
}
private fun startSignInIntent() {
val intent = googleSignInClient.signInIntent
startActivityForResult(intent, RC_SIGN_IN)
}
private fun signInSilently() {
googleSignInClient.silentSignIn().addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Toast.makeText(this@SignInGGPlayBan2, "Successful", Toast.LENGTH_SHORT).show()
firebaseAuthWithPlayGames(task.result!!)
} else {
Log.d(TAG, "signInSilently() Failed", task.getException())
Toast.makeText(this@SignInGGPlayBan2, "Failed", Toast.LENGTH_SHORT).show()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result!!.isSuccess) {
firebaseAuthWithPlayGames(result.signInAccount!!)
Toast.makeText(this@SignInGGPlayBan2, "Successful Activity", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@SignInGGPlayBan2, "Failed Activity", Toast.LENGTH_SHORT).show()
}
}
private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) {
Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!)
val auth = FirebaseAuth.getInstance()
val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!)
auth.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Log.d(TAG, "signInWithCredential:success")
val user = auth.currentUser
updateUI(user)
} else {
Log.w(TAG, "signInWithCredential:failure", task.exception)
Toast.makeText(baseContext, "Authentication failed.", Toast.LENGTH_SHORT).show()
updateUI(null)
}
}
}
override fun onResume() {
super.onResume()
signInSilently()
}
private fun updateUI(currentUser: FirebaseUser?) {
if (currentUser != null) {
btnGGPlayGameSignOut!!.visibility = View.VISIBLE
} else {
btnGGPlayGameSignOut!!.visibility = View.INVISIBLE
}
}
}
错误
signInSilently() Failed
com.google.安卓.gms.common.api.ApiException: 4: 4:
at com.google.安卓.gms.common.internal.ApiExceptionUtil.fromStatus(com.google.安卓.gms:play-services-base@@17.1.0:4)
at com.google.安卓.gms.common.internal.zai.zaf(com.google.安卓.gms:play-services-base@@17.1.0:2)
at com.google.安卓.gms.common.internal.zak.onComplete(com.google.安卓.gms:play-services-base@@17.1.0:6)
at com.google.安卓.gms.common.api.internal.BasePendingResult.zaa(com.google.安卓.gms:play-services-base@@17.1.0:176)
at com.google.安卓.gms.common.api.internal.BasePendingResult.setResult(com.google.安卓.gms:play-services-base@@17.1.0:135)
at com.google.安卓.gms.auth.api.signin.internal.zzi.zzc(com.google.安卓.gms:play-services-auth@@18.0.0:5)
at com.google.安卓.gms.auth.api.signin.internal.zzs.dispatchTransaction(com.google.安卓.gms:play-services-auth@@18.0.0:6)
at com.google.安卓.gms.internal.auth-api.zzc.onTransact(com.google.安卓.gms:play-services-auth@@18.0.0:13)
at 安卓.os.Binder.execTransact(Binder.java:565)
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
package="com.example.myprojecttest">
<uses-permission 安卓:name="安卓.permission.INTERNET"/>
<application
安卓:allowBackup="true"
安卓:icon="@mipmap/ic_launcher"
安卓:label="@string/app_name"
安卓:roundIcon="@mipmap/ic_launcher_round"
安卓:supportsRtl="true"
安卓:theme="@style/AppTheme">
<activity 安卓:name=".SignInGGPlayBan2">
<intent-filter>
<action 安卓:name="安卓.intent.action.MAIN" />
<category 安卓:name="安卓.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
请给我一个解决这个问题的办法
# 1 楼答案
我这几天一直在忍受这种痛苦。今天我终于明白了
这里有三个控制台很有用: Firebase控制台/项目设置: https://console.firebase.google.com
谷歌开发者控制台/证书: https://console.developers.google.com/apis/credentials
链接应用程序: https://play.google.com/apps/publish/
看起来你用的是firebase和这里的一样。当然,我们将遵循指南:https://firebase.google.com/docs/auth/android/play-games?authuser=0。在我的例子中,我们正在使用Play Games登录
要修复开发者错误(10)/内部错误(8)/API未连接(17)/SIGN IN REQUIRED(4)等GMS API异常,请遵循以下检查表:
signingReport
,这很重要,否则它会自动创建一个OAuth 2.0客户端ID,其中your.package.name
和~/.android/debug.keystore
中的SHA1,这很容易出错李>keytool -exportcert -alias YOUR_ALIAS -keystore debug.jks -list -v
,将调试SHA1粘贴到Firebase控制台保存配置,并将
google-service.json
正确下载到Android Studio。注意,您只设置了调试SHA1,而没有设置发布SHA1。然后运行你的应用程序,这个过程将使用debug SHA1自动创建一个OAuth 2.0客户端ID。你可以刷新Google开发者控制台/凭证来检查你做了什么李>Android client for your.package.name (auto created by Google Service)
和Web client (auto created by Google Service)
检查google-service.json
文件,它将包含两个client_id
,两者必须与谷歌开发者控制台/凭证完全相同李>Run 'YOUR_PROJECT'
将使用~/.android/debug.keystore
对APK进行签名,SHA1不是用于创建客户端id的谷歌开发者控制台/凭证应该如下图所示:
链接的应用程序应该如下图所示:
谢谢谷歌和我的头发,祝你好运
相关答案:
How to sign your app using the upload key
Test Google Play Games on app signed with upload key
Testing Games Services using upload key instead of Google Play App signing key
# 2 楼答案
首先,你应该把这个写在你的AndroidManifest上。xml