Не получается OTP аутентификации Firebase в приложении для Android ⇐ Android
-
Гость
Не получается OTP аутентификации Firebase в приложении для Android
Я новичок в разработке для Android, я создавал метод входа в систему в студии Android в Kotlin, используя Firebase, но после ввода номера мобильного телефона экран просто загружается, а otp не получен, и приложение зависает в активности входа в систему и другом действие, в котором мне нужно добавить otp, не работает.
loginactivity.kt
класс LoginActivity : AppCompatActivity() { lateinit var loginactivitybinding: ActivityLoginBinding val auth = FirebaseAuth.getInstance() обратные вызовы lateinit var: PhoneAuthProvider.OnVerificationStateChangedCallbacks вар codesent = "" переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) loginactivitybinding = ActivityLoginBinding.inflate(layoutInflater) val view = loginactivitybinding.root setContentView (просмотр) //Проверяет, правильно ли введен введенный нами номер телефона ---> loginactivitybinding.sendotp.setOnClickListener { val userNumber = loginactivitybinding.phoneEdit.text.toString() обратные вызовы = объект: PhoneAuthProvider.OnVerificationStateChangedCallbacks(){ переопределить удовольствие onVerificationCompleted(p0: PhoneAuthCredential) { loginactivitybinding.progressbarlogin.visibility = Вид.INVISIBLE loginactivitybinding.sendotp.visibility = Просмотр.VISIBLE } переопределить fun onVerificationFailed(p0: FirebaseException) { loginactivitybinding.progressbarlogin.visibility = Вид.INVISIBLE loginactivitybinding.sendotp.visibility = Просмотр.VISIBLE } переопределить fun onCodeSent(otp: String, p1: PhoneAuthProvider.ForceResendingToken) { loginactivitybinding.progressbarlogin.visibility = Вид.INVISIBLE loginactivitybinding.sendotp.visibility = Просмотр.VISIBLE val намерение = Intent(this@LoginActivity, OTPVerificationActivity::class.java) Intent.putExtra("Число", userNumber) Intent.putExtra("код",otp) startActivity (намерение) заканчивать() } } если(!userNumber.isEmpty()){ если (userNumber.length == 10) { loginactivitybinding.sendotp.visibility = Вид.INVISIBLE loginactivitybinding.progressbarlogin.visibility = Просмотр.VISIBLE val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(номер пользователя) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this@LoginActivity) .setCallbacks(обратные вызовы) .строить() PhoneAuthProvider.verifyPhoneNumber(варианты) }еще{ Toast.makeText(applicationContext, «Введите допустимое число», Toast.LENGTH_SHORT).show() } }еще{ Toast.makeText(applicationContext, «Сначала введите номер мобильного телефона», Toast.LENGTH_SHORT).show() } } } } otpverificationactivity.kt
класс OTPVerificationActivity : AppCompatActivity() { lateinit var otpverificationBinding: ActivityOtpverificationBinding varverificationCode = "" вар userNum = "" обратные вызовы lateinit var: PhoneAuthProvider.OnVerificationStateChangedCallbacks val auth = FirebaseAuth.getInstance() переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) otpverificationBinding = ActivityOtpverificationBinding.inflate(layoutInflater) val view = otpverificationBinding.root setContentView (просмотр) verificationCode = намерение!!.getStringExtra("код").toString() userNum = намерение!!.getStringExtra("Number").toString() otpverificationBinding.verify.setOnClickListener { if(!otpverificationBinding.otp1.text.toString().isEmpty() && !otpverificationBinding.otp1.text.toString().isEmpty() && !otpverificationBinding.otp1.text.toString().isEmpty() && !otpverificationBinding. otp3.text.toString().isEmpty() && !otpverificationBinding.otp4.text.toString().isEmpty() && !otpverificationBinding.otp5.text.toString().isEmpty() && !otpverificationBinding.otp6.text.toString().isEmpty()){ var userInput = otpverificationBinding.otp1.text.toString()+ otpverificationBinding.otp2.text.toString()+ otpverificationBinding.otp3.text.toString()+ otpverificationBinding.otp4.text.toString()+ otpverificationBinding.otp5.text.toString()+ otpverificationBinding.otp6.text.toString() если (код проверки! = ноль) { otpverificationBinding.progressbarotp.visibility = Вид.VISIBLE otpverificationBinding.verify.visibility = Вид.НЕВИДИМЫЙ val credential = PhoneAuthProvider.getCredential(verificationCode,userInput) SignInWithCredential (учетные данные) }еще{ Toast.makeText(applicationContext, «Проверьте подключение», Toast.LENGTH_SHORT).show() } //Toast.makeText(applicationContext, «Verified», Toast.LENGTH_SHORT).show() }еще{ Toast.makeText(applicationContext, «Введите все цифры», Toast.LENGTH_SHORT).show() } } отпблокмове() otpverificationBinding.resend.setOnClickListener { обратные вызовы = объект: PhoneAuthProvider.OnVerificationStateChangedCallbacks(){ переопределить удовольствие onVerificationCompleted(p0: PhoneAuthCredential) { } переопределить fun onVerificationFailed(p0: FirebaseException) { } переопределить fun onCodeSent(otp: String, p1: PhoneAuthProvider.ForceResendingToken) { код проверки = отп } } val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(userNum) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this@OTPVerificationActivity) .setCallbacks(обратные вызовы) .строить() PhoneAuthProvider.verifyPhoneNumber(параметры) } } // Функция для перемещения блока otp на 1 место личное развлечение otpblockmove() { val otpFields = arrayOf( отпверификацияBinding.otp1, отпверификацияBinding.otp2, отпверификацияBinding.otp3, отпверификацияBinding.otp4, отпверификацияBinding.otp5, otpverificationBinding.otp6 ) для (я в 0..4) { otpFields.addTextChangedListener(объект: TextWatcher { переопределить fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { // Не требуется, но должно быть переопределено } переопределить fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { // Автоматический переход к следующему полю OTP при вводе символа if (!s.toString().isEmpty()) { otpFields[i+1].requestFocus() } } переопределить fun afterTextChanged(s: Editable?) { // Не требуется, но должно быть переопределено } }) } } весело SignInWithCredential (credential: PhoneAuthCredential) { auth.signInWithCredential(credential).addOnCompleteListener {задача -> если (task.isSuccessful) { otpverificationBinding.progressbarotp.visibility = Вид.НЕВИДИМЫЙ otpverificationBinding.verify.visibility = Просмотр.VISIBLE val намерение = Intent(this@OTPVerificationActivity, MainActivity::class.java) startActivity (намерение) заканчивать() }еще{ otpverificationBinding.progressbarotp.visibility = Вид.НЕВИДИМЫЙ otpverificationBinding.verify.visibility = Просмотр.VISIBLE Toast.makeText(applicationContext, «Ошибка», Toast.LENGTH_SHORT).show() } } } }
Я новичок в разработке для Android, я создавал метод входа в систему в студии Android в Kotlin, используя Firebase, но после ввода номера мобильного телефона экран просто загружается, а otp не получен, и приложение зависает в активности входа в систему и другом действие, в котором мне нужно добавить otp, не работает.
loginactivity.kt
класс LoginActivity : AppCompatActivity() { lateinit var loginactivitybinding: ActivityLoginBinding val auth = FirebaseAuth.getInstance() обратные вызовы lateinit var: PhoneAuthProvider.OnVerificationStateChangedCallbacks вар codesent = "" переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) loginactivitybinding = ActivityLoginBinding.inflate(layoutInflater) val view = loginactivitybinding.root setContentView (просмотр) //Проверяет, правильно ли введен введенный нами номер телефона ---> loginactivitybinding.sendotp.setOnClickListener { val userNumber = loginactivitybinding.phoneEdit.text.toString() обратные вызовы = объект: PhoneAuthProvider.OnVerificationStateChangedCallbacks(){ переопределить удовольствие onVerificationCompleted(p0: PhoneAuthCredential) { loginactivitybinding.progressbarlogin.visibility = Вид.INVISIBLE loginactivitybinding.sendotp.visibility = Просмотр.VISIBLE } переопределить fun onVerificationFailed(p0: FirebaseException) { loginactivitybinding.progressbarlogin.visibility = Вид.INVISIBLE loginactivitybinding.sendotp.visibility = Просмотр.VISIBLE } переопределить fun onCodeSent(otp: String, p1: PhoneAuthProvider.ForceResendingToken) { loginactivitybinding.progressbarlogin.visibility = Вид.INVISIBLE loginactivitybinding.sendotp.visibility = Просмотр.VISIBLE val намерение = Intent(this@LoginActivity, OTPVerificationActivity::class.java) Intent.putExtra("Число", userNumber) Intent.putExtra("код",otp) startActivity (намерение) заканчивать() } } если(!userNumber.isEmpty()){ если (userNumber.length == 10) { loginactivitybinding.sendotp.visibility = Вид.INVISIBLE loginactivitybinding.progressbarlogin.visibility = Просмотр.VISIBLE val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(номер пользователя) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this@LoginActivity) .setCallbacks(обратные вызовы) .строить() PhoneAuthProvider.verifyPhoneNumber(варианты) }еще{ Toast.makeText(applicationContext, «Введите допустимое число», Toast.LENGTH_SHORT).show() } }еще{ Toast.makeText(applicationContext, «Сначала введите номер мобильного телефона», Toast.LENGTH_SHORT).show() } } } } otpverificationactivity.kt
класс OTPVerificationActivity : AppCompatActivity() { lateinit var otpverificationBinding: ActivityOtpverificationBinding varverificationCode = "" вар userNum = "" обратные вызовы lateinit var: PhoneAuthProvider.OnVerificationStateChangedCallbacks val auth = FirebaseAuth.getInstance() переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) otpverificationBinding = ActivityOtpverificationBinding.inflate(layoutInflater) val view = otpverificationBinding.root setContentView (просмотр) verificationCode = намерение!!.getStringExtra("код").toString() userNum = намерение!!.getStringExtra("Number").toString() otpverificationBinding.verify.setOnClickListener { if(!otpverificationBinding.otp1.text.toString().isEmpty() && !otpverificationBinding.otp1.text.toString().isEmpty() && !otpverificationBinding.otp1.text.toString().isEmpty() && !otpverificationBinding. otp3.text.toString().isEmpty() && !otpverificationBinding.otp4.text.toString().isEmpty() && !otpverificationBinding.otp5.text.toString().isEmpty() && !otpverificationBinding.otp6.text.toString().isEmpty()){ var userInput = otpverificationBinding.otp1.text.toString()+ otpverificationBinding.otp2.text.toString()+ otpverificationBinding.otp3.text.toString()+ otpverificationBinding.otp4.text.toString()+ otpverificationBinding.otp5.text.toString()+ otpverificationBinding.otp6.text.toString() если (код проверки! = ноль) { otpverificationBinding.progressbarotp.visibility = Вид.VISIBLE otpverificationBinding.verify.visibility = Вид.НЕВИДИМЫЙ val credential = PhoneAuthProvider.getCredential(verificationCode,userInput) SignInWithCredential (учетные данные) }еще{ Toast.makeText(applicationContext, «Проверьте подключение», Toast.LENGTH_SHORT).show() } //Toast.makeText(applicationContext, «Verified», Toast.LENGTH_SHORT).show() }еще{ Toast.makeText(applicationContext, «Введите все цифры», Toast.LENGTH_SHORT).show() } } отпблокмове() otpverificationBinding.resend.setOnClickListener { обратные вызовы = объект: PhoneAuthProvider.OnVerificationStateChangedCallbacks(){ переопределить удовольствие onVerificationCompleted(p0: PhoneAuthCredential) { } переопределить fun onVerificationFailed(p0: FirebaseException) { } переопределить fun onCodeSent(otp: String, p1: PhoneAuthProvider.ForceResendingToken) { код проверки = отп } } val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(userNum) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this@OTPVerificationActivity) .setCallbacks(обратные вызовы) .строить() PhoneAuthProvider.verifyPhoneNumber(параметры) } } // Функция для перемещения блока otp на 1 место личное развлечение otpblockmove() { val otpFields = arrayOf( отпверификацияBinding.otp1, отпверификацияBinding.otp2, отпверификацияBinding.otp3, отпверификацияBinding.otp4, отпверификацияBinding.otp5, otpverificationBinding.otp6 ) для (я в 0..4) { otpFields.addTextChangedListener(объект: TextWatcher { переопределить fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { // Не требуется, но должно быть переопределено } переопределить fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { // Автоматический переход к следующему полю OTP при вводе символа if (!s.toString().isEmpty()) { otpFields[i+1].requestFocus() } } переопределить fun afterTextChanged(s: Editable?) { // Не требуется, но должно быть переопределено } }) } } весело SignInWithCredential (credential: PhoneAuthCredential) { auth.signInWithCredential(credential).addOnCompleteListener {задача -> если (task.isSuccessful) { otpverificationBinding.progressbarotp.visibility = Вид.НЕВИДИМЫЙ otpverificationBinding.verify.visibility = Просмотр.VISIBLE val намерение = Intent(this@OTPVerificationActivity, MainActivity::class.java) startActivity (намерение) заканчивать() }еще{ otpverificationBinding.progressbarotp.visibility = Вид.НЕВИДИМЫЙ otpverificationBinding.verify.visibility = Просмотр.VISIBLE Toast.makeText(applicationContext, «Ошибка», Toast.LENGTH_SHORT).show() } } } }
Мобильная версия