Аутентификация Firebase по номеру телефона не работает (Android)

Используя Firebase, пытаюсь получить смс код по номеру телефона, но не выходит. Не работает всё в двух случаях:

  • В функции onVerificationCompleted() с сообщением sms code is null.
  • После того, как зашли в startPhoneNumberVerification() перестают писаться логи - код тоже не приходит.

Прочитал документацию, посмотрел разные варианты кода на гитхабе, но так и не могу осознать.

VerificationFragment

class VerificationFragment : BaseFragment() {

    private lateinit var phone: String

    override val menuResId: Nothing? = null
    override val contentResId = R.layout.fragment_verification
    override val baseToolbar = R.id.toolbar

    private var verificationId = ""

    private val callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        override fun onCodeSent(s: String, p1: PhoneAuthProvider.ForceResendingToken) {
            super.onCodeSent(s, p1)
            verificationId = s
        }

        override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) {
            val code = phoneAuthCredential.smsCode
            if (code != null) {
                Log.d("SmsCode", "onVerificationCompleted(): ща будем верифаить")
                verifyCode(code)
            } else {
                Log.d("SmsCode", "onVerificationCompleted(): sms code is null")
            }
        }

        override fun onVerificationFailed(e: FirebaseException) {
            if (e is FirebaseAuthInvalidCredentialsException) {
                Log.d("SmsCode", "onVerificationFailed(): Invalid request")
            } else if (e is FirebaseTooManyRequestsException) {
                Log.d("SmsCode", "onVerificationFailed(): The SMS quota for the project has been exceeded")
            }
        }

    }

    private fun startPhoneNumberVerification(phoneNumber: String) {
        Log.d("SmsCode", "зашли в startPhoneNumberVerification()")
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
            phoneNumber,
            60,
            TimeUnit.SECONDS,
            baseActivity,
            callbacks
        )
    }

    fun verifyCode(code: String) {
        Log.d("SmsCode", "verificationId: $verificationId")
        val credential = PhoneAuthProvider.getCredential(verificationId, code)
        singInWithCredential(credential)
    }

    private fun singInWithCredential(credential: PhoneAuthCredential) {
        val mAuth = FirebaseAuth.getInstance()
        mAuth.signInWithCredential(credential)
            .addOnCompleteListener(baseActivity) { task ->
                if (task.isSuccessful) {
                    val fUser = task.result?.user
                    Log.d("SmsCode", "singInWithCredential(): fUser is $fUser")
                } else {
                    Log.d("SmsCode", "singInWithCredential(): error")
                }
            }
    }

    override fun setViews() {
        phone = VerificationFragmentArgs.fromBundle(requireArguments()).phone
        setPhoneNumber()
        startPhoneNumberVerification(phone)
    }

    private fun setPhoneNumber() {
        verificationText.text = String.format(verificationText.text.toString(), phone)
    }
}

BaseFragment

abstract class BaseFragment: Fragment() {

    val baseActivity: MainActivity
        get() = activity as MainActivity

    private var currentView: View? = null

    protected abstract val menuResId: Int?
    protected abstract val contentResId: Int
    protected abstract val baseToolbar: Int

    protected inline fun <T> LiveData<T>.observe(crossinline codeBlock: (T) -> Unit) {
        observe(this@BaseFragment, Observer { it -> it?.let { codeBlock(it) } })
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        if (currentView == null) {
            currentView = inflater.inflate(contentResId, container, false)
        }
        return currentView!!
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        setViews()
        setToolbar(view)
        setObservers()
        setListeners()
        setActions()
    }

    protected open fun setViews() {}

    protected open fun setObservers() {}

    protected open fun setListeners() {}

    protected open fun setActions() {}

    fun showBottomBar() = baseActivity.showBottomBar()

    fun hideBottomBar() = baseActivity.hideBottomBar()

    protected open fun setToolbar(view: View) {
        menuResId?.let {
            view.findViewById<MaterialToolbar>(baseToolbar).inflateMenu(it)
        }
    }
}

В логах адекватных сообщений от Firebase не появляется. Среди тестовых номеров только один. Не работает на остальных номерах.

Буду благодарен за любые ответы.


Ответы (0 шт):