SMS Retriever API 是否应该在消息应用程序中显示消息?
Should SMS Retriever API show message in Messages app?
我已经基于 this and this 等示例在 Xamarin Android 上实现了 SMS Retriever。一切都按预期正常工作,除了我假设被 BroadcastReceiver class 拦截的消息(见下文)也显示在 Messages 应用(显示短信的地方)。
- 我正在使用 Attributes 和 BroadcastReceiver class (见下文)而不是在 AndroidManifest.xml.
SmsRetriever 对象在 MainActivity Create() 方法中初始化并激活为 var smsRetriever = SmsRetriever.GetClient(this.ApplicationContext);
和 smsRetriever.StartSmsRetriever();
我的应用程序正在使用 Twilio 的可编程短信 API 发送 OTP 代码,并在新行上以 App Hash 字符串结尾,如指定的那样对于 SMS 检索器 API。除了消息应用程序中显示的 SMS 消息外,这按预期工作。
我还使用了另一个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 专为验证设备而构建。
我已经基于 this and this 等示例在 Xamarin Android 上实现了 SMS Retriever。一切都按预期正常工作,除了我假设被 BroadcastReceiver class 拦截的消息(见下文)也显示在 Messages 应用(显示短信的地方)。
- 我正在使用 Attributes 和 BroadcastReceiver class (见下文)而不是在 AndroidManifest.xml.
SmsRetriever 对象在 MainActivity Create() 方法中初始化并激活为
var smsRetriever = SmsRetriever.GetClient(this.ApplicationContext);
和smsRetriever.StartSmsRetriever();
我的应用程序正在使用 Twilio 的可编程短信 API 发送 OTP 代码,并在新行上以 App Hash 字符串结尾,如指定的那样对于 SMS 检索器 API。除了消息应用程序中显示的 SMS 消息外,这按预期工作。
我还使用了另一个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 专为验证设备而构建。