服务端通过AWS SNS创建消息推送记录
本文主要记录APNs、FCM消息推送的格式以及后端服务集成消息推送时遇到的一些问题,使用的环境为Node.js + AWS SNS。
AWS SNS是一个AWS的消息管理服务,本文中我们主要通过其创建多平台的消息推送。我们可以通过SNS对多个平台发送消息,如APNs(iOS)、FCM(Android)等。文中的消息推送可以简单地通过以下Node.js代码实现(Typescript)。
import { SNS } from 'aws-sdk';const sns = new SNS({accessKeyId: '***',secretAccessKey: '***',region: '***',
});const params = {// 发送消息提醒到topic则需要填写此项,本文中主要是发送到topicTopicArn: '',// 发送消息提醒到指定终端则填写此项而非TopicArn// TargetArn: '',// 消息推送内容的类型,值为jsonMessageStructure: 'json'// 消息提醒的内容Message: JSON.stringify({// 若发送至topic,必须包含default,其代表发送至未被指定的平台的内容default: '默认消息',// 为指定平台发送数据时,必须为JSON键值对字符串APNS: JSON.stringify({aps: {alert: {title: '你好,iOS',body: '这是提醒内容',},},data: {customId: '123',}}),GCM: JSON.stringify({notification: {title: '你好,Android',body: '这是提醒内容',},data: {customId: '123',}}),}),
}sns.publish(params);
在消息发送后,订阅了该topic的生产环境下的iOS终端将收到标题为'你好,iOS'
的消息提醒,Android端将收到'你好,Android'
的消息提醒,其它终端(例如iOS开发环境或浏览器)将收到'默认消息'
。
APNs数据格式(iOS)
APNs(Apple Push Notification service)是为苹果终端设备推送消息提醒的服务。首先,我们先看一个APNs推送的内容示例:
{"aps": {"alert": {"title": "","body": "",}},// other custom data..."data": {"customId": ""}
}
其中,aps
表示一些苹果定义的推送设置内容,关于其值可参考aps
部分键值对说明。
除aps
外,我们还可以加入一些自定义的内容,如示例中的customId
。
aps
字段说明
名称 | 类型 | 说明 |
---|---|---|
alert
|
字典或字符串 | 推送横幅展示的内容,为字符串时直接展示该字符串的值,为字典时值请参考下表 |
badge
|
数值 | app标记(badge)显示的数字,为0则不显示标记 |
sound
|
字符串或字典 |
接受推送时的声音提醒,默认为default ,关于更多推送声音可参考UNNotificationSound
|
thread-id
|
字符串 | 用于不同类型消息提醒的分组 |
category
|
字符串 | 消息提醒的类型,可以参考Declaring Your Actionable Notification Types |
content-available
|
数值 |
其值为1且不包含alert 、badge 以及sound 时表示该消息提醒为后台提醒
|
mutable-content
|
数值 | 其值为1时该消息推送需要先经过app端处理,可参考Modifying Content in Newly Delivered Notifications |
target-content-id
|
字符串 | 打开窗口的标识符 |
关于更多的aps
部分说明可参考Payload Key Reference Table 1。
alert
部分常用字段说明
名称 | 类型 | 说明 |
---|---|---|
title
|
字符串 | 消息提醒的主标题 |
subtitle
|
字符串 | 消息提醒的副标题,用于表示解释推送目的的额外信息 |
body
|
字符串 | 消息提醒的主要内容 |
launch-image
|
字符串 | 表示用户通过点击消息提醒打开app时展示的图片 |
另外,alert
部分还定义了loc-key
、loc-args
等与本地化相关的字段,如需使用可参考文档。关于更多的alert
部分说明可参考Payload Key Reference Table 2。
FCM数据格式
FCM(Firebase Cloud Messaging)是一个跨平台的消息解决方案,在2018年起Google使用FCM替代GCM(Google Cloud Messaging)。同样,我们先看一下FCM的推送内容示例:
{"notification": {"title": "","body": "",},"data": {"customId": ""//}
}
其中,notification
部分为预先定义的系统使用字段,其包含的字段可参考notification
部分常用字段;data
部分为用户自定义字段,如示例中的{"customId": ""}
。
notification
部分常用字段
名称 | 类型 | 说明 |
---|---|---|
title
|
字符串 | 消息提醒标题 |
body
|
字符串 | 消息提醒主要内容 |
icon
|
字符串 | 消息提醒的图标,默认为在manifest中定义的app图标 |
sound
|
字符串 |
消息提醒播放的声音,默认为default
|
notification_count
|
数值 | 设置消息提醒的标示数字 |
visibility
|
布尔值 | 是否展示消息提醒 |
image
|
字符串 | 消息提醒展示的图片 |
关于更多的FCM字段,可参考AndroidNotification - Firebase。
无法获取数据的问题
正确区分开发环境与生产环境
有些平台的推送需要区分不同的环境,例如iOS的推送APNs,需要区分APNS
以及APNS_SANDBOX
。在使用AWS SNS创建Topic消息时,若使用了错误的环境,可能导致终端接收到的数据为default
中的信息。例如在我们上面的测试代码中发送消息至开发环境,终端接收到的数据可能为:
{"aps": {"alert": "默认消息"}
}
使用SNS需将payload转为字符串
使用SNS创建消息推送时,必须将各payload数据先转为字符串的形式,否则可能无法收到正确的推送内容,如示例代码中的APNS: JSON.stringify({})
。
参考资料
- Generating a Remote Notification - Apple Developer Documentation
- Firebase Cloud Messaging HTTP protocol - Firebase
- 使用平台特定负载发布 - AWS SNS
服务端通过AWS SNS创建消息推送记录相关推荐
- spring实现mqtt服务端_SpringBoot--实战开发--MQTT消息推送(六十)
一.MQTT简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台 ...
- 极光推送后台php接口,极光推送Jpush(v2)接口 服务端PHP版本的REST API推送类
在许多的手机App开发中推送是一个必须的应用.高大上的企业都会自己投入成本搭建自己的推送服务器,而小微企业则会选择一些服务商,使用他们的服务,减轻自己的运营和维护的成本.Jpush(极光推送)是目前比 ...
- Web 实时消息推送详解
title: Web 实时消息推送详解 category: 系统设计 head: meta name: keywords content: 消息推送,短轮询,长轮询,SSE,Websocket,MQT ...
- 前端后端的消息推送 7 种方式
消息推送 7 种方式 看了原文章后,自己写的笔记 参考 https://mp.weixin.qq.com/s/xQV81HiD8hkzx2wMc3ZT7A 需求 先说需求,实现一个站内信的web消息推 ...
- 7种 实现web实时消息推送的方案
我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么是 ...
- 我有 7种 实现web实时消息推送的方案,7种!
技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...
- 我有 7 种实现 web 实时消息推送的方案,7 种!
我有一个朋友,做了一个小破站,现在要实现一个站内信 web 消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么 ...
- 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送
写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...
- 消息推送技术干货:美团实时消息推送服务的技术演进之路
本文由美团技术团队分享,作者"健午.佳猛.陆凯.冯江",原题"美团终端消息投递服务Pike的演进之路",有修订. 1.引言 传统意义上来说,实时消息推送通常都是 ...
- Java后端实现安卓/IOS移动端消息推送(百度云推送)
本文主要介绍Java服务器端如何借助第三方推送平台(百度云推送)推送给移动端消息. 使用案例介绍: 根据客户的需求,需要做一个类似淘宝消息推送的功能,客户下订单.订单付款.订单商品已发货,以及客户完成 ...
最新文章
- linux上传下载文件
- elk 搜索 语法_ELK从入门到还未精通(二)——ElasticSearch上篇
- Python小技巧——快速给大量文件命名
- 搜索引擎反作弊之:链接作弊与隐藏作弊
- 深度学习鼻祖杰夫·辛顿及巨头们的人才抢夺战
- 微软过冬的三大姿势:裁员,回购400亿美元股票,在中国开合资公司
- ubuntu安装Qt开发环境
- 常用的python脚本_五个python常用运维脚本面试题实例
- jsp中String path = request.getContextPath()的作用
- jquery中阻止事件冒泡的方法
- Spring Boot笔记-@Qualifier与@Autowired与@Bean
- java post 注册_Java 以 post 发送方式实现百度链接提交主动推送
- /usr/bin/ld: reader.o: Relocations in generic ELF (EM: 62)
- 基于php+MySQL电脑外设商城网站 毕业设计-附源码271538
- 功能三星Galaxy S2手机
- bzoj·入门OJ·统计损失
- h.264视频编码器
- java 读书笔记_《java编程思想》读后感
- 共享经济开始崩溃,区块链能否再续共享经济神话?
- 绕过阿里云盾进行XSS