Android 谷歌登录错误12500
我正在尝试将Google登录集成到我的应用程序中。我没有后端服务器,我只是在我的应用程序中获取登录谷歌帐户的详细信息 我第一次尝试使用,但我得到了一个错误(除了打印下面的stacktrace之外,没有进行任何代码更改)。我只是使用了signianctivity示例,因为我没有后端服务器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
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)。请确保正确设置了以下内容:
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