Android 我的应用程序在谷歌登录时崩溃
我正在使用Firebase将google登录集成到我的android项目中。在教程之后,我能够获得登录名。但是当我选择帐户时,应用程序崩溃了 顺便说一下,我用的是科特林语 代码片段如下所示:Android 我的应用程序在谷歌登录时崩溃,android,firebase,runtime-error,google-signin,runtimeexception,Android,Firebase,Runtime Error,Google Signin,Runtimeexception,我正在使用Firebase将google登录集成到我的android项目中。在教程之后,我能够获得登录名。但是当我选择帐户时,应用程序崩溃了 顺便说一下,我用的是科特林语 代码片段如下所示: class SignupActivity:AppCompatActivity(){ lateinit var googleSignInClient: GoogleSignInClient lateinit var gso: GoogleSignInOptions val RC_SIGN_IN :Int =
class SignupActivity:AppCompatActivity(){
lateinit var googleSignInClient: GoogleSignInClient
lateinit var gso: GoogleSignInOptions
val RC_SIGN_IN :Int =1
lateinit var signOut:Button
lateinit var mAuth: FirebaseAuth
private var callbackManager: CallbackManager?=null
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.signup)
header_signup_button.setOnClickListener {
startActivity(Intent(this,SplashscreenActivity::class.java))
}
gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this,gso)
mAuth = FirebaseAuth.getInstance()
signOut = findViewById<View>(R.id.signOutBtn) as Button
signOut.visibility= View.INVISIBLE
google_signup.setOnClickListener {
view:View?->signInGoogle()
}
signupemail_button.setOnClickListener {
startActivity(Intent(this,EmailSignupActivity::class.java))
}
val fblogin_button= findViewById<Button>(R.id.facebook_signup)
fblogin_button.setOnClickListener {
callbackManager = CallbackManager.Factory.create()
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"))
if (!isloggedIn()) {
LoginManager.getInstance().registerCallback(callbackManager,
object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
Log.d("LoginActivity", "Facebook token" + loginResult.accessToken.token)
startActivity(Intent(baseContext, MainActivity::class.java))
}
override fun onCancel() {
Log.d("LoginActivity", "Facebook oncancel")
}
override fun onError(error: FacebookException?) {
Log.d("LoginActivity", "Facebook onError")
}
})
} else {
LoginManager.getInstance().unregisterCallback(callbackManager, object : FacebookCallback<LoginResult> {
override fun onSuccess(result: LoginResult?) {
GraphRequest(AccessToken.getCurrentAccessToken(), "/{user-id}/permissions/", null, HttpMethod.DELETE, GraphRequest.Callback() {
AccessToken.setCurrentAccessToken(null)
LoginManager.getInstance().logOut()
}).executeAsync()
Log.d("LoginActivity", "Facebook token" + result?.accessToken?.token)
}
override fun onCancel() {
Log.d("LoginActivityunregister", "Facebook oncancel")
}
override fun onError(error: FacebookException?) {
Log.d("LoginActivityunregister", "Facebook onError")
}
})
}
}
}
private fun signInGoogle() {
val signIntent:Intent =googleSignInClient.signInIntent
startActivityForResult(signIntent,RC_SIGN_IN)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
if (resultCode!= Activity.RESULT_OK) {
val task: Task<GoogleSignInAccount> = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
val account = task.getResult()
val credential = GoogleAuthProvider.getCredential(account.idToken,null)
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, OnCompleteListener<AuthResult>(){
if (task.isSuccessful) {
val user = mAuth.currentUser
if (user != null) {
updateUI(user)
}
}else{
updateUI(null)
}
})
}catch (e:ApiException){
Toast.makeText(this,e.toString(),Toast.LENGTH_SHORT).show()
}
}
}
else {
callbackManager?.onActivityResult(requestCode, resultCode, data)
}
}
private fun updateUI(user: FirebaseUser?) {
val disptext = findViewById<View>(R.id.disptxt) as TextView
if (user != null) {
disptext.text = user.displayName
}
signOut.visibility=View.VISIBLE
signOut.setOnClickListener { view:View->
googleSignInClient.signOut().addOnCompleteListener {
task -> disptext.text = " "
signOut.visibility= View.INVISIBLE
}
}
}
@SuppressLint("NewApi")
override fun onBackPressed() {
super.onBackPressed()
startActivity(Intent(this,SplashscreenActivity::class.java))
}
}
private fun Any.unregisterCallback(callbackManager: CallbackManager?, facebookCallback: FacebookCallback<LoginResult>) {
}
fun isloggedIn(): Boolean {
val accessToken = AccessToken.getCurrentAccessToken()
return accessToken != null
}
此外,您还会注意到,我的项目也有Facebook登录集成。但现在,在添加谷歌登录后,这也不起作用了。因此,我期待着得到一些帮助。非常感谢您的帮助。您的
AndroidManifest.XML
在我看来是正确的。我遇到了同样的错误:
Caused by: com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 10
这基本上意味着您提供了一个未知的服务器客户端id。
在中,选择您生成的项目:OAuth客户端ID
->Web应用程序,并在Android应用程序中使用此Web应用程序客户端ID
编辑:
我肯定知道问题出在您添加到Firebase控制台的SHA1
键中。因此,您可以重新生成它,并将其正确地重新放在同一项目中。还请确保:
1) 您实际签署的Androidapk
具有与项目Firebase控制台中指定的指纹相同的SHA1
指纹。请参阅Android集成部分,您可以在该页面下载googleservices.json
2) 您的Firebase项目与Google Play链接。为此,请在页面顶部转到项目概述
,然后转到项目设置
(齿轮图标),然后转到集成选项卡
。在该选项卡上,将Google Play链接到您的项目
最后一个应该可以解决您的问题。请添加您的清单文件。@AlexMamo我已经编辑了包含清单文件的问题。错误代码10通常表示您的SHA1指纹有问题。参见Sam Stern的评论。@BobSnyder我已经发布了错误日志,你还可以说是因为SHA1指纹。我这样问是因为当我点击这个链接时,我的指纹出现了一个错误。然后我转而使用firebase,在那里我提供了SHA-256。在我选择google帐户之前,该应用程序会生成并不会崩溃。但是,如果不使用firebase,就不可能实现同样的功能。我可以获取google services json文件本身。您是否正确配置了google登录?请验证是否正确安装了SHA密钥。应在何处修改清单文件?如果我将客户端Id复制到值字段,我会得到一个双重性错误?你有她的OAuth客户ID吗?用谷歌开发者控制台上的那个来更改。你也试过Bob Snyder在评论中提到的吗?如果已经有API密钥,就让它放在原处,然后用谷歌开发者控制台上的那个来更改。让我们来看看。
FATAL EXCEPTION: main
Process: com.example.vishwa.imaginators, PID: 27350
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=Intent { (has extras) }} to activity {com.example.vishwa.imaginators/com.example.vishwa.imaginators.SignupActivity}: com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 10:
at android.app.ActivityThread.deliverResults(ActivityThread.java:3772)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3815)
at android.app.ActivityThread.access$1500(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5571)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Caused by: com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 10:
at com.google.android.gms.tasks.zzu.getResult(Unknown Source)
at com.example.vishwa.imaginators.SignupActivity.onActivityResult(SignupActivity.kt:117)
at android.app.Activity.dispatchActivityResult(Activity.java:6562)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3768)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3815)
at android.app.ActivityThread.access$1500(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5571)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Caused by: com.google.android.gms.common.api.ApiException: 10:
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at com.example.vishwa.imaginators.SignupActivity.onActivityResult(SignupActivity.kt:115)
at android.app.Activity.dispatchActivityResult(Activity.java:6562)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3768)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3815)
at android.app.ActivityThread.access$1500(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5571)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
Caused by: com.google.android.gms.tasks.RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 10