如何实现 google 签到

How to implement google sign in

我在我的 android 应用程序中实现了 google 登录 api。一切都很好,直到最近。我遇到的挑战之一是 client_id 重新生成。最近打开更多错误的是 google 登录在构建的 release.apk 中不起作用。

经过两天的调试,我决定创建一个新的演示项目来重新开始这个过程。它不会作为任务 return false for task.isSuccessful.

也许我遗漏了什么。

const val RC_SIGN_IN = 0
class MainActivity : AppCompatActivity() {
    lateinit var observer:StartActivityForResults
    private lateinit var mGoogleSignInClient:GoogleSignInClient
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        observer = StartActivityForResults(activityResultRegistry)
        lifecycle.addObserver(observer)

        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build()

        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

        sign_in_button.setOnClickListener{
            signIn()
        }
    }

    private fun signIn() {


        val signInIntent = mGoogleSignInClient.signInIntent

        startActivityForResult(signInIntent, RC_SIGN_IN)
    }

    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 == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            val task = Auth.GoogleSignInApi.getSignInResultFromIntent(data)

            task?.isSuccess

            Toast.makeText(this, "Success", Toast.LENGTH_LONG).show()
        }
        else{
            Log.i("title", "OKCODE ${Activity.RESULT_OK} RESULTCODE ${resultCode}")
        }
    }
}

不确定这是否回答了您的问题,但我遇到了一个类似的问题,即签名在调试版本中有效,但不适用于发布版本。

在 Firebase 控制台中,如果您启用了 Google 登录,系统将提示您输入构建的 SHA-1 密钥。现在,我的情况是我获得了用于调试密钥库的 SHA-1 密钥,但在发布 key-store.

时没有这样做

试试,

keytool -list -v
-alias -keystore <path-to-production-keystore

并在您的 Firebase 控制台上输入它。

使用 FirebaseUI

轻松将 sign-in 添加到您的 Android 应用

如果您还没有,请将 Firebase 添加到您的 Android 项目中。

将 FirebaseUI 的依赖项添加到您的 app-level build.gradle 文件

    dependencies {
    // ...

    implementation 'com.firebaseui:firebase-ui-auth:6.2.0'
}

在 Firebase 控制台中,打开身份验证部分并启用您想要支持的 sign-in 方法。一些 sign-in 方法需要额外的信息,通常可以在服务的开发者控制台中找到。

如果您支持 Google Sign-in 并且尚未指定应用的 SHA-1 指纹,请从 Firebase 控制台的“设置”页面执行此操作

// Choose authentication providers
val providers = arrayListOf(
        AuthUI.IdpConfig.EmailBuilder().build(),
        AuthUI.IdpConfig.PhoneBuilder().build(),
        AuthUI.IdpConfig.GoogleBuilder().build(),
        AuthUI.IdpConfig.FacebookBuilder().build(),
        AuthUI.IdpConfig.TwitterBuilder().build())

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN)

当 sign-in 流程完成后,您将在 onActivityResult 中收到结果:

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

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.RESULT_OK) {
            // Successfully signed in
            val user = FirebaseAuth.getInstance().currentUser
            // ...
        } else {
            // Sign in failed. If response is null the user canceled the
            // sign-in flow using the back button. Otherwise check
            // response.getError().getErrorCode() and handle the error.
            // ...
        }
    }
}