更新Firebase SDK后PhoneCallbacks类未实现抽象成员报错如何解决
错误信息中文释义:PhoneCallBacks.kt 第6行第1列:类
PhoneCallbacks不是抽象类,且未实现抽象基类成员方法public abstract fun onVerificationCompleted(p0: PhoneAuthCredential): Unit(该方法定义在com.google.firebase.auth.PhoneAuthProvider.OnVerificationStateChangedCallbacks中)
问题根因
这是Firebase Auth SDK版本升级带来的不兼容变更:新版SDK中OnVerificationStateChangedCallbacks的三个回调方法参数全部改为非空类型,你现有代码里重写的方法参数都添加了可空标记?,导致方法签名和父类的抽象方法不匹配,编译器判定你没有实现对应抽象方法,因此抛出编译错误。
修复方案
方案1:同步修改为非空参数(推荐)
新版Firebase Auth的回调参数不会为空,直接调整所有相关方法的参数类型即可:
class PhoneCallbacks(private val listener : PhoneCallbacksListener) : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { interface PhoneCallbacksListener { fun onVerificationCompleted(credential: PhoneAuthCredential) fun onVerificationFailed(exception: FirebaseException) fun onCodeSent( verificationId: String, token: PhoneAuthProvider.ForceResendingToken ) } override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) { listener.onVerificationCompleted(phoneAuthCredential) } override fun onVerificationFailed(exception: FirebaseException) { listener.onVerificationFailed(exception) } override fun onCodeSent(verificationId: String, token: PhoneAuthProvider.ForceResendingToken) { listener.onCodeSent(verificationId,token) } }
方案2:兼容原有可空逻辑
如果不想修改原有Listener的调用逻辑,只需要调整重写方法的参数签名,保持Listener的可空定义即可:
class PhoneCallbacks(private val listener : PhoneCallbacksListener) : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { interface PhoneCallbacksListener { fun onVerificationCompleted(credential: PhoneAuthCredential?) fun onVerificationFailed(exception: FirebaseException?) fun onCodeSent( verificationId: String?, token: PhoneAuthProvider.ForceResendingToken? ) } override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) { listener.onVerificationCompleted(phoneAuthCredential) } override fun onVerificationFailed(exception: FirebaseException) { listener.onVerificationFailed(exception) } override fun onCodeSent(verificationId: String, token: PhoneAuthProvider.ForceResendingToken) { listener.onCodeSent(verificationId,token) } }
内容的提问来源于stack exchange,提问作者DB_cont
相关产品推荐
相关产品推荐

