Аутентификация 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 не появляется. Среди тестовых номеров только один. Не работает на остальных номерах.
Буду благодарен за любые ответы.