Android 谷歌登录错误12500

Android 谷歌登录错误12500,android,google-signin,Android,Google Signin,我正在尝试将Google登录集成到我的应用程序中。我没有后端服务器,我只是在我的应用程序中获取登录谷歌帐户的详细信息 我第一次尝试使用,但我得到了一个错误(除了打印下面的stacktrace之外,没有进行任何代码更改)。我只是使用了signianctivity示例,因为我没有后端服务器 Exception com.google.android.gms.common.api.ApiException: 12500: at com.google.android.gms.common.inter

我正在尝试将Google登录集成到我的应用程序中。我没有后端服务器,我只是在我的应用程序中获取登录谷歌帐户的详细信息

我第一次尝试使用,但我得到了一个错误(除了打印下面的stacktrace之外,没有进行任何代码更改)。我只是使用了signianctivity示例,因为我没有后端服务器

 Exception com.google.android.gms.common.api.ApiException: 12500: 
 at com.google.android.gms.common.internal.zzb.zzz(Unknown Source)
 at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
 at com.ewise.android.api.MainActivity.onActivityResult(SignInActivity.java:89)     at android.app.Activity.dispatchActivityResult(Activity.java:7010)
 at android.app.ActivityThread.deliverResults(ActivityThread.java:4187)
 at android.app.ActivityThread.handleSendResult(ActivityThread.java:4234)
 at android.app.ActivityThread.-wrap20(ActivityThread.java)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6316)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
代码

可能的原因是什么

谢谢

另外,这可能是一个原因吗

Google Play services out of date.  Requires 11720000 but found 10932470

只需将您的Google Play服务更新至最新版本(本例中为1172000)。如果您使用的是AVD,Nexus 5和5X图像支持Google Play。模拟器启动并运行后,进入扩展控制菜单>谷歌播放,然后更新。

只需将谷歌播放服务更新至最新版本(本例中为1172000)。如果您使用的是AVD,Nexus 5和5X图像支持Google Play。仿真器启动并运行后,转到扩展控制菜单>谷歌播放,然后更新。

如果仍然有人存在类似问题,如果您正在添加自定义作用域,请确保它是有效的作用域。在我的例子中,我把Facebook scopes和Google scopes混合在一起,花了我一段时间才弄明白

如果仍有人存在类似问题,如果要添加自定义范围,请确保该范围有效。在我的例子中,我把Facebook scopes和Google scopes混合在一起,花了我一段时间才弄明白

检查是否将SHA-1指纹添加到firebase项目设置中。如果没有,请使用查找SHA-1指纹

此外,请使用查找释放密钥的SHA-1指纹

keytool -list -v -keystore <keystore path>

SHA-1
应添加到
firebase
的应用程序设置中,以允许在测试调试版本时使用google登录功能。

检查是否将SHA-1指纹添加到firebase项目设置中。如果没有,请使用查找SHA-1指纹

此外,请使用查找释放密钥的SHA-1指纹

keytool -list -v -keystore <keystore path>

应将此
SHA-1
添加到
firebase
的应用程序设置中,以允许在测试调试版本时使用google登录功能。

对我来说,问题是在调试配置的应用程序中使用“release”ClientID。确保您分别使用每个SHA-1拥有一个发布密钥和一个调试密钥

对我来说,问题是在调试配置的应用程序中使用“release”ClientID。确保您分别使用每个SHA-1拥有一个发布密钥和一个调试密钥

您的SHA1似乎被Google play store覆盖了。 在你的google play商店的启动面板中,在应用程序签名下,查看google play是否添加了额外的SHA1


复制SHA1,添加到相关位置,就可以完成这项工作。

似乎你的SHA1被Google play store覆盖了。 在你的google play商店的启动面板中,在应用程序签名下,查看google play是否添加了额外的SHA1


然后将SHA1复制到您的相关位置,即可完成此工作。

cordova编译器也可能无法找到正确的密钥库文件。



解决方案:在执行
ionic cordova build android
之前,指定签名属性

步骤1:生成调试密钥库文件

执行命令

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
使用密码:
android

步骤2:将密钥库文件(
debug.keystore
)从
~/.android
复制到当前项目的
平台/android
目录

步骤3:
平台/android
目录中创建一个名为release signing.properties的文件

步骤4:在文件中添加内容

storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=android
keyPassword=android
注意:这些是默认值。如果您提供了自定义别名和密码,请相应地使用它们


步骤5:现在构建
爱奥尼亚cordova构建android

cordova编译器也可能无法找到正确的密钥库文件。



解决方案:在执行
ionic cordova build android
之前,指定签名属性

步骤1:生成调试密钥库文件

执行命令

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
使用密码:
android

步骤2:将密钥库文件(
debug.keystore
)从
~/.android
复制到当前项目的
平台/android
目录

步骤3:
平台/android
目录中创建一个名为release signing.properties的文件

步骤4:在文件中添加内容

storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=android
keyPassword=android
注意:这些是默认值。如果您提供了自定义别名和密码,请相应地使用它们


第五步:现在构建
爱奥尼亚cordova构建android

在我的情况下,这是因为错误的谷歌客户端Id。
我将我的密钥更改为
google services.json
(在
oauth\u client
object下)中列出的密钥。在我的情况下,这是因为错误的谷歌客户端Id。
我将我的密钥更改为
google services.json
中列出的密钥(在
oauth\u client
对象下)

我认为错误来自错误的SHA1。请不要忘记,在android studio中,SHA1在发布模式和调试模式之间是不同的。您可以使用android studio中的Gradle project->Task->android->signingReport(可以通过菜单视图->工具窗口->Gradle打开它)来获得发布和调试SHA1,而不是使用keytool来获取SHA1。之后,为了方便工作,您需要在google云控制台上创建两个单独的凭证,其中两个SHA1(google只是指示使用release SHA1创建1,当我们开发它时,它将无法工作,因为它使用调试SHA1)。

我认为错误来自错误的SHA1。请不要忘记,发布版和调试版之间的SHA1是不同的
keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]
class MainActivity : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener {
private val TAG = "JSAGoogleSignIn"
private val REQUEST_CODE_SIGN_IN = 1234
private val WEB_CLIENT_ID = "354298333018-XXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
private var mAuth: FirebaseAuth? = null

private var mGoogleApiClient: GoogleApiClient? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var txt_register = findViewById<TextView>(R.id.txt_register)
    txt_register.setOnClickListener {
        var intent = Intent(this@MainActivity, RegisterActivity::class.java)
        finish()
        startActivity(intent)
    }
    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(WEB_CLIENT_ID)
            .requestEmail()
            .build()
    mGoogleApiClient = GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build()

    mAuth = FirebaseAuth.getInstance()
    sign_in_button.setOnClickListener {
        val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
        startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
    }

}


override fun onConnectionFailed(p0: ConnectionResult) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}


private fun updateUI(user: FirebaseUser?) {
    if (user != null) {
        Log.e("Email", "Value" + user.email)
    }

}

fun signIn() {

}

override fun onStart() {
    super.onStart()
    val currentUser = mAuth!!.currentUser
    updateUI(currentUser)
}

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == REQUEST_CODE_SIGN_IN) {
        val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
        if (result.isSuccess) {
            // successful -> authenticate with Firebase
            val account = result.signInAccount
            firebaseAuthWithGoogle(account!!)
        } else {
            // failed -> update UI
            updateUI(null)
            Toast.makeText(applicationContext, "SignIn: failed!" + result.status,
                    Toast.LENGTH_SHORT).show()
        }
    }
}

private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
    Log.e(TAG, "firebaseAuthWithGoogle():" + acct.id!!)

    val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
    mAuth!!.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success
                    Log.e(TAG, "signInWithCredential: Success!")
                    val user = mAuth!!.currentUser
                    updateUI(user)
                } else {
                    // Sign in fails
                    Log.w(TAG, "signInWithCredential: Failed!", task.exception)
                    Toast.makeText(applicationContext, "Authentication failed!",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }
}
Correct SHA key is saved on Firebase Console.
Valid reversed client id.
from fcm console=>select app=>from authentication=>enable google sign-in method