我正在尝试使用Firebase制作电话强化方法,但是当我尝试验证我的电话号码时(当我单击“ veriBtn”时),我的应用加载了一段时间,然后崩溃了。
代码:
RegisterLoginActivity
package com.example.madistrezsieu
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.tasks.Task
import com.google.firebase.FirebaseException
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.PhoneAuthCredential
import com.google.firebase.auth.PhoneAuthProvider
import kotlinx.android.synthetic.main.activity_register_login.*
import java.util.concurrent.TimeUnit
class RegisterLoginActivity : AppCompatActivity() {
lateinit var mCallbacks: PhoneAuthProvider.OnVerificationStateChangedCallbacks
lateinit var mAuth: FirebaseAuth
var verificationId = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register_login)
mAuth = FirebaseAuth.getInstance()
veriBtn.setOnClickListener {
view: View? -> progress.visibility = View.VISIBLE
verify ()
}
authBtn.setOnClickListener {
view: View? -> progress.visibility = View.VISIBLE
authenticate()
}
}
private fun verificationCallbacks () {
mCallbacks = object: PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
override fun onVerificationCompleted(credential: PhoneAuthCredential) {
progress.visibility = View.INVISIBLE
signIn(credential)
}
override fun onVerificationFailed(p0: FirebaseException?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onCodeSent(verfication: String?, p1: PhoneAuthProvider.ForceResendingToken?) {
super.onCodeSent(verfication, p1)
verificationId = verfication.toString()
progress.visibility = View.INVISIBLE
}
}
}
private fun verify () {
verificationCallbacks()
val phnNo = phnNoTxt.text.toString()
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phnNo,
60,
TimeUnit.SECONDS,
this,
mCallbacks
)
}
private fun signIn (credential: PhoneAuthCredential) {
mAuth.signInWithCredential(credential)
.addOnCompleteListener {
task: Task<AuthResult> ->
if (task.isSuccessful) {
toast("Logged in Successfully :)")
startActivity(Intent(this, LatestMessagesActivity::class.java))
}
}
}
private fun authenticate () {
val verifiNo = verifiTxt.text.toString()
val credential: PhoneAuthCredential = PhoneAuthProvider.getCredential(verificationId, verifiNo)
signIn(credential)
}
private fun toast (msg: String) {
Toast.makeText(this, msg, Toast.LENGTH_LONG).show()
}
}
进度条加载了一段时间,但是应用程序崩溃了。我以为可能是因为迁移到Androidx,但我不确定。
activity_register_login.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.madistrezsieu.RegisterLoginActivity">
<EditText
android:id="@+id/phnNoTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="88dp"
android:hint="Phone Number"
android:inputType="number"
android:textAlignment="center"
android:textSize="24sp" />
<EditText
android:id="@+id/verifiTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:textAlignment="center"
android:inputType="number"
android:layout_below="@+id/phnNoTxt"
android:layout_marginTop="43dp"
android:hint="Verification Code" android:layout_alignParentLeft="true"/>
<Button
android:id="@+id/veriBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/verifiTxt"
android:layout_centerHorizontal="true"
android:layout_marginTop="35dp"
android:text="Verify" />
<Button
android:id="@+id/authBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/veriBtn"
android:layout_centerHorizontal="true"
android:layout_marginTop="26dp"
android:text="Authenticate" />
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyle"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_alignTop="@+id/phnNoTxt"
android:layout_centerHorizontal="true"
android:layout_marginTop="28dp"
android:visibility="invisible" />
</RelativeLayout>
LogCat
06-09 19:47:35.722 13101-13149/com.example.madistrezsieu V/FA: Connection attempt already in progress
06-09 19:47:35.722 13101-13149/com.example.madistrezsieu V/FA: Connection attempt already in progress
06-09 19:47:35.722 13101-13149/com.example.madistrezsieu V/FA: Activity resumed, time: 52382490
06-09 19:47:35.802 13101-13101/com.example.madistrezsieu W/art: Before Android 4.1, method int androidx.appcompat.widget.DropDownListView.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
06-09 19:47:35.842 13101-13101/com.example.madistrezsieu I/InputMethodManager: [startInputInner] EditorInfo { packageName=com.example.madistrezsieu, inputType=0x2, imeOptions=0x8004005, privateImeOptions=null }, windowGainingFocus=android.view.ViewRootImpl$W@c162114, mServedView=androidx.appcompat.widget.AppCompatEditText{cf85dbd VFED..CL. .F.P..I. 0,176-720,283 #7f0800a6 app:id/phnNoTxt}, mServedInputConnectionWrapper=android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@f7dafb2
06-09 19:47:35.852 13101-13149/com.example.madistrezsieu D/FA: Connected to remote service
06-09 19:47:35.852 13101-13149/com.example.madistrezsieu V/FA: Processing queued up service tasks: 4
06-09 19:47:40.942 13101-13149/com.example.madistrezsieu V/FA: Inactivity, disconnecting from the service
06-09 19:47:44.672 13101-13101/com.example.madistrezsieu W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzak@879c56b
06-09 19:47:47.072 13101-13101/com.example.madistrezsieu E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.madistrezsieu, PID: 13101
kotlin.NotImplementedError: An operation is not implemented: not implemented
at com.example.madistrezsieu.RegisterLoginActivity$verificationCallbacks$1.onVerificationFailed(RegisterLoginActivity.kt:49)
at com.google.firebase.auth.api.internal.zzet.zza(Unknown Source)
at com.google.firebase.auth.api.internal.zzes.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:168)
at android.app.ActivityThread.main(ActivityThread.java:5885)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)