本文主要记录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且不包含alertbadge以及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-keyloc-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创建消息推送记录相关推荐

  1. spring实现mqtt服务端_SpringBoot--实战开发--MQTT消息推送(六十)

    一.MQTT简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台 ...

  2. 极光推送后台php接口,极光推送Jpush(v2)接口 服务端PHP版本的REST API推送类

    在许多的手机App开发中推送是一个必须的应用.高大上的企业都会自己投入成本搭建自己的推送服务器,而小微企业则会选择一些服务商,使用他们的服务,减轻自己的运营和维护的成本.Jpush(极光推送)是目前比 ...

  3. Web 实时消息推送详解

    title: Web 实时消息推送详解 category: 系统设计 head: meta name: keywords content: 消息推送,短轮询,长轮询,SSE,Websocket,MQT ...

  4. 前端后端的消息推送 7 种方式

    消息推送 7 种方式 看了原文章后,自己写的笔记 参考 https://mp.weixin.qq.com/s/xQV81HiD8hkzx2wMc3ZT7A 需求 先说需求,实现一个站内信的web消息推 ...

  5. 7种 实现web实时消息推送的方案

    我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么是 ...

  6. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

  7. 我有 7 种实现 web 实时消息推送的方案,7 种!

    我有一个朋友,做了一个小破站,现在要实现一个站内信 web 消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现. 什么 ...

  8. 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送

    写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...

  9. 消息推送技术干货:美团实时消息推送服务的技术演进之路

    本文由美团技术团队分享,作者"健午.佳猛.陆凯.冯江",原题"美团终端消息投递服务Pike的演进之路",有修订. 1.引言 传统意义上来说,实时消息推送通常都是 ...

  10. Java后端实现安卓/IOS移动端消息推送(百度云推送)

    本文主要介绍Java服务器端如何借助第三方推送平台(百度云推送)推送给移动端消息. 使用案例介绍: 根据客户的需求,需要做一个类似淘宝消息推送的功能,客户下订单.订单付款.订单商品已发货,以及客户完成 ...

最新文章

  1. linux上传下载文件
  2. elk 搜索 语法_ELK从入门到还未精通(二)——ElasticSearch上篇
  3. Python小技巧——快速给大量文件命名
  4. 搜索引擎反作弊之:链接作弊与隐藏作弊
  5. 深度学习鼻祖杰夫·辛顿及巨头们的人才抢夺战
  6. 微软过冬的三大姿势:裁员,回购400亿美元股票,在中国开合资公司
  7. ubuntu安装Qt开发环境
  8. 常用的python脚本_五个python常用运维脚本面试题实例
  9. jsp中String path = request.getContextPath()的作用
  10. jquery中阻止事件冒泡的方法
  11. Spring Boot笔记-@Qualifier与@Autowired与@Bean
  12. java post 注册_Java 以 post 发送方式实现百度链接提交主动推送
  13. /usr/bin/ld: reader.o: Relocations in generic ELF (EM: 62)
  14. 基于php+MySQL电脑外设商城网站 毕业设计-附源码271538
  15. 功能三星Galaxy S2手机
  16. bzoj·入门OJ·统计损失
  17. h.264视频编码器
  18. java 读书笔记_《java编程思想》读后感
  19. 共享经济开始崩溃,区块链能否再续共享经济神话?
  20. 绕过阿里云盾进行XSS

热门文章

  1. 2021年N1叉车司机复审考试及N1叉车司机模拟试题
  2. 零阶保持模型和一阶保持模型离散的推导
  3. 下载百度文库任意文档
  4. 在 FlashGot 中调用 Axel 下载
  5. 泛微OA流程表单提交JS验证
  6. Pwned Vulnhub
  7. python父亲节祝福_2020年精选优美的父亲节祝福语28条
  8. JS代码计算正方教务系统目前成绩的加权平均分和平均绩点
  9. 人称代词的各种形式与用法
  10. 如何向iphone手机网易云音乐添加本地音乐