Java Google play服务游戏显着()失败错误';com.google.android.gms.common.api.ApiException:4:4';
我正在使用google play services signizely(),但我收到的错误是signizely()失败com.google.android.gms.common.api.ApiException:4:4:,但我是应用程序中的测试用户。我已经在我的firebase项目中添加了SHA-1、客户ID、客户机密和启用谷歌登录、谷歌游戏服务。我的代码在下面Java Google play服务游戏显着()失败错误';com.google.android.gms.common.api.ApiException:4:4';,java,android,kotlin,google-signin,google-play-games,Java,Android,Kotlin,Google Signin,Google Play Games,我正在使用google play services signizely(),但我收到的错误是signizely()失败com.google.android.gms.common.api.ApiException:4:4:,但我是应用程序中的测试用户。我已经在我的firebase项目中添加了SHA-1、客户ID、客户机密和启用谷歌登录、谷歌游戏服务。我的代码在下面 class SignInGGPlayBan2 : AppCompatActivity() { private lateinit v
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
}
}
}
错误
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myprojecttest">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SignInGGPlayBan2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
请给我一个解决这个问题的方法。首先,你应该把它放在你的AndroidManifest.xml上
<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"/>
这几天来我一直在忍受这种痛苦。今天我终于明白了 这里有三个控制台很有用: Firebase控制台/项目设置: Google开发者控制台/凭据: 链接应用程序: 看起来您使用的是firebase,这里也一样。当然,我们将遵循指南:。在我的例子中,我们正在使用Play Games登录 要修复开发人员错误(10)/内部错误(8)/API未连接(17)/需要登录(4)等GMS API异常,请遵循以下检查表:
signingReport
,这很重要,否则它将使用您的.package.name
和~/.android/debug.keystore
中的SHA1自动创建OAuth 2.0客户端ID,这很容易出错keytool-exportcert-alias您的_alias-keystore debug.jks-list-v从debug.jks获取SHA1,将调试SHA1粘贴到Firebase控制台
保存配置并将google service.json
下载到您的Android Studio中。注意,您只设置了调试SHA1,而没有设置发布SHA1。然后运行您的应用程序,此过程将使用调试SHA1自动创建OAuth 2.0客户端ID。您可以刷新Google开发者控制台/凭据以检查您所做的工作
Android客户端用于你的.package.name(由谷歌服务自动创建)
和Web客户端(由谷歌服务自动创建)
检查你的Google Service.json
文件,它将包含两个客户端id
,两者必须与Google开发者控制台/凭据完全相同~/.Android/debug.keystore
对APK进行签名,SHA1不是用于创建客户端id的链接的应用程序应如下图所示:
谢谢谷歌和我的头发,祝你好运 相关答案:
你并不孤单,我为此痛苦了几天。有什么要分享的吗?
<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"/>