Twilio验证SDK未在Android 7.0和8.0上读取短信
我一直在使用Android的Twilio验证SDK(com.Twilio:Verification:1.0.9)和这个build.gradle配置:compile_SDK=26,min_SDK=23,target_SDK=26,build_tools='27.0.3',我还无法让应用程序在Android 7.0和8.0设备上读取短信;然而,它在安卓6.0上运行良好 这是我的收音机:Twilio验证SDK未在Android 7.0和8.0上读取短信,android,twilio,Android,Twilio,我一直在使用Android的Twilio验证SDK(com.Twilio:Verification:1.0.9)和这个build.gradle配置:compile_SDK=26,min_SDK=23,target_SDK=26,build_tools='27.0.3',我还无法让应用程序在Android 7.0和8.0设备上读取短信;然而,它在安卓6.0上运行良好 这是我的收音机: class PhoneVerificationReceiver: BroadcastReceiver() {
class PhoneVerificationReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
RxBus.publish(PhoneVerificationEvent(TwilioVerification.getVerificationStatus(intent).state))
}
}
在AndroidManifest上声明如下:
<receiver
android:name=".service.PhoneVerificationReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.twilio.verification.current_status" />
</intent-filter>
</receiver>
检索JWT令牌后,验证过程开始,它使用VerificationStatus.State.STARTED
成功进入onReceive
方法。之后,短信被接收,但它不再进入onReceive
功能
Android SDK散列签名已就位;我遵循了这个教程:;这段代码在Android 6.0设备上运行良好
任何帮助都将不胜感激。这里是Twilio开发者福音传道者 我不是Android开发者,但我在内部向团队寻求帮助,下面是他们告诉我的 清单声明的广播接收器对较新版本的Android有一些限制。您能否在运行时使用
context.registerReceiver
注册广播接收器,并使用context.unregisterReceiver
注销广播接收器
这里有更多信息:
让我知道这是否有帮助。尝试了上下文注册/注销广播接收器,但它仍然无法读取短信。接收器似乎没有捕获外部意图,因为在使用Twilio启动验证后,我从意图接收到启动状态。您确定PhoneVerificationReceiver没有接收更多更新吗?因为RxBus可能有问题。publishYes,它没有接收更新,我在
onReceive
方法上添加了一个断点,它在STARTED状态下只进入一次;然后,SMS到达,但它不会再次进入接收onReceive
。
override fun onResume() {
super.onResume()
disposable.add(
RxBus.listen(PhoneVerificationEvent::class.java)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
when (it.state) {
VerificationStatus.State.STARTED, VerificationStatus.State.AWAITING_VERIFICATION -> {
lockUI()
}
VerificationStatus.State.SUCCESS -> {
savePhoneNumber()
}
VerificationStatus.State.ERROR -> {
unlockUI("Phone couldn\'t be verified")
}
}
}, {
Timber.e(it)
})
)
}
override fun onPause() {
disposable.clear()
super.onPause()
}