SMS Retriever API 是否应该在消息应用程序中显示消息?

Should SMS Retriever API show message in Messages app?

我已经基于 this and this 等示例在 Xamarin Android 上实现了 SMS Retriever。一切都按预期正常工作,除了我假设被 BroadcastReceiver class 拦截的消息(见下文)也显示在 Messages 应用(显示短信的地方)。

  1. 我正在使用 AttributesBroadcastReceiver class (见下文)而不是在 AndroidManifest.xml.
  2. SmsRetriever 对象在 MainActivity Create() 方法中初始化并激活为 var smsRetriever = SmsRetriever.GetClient(this.ApplicationContext);smsRetriever.StartSmsRetriever();

  3. 我的应用程序正在使用 Twilio 的可编程短信 API 发送 OTP 代码,并在新行上以 App Hash 字符串结尾,如指定的那样对于 SMS 检索器 API。除了消息应用程序中显示的 SMS 消息外,这按预期工作。

  4. 我还使用了另一个phone来发送代码,它的工作方式与上面的Twilio服务器完全相同。

问题Messages 应用程序中显示的消息是否按预期显示,因此不可避免,或者我是否遗漏了一些信息“信息”应用中的短信被抑制了?

假设短信检索器API检测到应用哈希字符串后,将转发短信消息发送给 BroadcastReceiver,而不是转发给 Messages 应用程序(充其量显示在那里毫无意义)。

    [BroadcastReceiver(Enabled = true, Exported = true)] [IntentFilter(new[] { SmsRetriever.SmsRetrievedAction })]

    public class SmsBroadcastReceiver : BroadcastReceiver
    {
        public SmsBroadcastReceiver() { }

       public override void OnReceive(Context context, Intent intent)
       {

        if (intent.Action != SmsRetriever.SmsRetrievedAction) return;

        var extrasBundleundle = intent.Extras;
        if (extrasBundleundle == null) return;

        var status = (Statuses)extrasBundleundle.Get(SmsRetriever.ExtraStatus);

        switch (status.StatusCode)
        {
            case CommonStatusCodes.Success:

                // Get SMS message contents
                var messageContent = (string)extrasBundleundle.Get(SmsRetriever.ExtraSmsMessage);
                // Extract one-time code from the message and complete verification
                // by sending the code back to your server.

                ...

                break;

            case CommonStatusCodes.Timeout:
                ...
                break;
            case CommonStatusCodes.NetworkError:
                ...
                break;
            case CommonStatusCodes.Interrupted:
                ...
                break;
            case CommonStatusCodes.InternalError:
                ...
                break;
            default:
                ...
                break;
        }
    }

短信就像另一条普通短信。所以它会出现在消息应用程序中。短信检索 API 专为验证设备而构建。