【问题标题】:How to implement phone Authentication using Firebase in Kotlin?如何在 Kotlin 中使用 Firebase 实现电话身份验证?
【发布时间】:2017-12-28 07:51:48
【问题描述】:

我正在使用 Firebase 电话身份验证开发 Kotlin 应用程序。我对实现此验证电话号码感到困惑。

private fun startPhoneNumberVerification(phoneNumber: String, mCallbacks: PhoneAuthProvider.OnVerificationStateChangedCallbacks?) {
    Log.d("phoneNumber==", "" + phoneNumber);
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            phoneNumber,        // Phone number to verify
            60,                 // Timeout duration
            TimeUnit.SECONDS,   // Unit of timeout
            this@LoginActivity,               // Activity (for callback binding)
            mCallbacks)
}

实现上面的代码并得到错误(“以下函数都不能使用提供的参数调用”)以及“创建扩展函数 PhoneAuthProvider?.verifyPhoneNumber”。有人可以指导我吗?

【问题讨论】:

  • 错误是什么?
  • @PeterHaddad 已更新。你能查一下吗?
  • 超时是long,所以60应该是60L
  • @Michael 已经尝试过了。仍然出现同样的错误

标签: android firebase kotlin firebase-authentication kotlin-android-extensions


【解决方案1】:

我想不出其他任何东西,所以我假设 Firebase 回调参数被注释为非空。

TL;DR:从您的回调参数中删除 ?,或者当它为 null 时删除 no-op,以便 Kotlin 可以进行一些神奇的类型推断。

【讨论】:

  • 不错。谢谢
  • 太棒了,您介意投票并将答案标记为正确吗?谢谢!
【解决方案2】:

由于您确定回调不会为空,因为您将在 onCreate 中对其进行初始化,因此将其声明为

    lateinit var mCallbacks: PhoneAuthProvider.OnVerificationStateChangedCallbacks

这对我有用

【讨论】:

    【解决方案3】:
    class MainActivity : AppCompatActivity() {
    
        var fbAuth = FirebaseAuth.getInstance()
    
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            var btnLogin = findViewById<Button>(R.id.btnLogin)
            btnLogin.setOnClickListener {view ->
                signIn(view,"user@company.com", "pass")
            }
        }
    
        fun signIn(view: View,email: String, password: String){
            showMessage(view,"Authenticating...")
    
            fbAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, OnCompleteListener<AuthResult> { task ->
                if(task.isSuccessful){
                    var intent = Intent(this, LoggedInActivity::class.java)
                    intent.putExtra("id", fbAuth.currentUser?.email)
                    startActivity(intent)
    
                }else{
                    showMessage(view,"Error: ${task.exception?.message}")
                }
            })
    
        }
    
        fun showMessage(view:View, message: String){
            Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE).setAction("Action", null).show()
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2021-04-10
      • 2021-06-02
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      相关资源
      最近更新 更多