Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我的应用程序在谷歌登录时崩溃_Android_Firebase_Runtime Error_Google Signin_Runtimeexception - Fatal编程技术网

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 =

我正在使用Firebase将google登录集成到我的android项目中。在教程之后,我能够获得登录名。但是当我选择帐户时,应用程序崩溃了

顺便说一下,我用的是科特林语

代码片段如下所示:

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) 您实际签署的Android
apk
具有与项目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