短信检索API不工作,因为广播接收器自动捕获OTP从未被调用



我正在尝试使用google smsretrierapi(这里的文档)自动捕获OTP,它从消息文本中捕获OTP,提供的消息是开始形式[#]并以应用散列字符串结束,例如NMjIX4ZCb0u

尽管发送了正确格式的消息模板,但在manifest中注册的广播接收器永远不会调用消息的onReceive,该消息可以进一步用于使用任何OTP正则表达式获得OTP。

我的代码如下

Android清单

<receiver
android:name=".receiver.AutoReadSMSReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED" />
</intent-filter>
</receiver>

LoginFragment.kt

smsRetrieverClient?.startSmsRetriever()

AutoReadSMSReceiver

public class AutoReadSMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(@NonNull Context context, @Nullable Intent intent) {
String message = null;
Log.d("AutoReadSms", "onReceive: intent "+intent);
if (null != intent && null != intent.getExtras() && SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
if (null != status) {
Toast.makeText(context,"status code "+status.getStatusCode(), Toast.LENGTH_SHORT).show();
switch (status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
break;
case CommonStatusCodes.TIMEOUT:
break;
}
}
}
Intent smsintent = new Intent();
smsintent.setAction(OTPHandlerFragment.AUTO_READ_SMS_COMMAND);
smsintent.putExtra(OTPHandlerFragment.MESSAGE, message);
context.sendBroadcast(smsintent);
}
}

尝试了以上方法,但不成功。

自动otp捕获不工作的原因是smsRetrieval API无法在Android 13中与少数非google设备成功启动。在实际设备中

"设备不支持消息传递功能">

此问题报告给谷歌并在这里跟踪https://issuetracker.google.com/issues/275036593?pli=1

最新更新