我一直在学习this教程,并且已经达到了能够接收推送通知的地步(目前只能使用android )。我的代码与教程中的代码几乎完全相同,现在我希望扩展它的功能。在本教程中,当应用程序接收到RemoteMessage
对象时,它会从数据中解析出"action“值。然后,它将该字符串传递给触发操作的NotificationActionService
。
public override void OnMessageReceived(RemoteMessage message)
{
if (message.Data.TryGetValue("action", out var messageAction))
NotificationActionService.TriggerAction(messageAction);
}
这样做的缺点是,它传递给程序其余部分的唯一信息是动作的名称。我想添加更多信息。我通常只向TriggerAction
方法添加另一个参数,但是INotificationActionService
的实现相当复杂。我想知道这样做是有原因的,还是我可以在OnMessageReceived
中处理我的消息。让我犹豫不决的是,this操作字符串也是在启动时从Intent
中拉出的,我不确定这是否会破坏它。我不完全确定android intents是如何工作的,但是RemoteMessage和Intent都需要字典中的这些额外数据。
那么,修改本教程以允许在推送通知中传递额外上下文的最佳方法是什么?
发布于 2021-08-12 19:24:58
这是一个很好的问题--实际上,并没有一个真正的答案。基本上,所有Android应用程序都将是活动和服务的集合。您可以将它们视为独立的线程,操作系统可以感知并帮助管理它们。Intents是一种标准化的方式,可以使用一组可以安全序列化的类型在这些线程之间进行通信,因此操作系统可以对它的交付方式和时间做出更强有力的保证。有很多文档,以及使用这些文档构建应用程序的各种不同方法。每种方法都有优缺点,有些选项对于某些应用程序来说太复杂了,而另一些则太简单了。
您引用的Xamarin示例包含两个单独的线程:一个用于接收远程通知,另一个用于呈现通知。原则上,开发者可以这样做以允许响应于来自远程服务的消息或响应于电话本地的事件来呈现通知。例如,我的银行应用程序会提醒我,在15分钟不活动后,以及新的税务文件可用时,我将被注销。第一个场景最好在本地提供,其中将呈现一个通知,因为计时器达到15分钟而没有被重置。第二种情况最好是使用远程通知,这样应用程序就不需要轮询新文档。
底线-示例应用程序可能使用了一种比您的场景所需的开销更多的方法。对于其他人来说,这太简单了。选择适合您的应用程序。
https://stackoverflow.com/questions/68754819
复制相似问题