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。仿真器启动并运行后,转到扩展控制菜单>谷歌播放,然后更新。

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

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

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

keytool -list -v -keystore <keystore path>

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

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

您的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
注意:这些是默认值。如果您提供了自定义别名和密码,请相应地使用它们


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

在我的情况下,这是因为错误的谷歌客户端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)。

请确保正确设置了以下内容:

  • 在Google项目中生成客户端Id
  • 为该客户端Id提供正确的SHA-1密钥。(调试/发布)
  • 为该客户端Id提供正确的包名称
  • 确保已在
    strings.xml
    google services.json
    credentials.json
    文件中生成客户端Id

  • 在另一台计算机(不同的Android Studio)上打开我的项目后,我遇到了同样的问题。 在我的例子中,我使用Firebase助手解决了这个问题,我最初使用它来设置Firebase。 打开Firebase助手(工具>Firebase)并选择身份验证>连接。
    这将项目重新连接到Firebase并更新配置。转到Firebase控制台中的项目,打开项目设置,在那里添加SHA证书指纹。下载更新的google-services.json文件并将其添加到您的项目应用程序文件夹中

    这对我有用


    首先确保您在

    确保Firebase应用程序中同时具有
    debug
    release
    键。如果在生产中出现此错误,请将您的
    SHA-1释放密钥添加到fire base应用程序。如果它出现在开发中,则添加
    SHA-1调试键

    获取调试/发布密钥:

    keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]
    
    确保将更新后的
    google services.json
    下载到您的应用程序中。

    遵循此api文档,但请记住,在WEB_CLIENT_ID中使用在google-services.json文件中生成的CLIENT ID值

    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)
                    }
                }
    }
    
    class MainActivity:AppCompativeActivity(),GoogleAppClient.OnConnectionFailedListener{
    private val TAG=“JSAGoogleSignIn”
    私人val请求\代码\登录\登录=1234
    私有val WEB_CLIENT_ID=“354298333018-xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com”
    私有变量mAuth:FirebaseAuth?=null
    私有变量mGoogleApiClient:GoogleApiClient?=null
    重写创建时的乐趣(savedInstanceState:Bundle?){
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var txt_寄存器=findViewById(R.id.txt_寄存器)
    txt_register.setOnClickListener{
    var intent=intent(this@MainActivity,RegisterActivity::class.java)
    完成()
    星触觉(意图)
    }
    val gso=GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT\u SIGN\u-IN)
    .requestIdToken(WEB\u客户端\u ID)
    .requestEmail()
    .建造
    
    storeFile=debug.keystore
    keyAlias=androiddebugkey
    storePassword=android
    keyPassword=android
    
    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