我在后端使用AWS SNS SDK向我的应用程序发送远程通知,我需要能够设置通知标识符,以便某些通知默认替换以前提供的副本,如iOS developer docs中所述:
如果在计划新通知时使用相同的标识符,系统将使用该标识符删除先前安排的通知,并将其替换为新标识符。
这对于本地通知很容易,因为它们是在应用程序中安排的,您可以在安排通知时设置通知标识符。
但是,通过远程通知,我似乎找不到使用SNS SDK设置通知标识符的任何方法(在用.NET编写的Lambda中)。
根据API参考,SNS returns a response with a message ID(可能是通知标识符),但我看不到任何方式自己设置标识符。
有谁知道怎么做?或者SNS根本不允许这样做?
您可以自定义有效负载,如AWS:https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-custommessage.html所述
使用Amazon SNS控制台在消息中发送特定于平台的有效负载时,数据必须是键值对字符串,并格式化为带有引号转义的JSON。以下示例(包括格式和空格以提高可读性)显示了GCM平台的示例自定义消息,其中消息体内具有键值对并格式化为JSON。
{“GCM”:“{”data“:{”message“:”查看这些令人敬畏的优惠!“,”网址“:”www.amazon.com“}}”}
您可以将您的ID添加为自定义字段。
编辑:如果您需要添加标题,您可能希望通过Lambda函数代理请求:https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html这是一个线程,显示如何使用Lambda添加响应标头:Setting http response header from AWS lambda
似乎AWS SNS完全不允许自定义通知标识符,也不允许自定义发送到APNS的HTTP标头。
唯一可行的解决方案是使远程推送通知在到达时替换自己似乎是通过使用Notification Service Extension到check delivered notifications whenever a new one arrives and replace any previous copies with the new version。
它似乎一致地工作,您可以选择在通知JSON中设置自定义有效内容属性或thread-id
属性,以便在发送每个通知之前在设备上进行检查。