|
|
@@ -0,0 +1,238 @@
|
|
|
+### push 消息内容说明
|
|
|
+```
|
|
|
+#例一
|
|
|
+{
|
|
|
+ "type": "click",
|
|
|
+ "data": {
|
|
|
+ "type": "click",
|
|
|
+ "aps": {
|
|
|
+ "alert": {
|
|
|
+ "body": "test content",
|
|
|
+ "title": "title"
|
|
|
+ },
|
|
|
+ "badge": 2,
|
|
|
+ "content-available": 0,
|
|
|
+ "mutable-content": 1,
|
|
|
+ "sound": "default",
|
|
|
+ "unipush_version": "2.0"
|
|
|
+ },
|
|
|
+ "title": "销花宝",
|
|
|
+ "content": "test content",
|
|
|
+ "payload": {
|
|
|
+ "content": "在证书管理页面选择可查看到已申请的所有证书"
|
|
|
+ },
|
|
|
+ "unipush_version": "2.0"
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#列二
|
|
|
+{
|
|
|
+ "type": "click",
|
|
|
+ "data": {
|
|
|
+ "aps": {
|
|
|
+ "alert": {
|
|
|
+ "body": "必须:经过发行原生app云打包后,客户端才能监听到推送消息。",
|
|
|
+ "title": "app title"
|
|
|
+ },
|
|
|
+ "badge": 4,
|
|
|
+ "content-available": 0,
|
|
|
+ "mutable-content": 1,
|
|
|
+ "sound": "default",
|
|
|
+ "unipush_version": "2.0"
|
|
|
+ },
|
|
|
+ "content": "必须:经过发行原生app云打包后,客户端才能监听到推送消息。",
|
|
|
+ "payload": {
|
|
|
+ "touchuan": "透传内容"
|
|
|
+ },
|
|
|
+ "title": "销花宝",
|
|
|
+ "type": "click",
|
|
|
+ "unipush_version": "2.0"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+由推送消息文档可知 https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/api.html#sendmessage
|
|
|
+
|
|
|
+| 名称 | 类型 | 描述 |
|
|
|
+| ------------ | ------ | ------------ |
|
|
|
+| alert.title | string | 通知栏标题,长度小于20 |
|
|
|
+| data.content | string | 通知栏内容,长度小于50 |
|
|
|
+| alert.body | string | 通知栏内容,长度小于50 |
|
|
|
+
|
|
|
+
|
|
|
+### 在线推送
|
|
|
+当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
|
|
|
+
|
|
|
+如果你希望当应用在线时,也通过“通知栏消息”来提醒用户;可以通过以下两种方式实现:
|
|
|
+1. 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API `uni.createPushMessage`(uni-app 框架[详情参考](https://uniapp.dcloud.io/api/plugins/push.html#createpushmessage),uni-app x 框架[详情参考](https://uniapp.dcloud.io/uni-app-x/api/push.html#createpushmessage)) 手动创建通知栏消息。
|
|
|
+2. 服务端执行推送时,传递参数`force_notification:true`,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
|
|
|
+
|
|
|
+以上两种方案各有优劣:
|
|
|
+- 方案一更加灵活;比如:客服功能,客户端接收到聊天消息时,应用如果已经打开聊天对话页面,就直接将监听到的推送内容,渲染到页面。如果应用未打开聊天页,则调用api创建“通知栏消息”提醒用户;此时你还可以执行一些其他逻辑,比如将tabBar的消息中心加红点等。
|
|
|
+
|
|
|
+- 方案二比较简便,客户端无需额外编写代码,自动创建通知栏消息;但仅适用于不关心客户端行为就创建“通知栏消息”的场景,如广告营销内容的推送等。
|
|
|
+
|
|
|
+### 安卓在线收不到通知
|
|
|
+- 检查推送的 cid,是否是当前这个测试设备的。如果卸载重装,cid会变,需要用最新的 cid推。
|
|
|
+- 检查手机上该 app的通知栏权限是否正常开启了,部分手机可能默认是关闭的。
|
|
|
+- 当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
|
|
|
+ - 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API [uni.createPushMessage](https://uniapp.dcloud.net.cn/api/plugins/push.html#createpushmessage)手动创建通知栏消息。
|
|
|
+ - 服务端执行推送时,传递参数`force_notification:true`,客户端就会自动创建“通知栏消息”(此时你的APP监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
|
|
|
+
|
|
|
+### 服务端推送消息
|
|
|
+https://uniapp.dcloud.net.cn/unipush-v2.html#%E7%AC%AC### 安卓在线收不到通知
|
|
|
+- 检查推送的 cid,是否是当前这个测试设备的。如果卸载重装,cid会变,需要用最新的 cid推。
|
|
|
+- 检查手机上该 app的通知栏权限是否正常开启了,部分手机可能默认是关闭的。
|
|
|
+- 当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
|
|
|
+ - 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API [uni.createPushMessage](https://uniapp.dcloud.net.cn/api/plugins/push.html#createpushmessage)手动创建通知栏消息。
|
|
|
+ - 服务端执行推送时,传递参数`force_notification:true`,客户端就会自动创建“通知栏消息”(此时你的APP监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。E5%9B%9B%E6%AD%A5-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8E%A8%E9%80%81%E6%B6%88%E6%81%AF
|
|
|
+
|
|
|
+### uni-push2.0 常见问题
|
|
|
+https://ask.dcloud.net.cn/article/40291
|
|
|
+
|
|
|
+
|
|
|
+### 安卓厂商离线推送是否要求上架应用商店?
|
|
|
+- 目前华为、荣耀、魅族、[oppo(测试环境)](https://open.oppomobile.com/new/developmentDoc/info?id=11257)不要求上架应用商店;vivo 、小米、[oppo(正式环境)](https://open.oppomobile.com/new/developmentDoc/info?id=11257)必须上架应用商店后才可使用离线厂商推送。
|
|
|
+
|
|
|
+### 消息分类
|
|
|
+
|
|
|
+1. 荣耀 -- 消息分类标准 https://developer.honor.com/cn/docs/11002/guides/notification-class
|
|
|
+2. 华为 -- 消息类别 https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-classification-0000001149358835#section3410731125514
|
|
|
+
|
|
|
+
|
|
|
+### 手机设备id
|
|
|
+1
|
|
|
+---
|
|
|
+华为: 9a5f7a63e290bf28f35d0691484e0721
|
|
|
+透传内容:{"order": 453225}
|
|
|
+title: 新订单
|
|
|
+content: 有客户下单,订单号: 453230
|
|
|
+扩展字段: options ---- 现部分厂商特定功能,包括仅部分厂商支持、不常用或厂商临时新增的功能(不依赖 uni-push,厂商文档支持的参数可直接使用)。
|
|
|
+
|
|
|
+Options参数说明:
|
|
|
+- 参数示例
|
|
|
+```
|
|
|
+{
|
|
|
+ "android": {
|
|
|
+ "ups": {
|
|
|
+ "notification": {
|
|
|
+ // ...其他push_channel参数略
|
|
|
+ },
|
|
|
+ "options": {
|
|
|
+ "HW": {
|
|
|
+ "/message/android/category": "填写华为侧的category取值" // EXPRESS
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+2
|
|
|
+---
|
|
|
+OPPO: 2539a06dde18170d61f235dd40253d36
|
|
|
+录入到测试设备 --- https://open.oppomobile.com/documentation/page/info?id=11251
|
|
|
+
|
|
|
+3
|
|
|
+---
|
|
|
+荣耀:6012fd931b5aa8cc028bec036bca9bc2
|
|
|
+
|
|
|
+4
|
|
|
+---
|
|
|
+VIVO: 线下:
|
|
|
+线上:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 多厂商参数
|
|
|
+https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/options.html
|
|
|
+
|
|
|
+### 安卓厂商离线推送是否要求上架应用商店?
|
|
|
+- 目前华为、荣耀、魅族、[oppo(测试环境)](https://open.oppomobile.com/new/developmentDoc/info?id=11257)不要求上架应用商店;vivo 、小米、[oppo(正式环境)](https://open.oppomobile.com/new/developmentDoc/info?id=11257)必须上架应用商店后才可使用离线厂商推送。
|
|
|
+
|
|
|
+### 如何给华为、荣耀、vivo、oppo厂商发送测试消息
|
|
|
+
|
|
|
+Android 厂商有离线推送的额度限制,基本都限制单设备单应用每天只能收到 2 条普通消息;如果要提升额度,可以自己向厂商申请消息分类。详见:[厂商通道限额&QPS说明](https://docs.getui.com/getui/mobile/vendor/qps/)
|
|
|
+
|
|
|
+**开发测试阶段额度不足时,可以发送测试消息,目前仅华为、荣耀、vivo、oppo 支持下发测试消息。发送测试消息方式如下:**
|
|
|
+
|
|
|
+1. 若调用服务端 api 推送,增加options参数:
|
|
|
+```
|
|
|
+"options": {
|
|
|
+ "HW": {
|
|
|
+ // 值为int 类型。1 表示华为测试消息,华为每个应用每日可发送该测试消息500条,此target_user_type 参数请勿发布至线上。
|
|
|
+ "/message/android/target_user_type":1
|
|
|
+ } ,
|
|
|
+ "HO": {
|
|
|
+ //值为int 类型。1 表示测试推送,不填默认为0。荣耀每个应用每日可发送该测试消息1000条。此测试参数请勿发布至线上。
|
|
|
+ "/android/targetUserType": 1
|
|
|
+ },
|
|
|
+ "VV": {
|
|
|
+ //值为int 类型。0 表示正式推送;1 表示测试推送,不填默认为0。线上请勿使用测试推送
|
|
|
+ "/pushMode":1
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+- vivo、oppo 发送测试消息,额外需要分别在 [vivo 开放平台](https://dev.vivo.com.cn/promote/pushNews) 、 [oppo开放平台](https://open.oppomobile.com/new/developmentDoc/info?id=11251) 录入测试用户(regid 对应个推cid 绑定的 device token,可以从个推后台的“故障排查”中查询 cid 信息获取)。
|
|
|
+- 华为、荣耀不需要录入测试用户。
|
|
|
+- 华为、荣耀、vivo 需要在options内添加测试参数。
|
|
|
+- oppo 只需要添加测试设备,不需要options内加参数。
|
|
|
+
|
|
|
+
|
|
|
+### 数据表
|
|
|
+```
|
|
|
+CREATE TABLE `xhHdDevice` (
|
|
|
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
|
|
+ `clientId` varchar(120) NOT NULL DEFAULT '' COMMENT '个推客户端id',
|
|
|
+ `adminId` int(11) unsigned NOT NULL COMMENT '登录用户Id',
|
|
|
+ `mainId` int(11) NOT NULL DEFAULT '0' COMMENT '中央id',
|
|
|
+ `shopId` int(11) NOT NULL DEFAULT '0' COMMENT '零售店门店id',
|
|
|
+ `autoLoginTime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' COMMENT '自动登录时间',
|
|
|
+ `pwdLoginTime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' COMMENT '密码登录时间',
|
|
|
+ `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态: 0未登录 1登录',
|
|
|
+ `addTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `cid` (`clientId`),
|
|
|
+ KEY `mid` (`mainId`),
|
|
|
+ KEY `sid` (`shopId`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='零售设备表';
|
|
|
+
|
|
|
+
|
|
|
+CREATE TABLE `xhGhsDevice` (
|
|
|
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
|
|
+ `clientId` varchar(120) NOT NULL DEFAULT '' COMMENT '个推客户端id',
|
|
|
+ `adminId` int(11) unsigned NOT NULL COMMENT '登录用户Id',
|
|
|
+ `mainId` int(11) NOT NULL DEFAULT '0' COMMENT '中央id',
|
|
|
+ `shopId` int(11) NOT NULL DEFAULT '0' COMMENT '批发门店id',
|
|
|
+ `autoLoginTime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' COMMENT '自动登录时间',
|
|
|
+ `pwdLoginTime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' COMMENT '密码登录时间',
|
|
|
+ `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态:0未登录 1登录',
|
|
|
+ `addTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
+ `updateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `cid` (`clientId`),
|
|
|
+ KEY `mid` (`mainId`),
|
|
|
+ KEY `sid` (`shopId`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='批发设备表';
|
|
|
+```
|
|
|
+查询 clientId ,如果不存在,则新建数据 -- mainId 、 shopId 哪个更合适?
|
|
|
+1. shopId 能区分是零售还是批发 , 但表本身就具备
|
|
|
+2. mainId 能一下就知道它是哪个商户的,但没有区分出在哪个门店下
|
|
|
+3. 初步得出结论是: mainId + shopId
|
|
|
+
|
|
|
+### 功能梳理
|
|
|
+1. 针对每个厂商的 option 设置
|
|
|
+2. 前端对消息类型与消息内容的处理实现细节
|
|
|
+3. 后端针对消息类型的封装处理细节,如何是更合理的封装(问AI,把需要封装的参数与不同条件处理告知AI,请其使用合理的方式组织起来)
|
|
|
+
|
|
|
+处理事项:
|
|
|
+1. 角标处理, 按消息阅读处理--减掉
|
|
|
+
|
|
|
+
|
|
|
+### 有需要的功能
|
|
|
+1. 创建一个查询 clientId 是否在线的 API --- 类似在云端发送 push 通知的云函数
|
|
|
+
|
|
|
+## 资料
|
|
|
+1. [uni-push2.0 常见问题](https://ask.dcloud.net.cn/article/40291)
|
|
|
+2. [推送后效分析说明](https://docs.getui.com/pusheffect)
|
|
|
+3. [RestAPI V2 (推荐使用) > 多厂商参数](https://docs.getui.com/getui/server/rest_v2/third_party)
|