0

我已经基于thisthis等示例在 Xamarin Android 上实现了SMS Retriever。一切正常,除了我假设被BroadcastReceiver类拦截的消息(见下文)也显示在Messages应用程序中(显示 SMS 消息的位置)。

  1. 我将AttributesBroadcastReceiver类(见下文)一起使用,而不是在AndroidManifest.xml中执行等效操作。
  2. SmsRetriever 对象在MainActivity Create()var smsRetriever = SmsRetriever.GetClient(this.ApplicationContext);方法中初始化并激活为smsRetriever.StartSmsRetriever();

  3. 我的应用程序正在使用Twilio的可编程 SMS API 发送 OTP 代码,该代码以新行上的 App Hash 字符串终止,如 SMS Retriever API 所指定的那样。除了消息应用程序中显示的 SMS 消息外,这按预期工作。

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

问题:消息是否按预期显示在消息应用程序中,因此是不可避免的,还是我错过了在消息应用程序中抑制 SMS 消息的内容?

假设检测到 App Hash String 的 SMS Retriever API只会将 SMS 消息转发到 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;
        }
    }
4

1 回答 1

0

SMS 就像另一条普通消息一样。因此它将显示在消息应用程序中。SMS 检索 API 仅用于验证设备。

于 2020-06-14T15:03:10.013 回答