将数据负载添加到 Xamarin 推送通知(GFB 和 Azure 通知中心)

Posted

技术标签:

【中文标题】将数据负载添加到 Xamarin 推送通知(GFB 和 Azure 通知中心)【英文标题】:Adding a data payload to a Xamarin Push notification (GFB and Azure Notification Hub) 【发布时间】:2021-10-15 16:06:25 【问题描述】:

我一直在关注this 教程,并且已经达到了能够接收推送通知的程度(目前仅适用于 android)。我的代码几乎与教程的相同。我现在正在寻找扩展功能。在本教程中,当应用程序接收到RemoteMessage 对象时,它会从数据中解析出“动作”值。然后它将该字符串传递给触发操作的NotificationActionService

    public override void OnMessageReceived(RemoteMessage message)
    
       if (message.Data.TryGetValue("action", out var messageAction))
            NotificationActionService.TriggerAction(messageAction);
    

这样做的缺点是它传递给程序其余部分的唯一信息是动作的名称。我想添加更多信息。我通常会在TriggerAction 方法中添加另一个参数,但INotificationActionService 的实现非常复杂。我想知道它是否是出于某种原因,或者我是否可以在OnMessageReceived 中处理我的消息。让我犹豫要不要更改的是,这个操作字符串也在启动时从Intent 中提取,我不确定这是否会破坏它。我不完全确定 android Intent 是如何工作的,但 RemoteMessage 和 Intent 都需要字典中的这些额外数据。

那么,修改本教程以允许在推送通知中传递额外上下文的最佳方法是什么?

【问题讨论】:

【参考方案1】:

这是一个很好的问题——实际上并没有一个真正的答案。基本上,所有 Android 应用程序都将是活动和服务的集合。您可以将它们视为操作系统知道并可以帮助管理的独立线程。 Intent 是使用一小组可安全序列化的类型在这些线程之间进行通信的标准化方式,因此操作系统可以对交付方式和时间做出更强有力的保证。有很多文档,以及使用这些构建应用程序的不同方法。每种方法各有利弊,有些选项对于某些应用程序来说过于复杂,而另一些则过于简单。

您引用的 Xamarin 示例保留了两个单独的线程:一个用于接收远程通知,一个用于呈现通知。原则上,开发人员可以这样做以允许响应来自远程服务的消息或响应电话本地事件而呈现通知。例如,我的银行应用程序会在 15 分钟不活动后提醒我退出,并且当有新的税务文件可用时也会提醒我。第一种情况最好在本地提供,因为计时器达到 15 分钟而未重置,因此将呈现通知。第二种情况最好通过远程通知来服务,这样应用就不需要轮询新文档。

底线 - 示例应用程序使用的方法可能会引入比您的场景要求更多的开销。对于其他人来说,这太简单了。选择适合您应用的内容。

【讨论】:

谢谢。我有一种感觉,这个样本是矫枉过正的。我现在不太关心线程安全,所以我会做一些实验并报告。

以上是关于将数据负载添加到 Xamarin 推送通知(GFB 和 Azure 通知中心)的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin iOS 中的远程通知的“默认用户操作”上推送视图控制器

xamarin.forms 中的推送通知

Xamarin - 推送通知 - 从服务器更新数据的触发器

Xamarin.iOS 无法在推送通知中显示照片

xamarin.ios 本地通知推送

Xamarin android-应用关闭时推送通知单击删除 SQLite 数据