赞
踩
一些技术或者功能的使用,经常是需要翻阅多个文档才能得到想要的答案。故整理成文档,一条线下来从基础概念到简单使用,方便有需要的人查阅。
首先会展示 目标(效果)
来让你了解该篇内容要达到什么样的使用情况,其次会告诉你通过什么样的过程达到该 目标
,最后会整理过程中遇到的 常见问题
及解决方法,也欢迎各位能把遇到的问题和解决方案私信让我补充上去,感谢!
如同微信收到未读消息后会在通知栏显示,该条消息便是微信APP的消息推送。多用于有需要从服务端主动发出消息提醒到客户端的场景。
个推 | unipush | 厂商推送 | |
---|---|---|---|
简介 | 个推提供移动端消息推送服务 | uniapp集成了个推的各个功能,更好地与uniapp结合 | 各个厂商上也有自己的推送,比如华为、小米,相当于使用厂商自带的推送服务 |
特点 | 需要收费 | 相当于收费版的个推免费给开发uniapp的人使用 | 免费,但有的厂商有使用条件,比如vivo需要上架应用市场后才可开通 |
当APP在线时,走个推通道;APP离线时,走厂商推送。
结论
当我们使用 uni-app
开发应用时,使用 uni-push
是最方便的,如下:
1)通知消息
官方 封装
了消息模板、以及客户端点击消息后的事件,若只需要简单地发出消息推送,不处理复杂的点击后的逻辑,使用通知消息即可。
2)透传消息
完全 可自定义
模板及点击消息后事件的消息,若需要处理自定义的点击后的逻辑,使用透传消息更佳。
以cid个推方式为例
1)注册cid
2)服务端推送消息
3)客户端接收消息(以透传消息为例)
我们本次个推要达成的目标是:
能够通过 uniPush开发者中心 uniPush官方网站的个推服务,向手机发送推送,如下两图所示:
如上文章介绍十分详细,因此只提几点在开通过程中遇到的问题:
1)开通个推时,包名、数字签名如何填写?
包名
打开 HbuilderX
- 菜单栏的"发行" - 原生APP云打包 - Android 包名,复制该包名即可
数字签名
使用 keytool
生成并查看自有证书的数字签名:生成数字签名详细方法
① 在本机安装 jdk1.8
的环境
② 使用 keytool -genkey
命令生成证书
testalias
是证书别名
test.keystore
是证书文件名称
keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
示例:
keytool -genkey -alias ykkey -keyalg RSA -keysize 2048 -validity 36500 -keystore yk.keystore
③ 查看密钥信息
SHA1 即为数字签名,复制即可
keytool -list -v -keystore test.keystore
# 输入以上命令之后,会展示如下信息
MD5: 0D:FD:B8:12:FB:7A:BB:xx...
SHA1: AE:71:96:33:F6:09:59:AD:xx...
SHA256: 88:63:8A:94:12:3B:6B:E9:55:25:FF:6E:FA:xx...
2)生成私有签名证书时,keytool 错误: java.io.FileNotFoundException: xxx.keystore (拒绝访问。)
① 原因
JDK安装在C盘,没有写的权限,因此报错
② 解决方法
将证书的目录更改,示例如下:
C:\Program Files\Java\jdk1.7.0_65\bin>keytool -genkey -alias andro
eyalg RSA -validity 30000 -keystore D:/keyStore/android.keystore
上一步开通了 uniPush 之后,便可以配置厂商推送设置,用于接收离线消息用,如下图,可打开对应厂家的开发者后台,通用注册步骤如下:
1)打开对应厂商开发者后台
2)注册开发者账号(大部分需要上传个人身份证及真人照,特殊的只能注册企业账号,需要企业的营业执照等资料)
3)提交审核
4)审核通过后,可进入开发者后台查看对应 App 的 AppID、AppKey 等内容,复制并填写到 uniPush
的厂商推送设置中
在 uniApp
项目中,进入 manifest.json
源代码视图,如下权限是必须配置的手机权限,来保证个推消息推送的成功率
(1)网络连接(必选) <uses-permission android:name="android.permission.INTERNET”/> (2)获取手机状态参数,并作为生成个推唯一标识的必要参数(必选) <uses-permission android:name="android.permission.READ_PHONE_STATE”/> (3)查看网络状态,sdk重连机制等需要使用(必选) <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE”/> (4)查看wifi连接状态(必选) <uses-permission android:name="android.permission.ACCESS_WIFI_STATE”/> (5)开机自启动权限,提升sdk活跃,保障触达(必选) <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED”/> (6)写sd卡权限,做数据备份(必选) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE”/> (7)震动权限(使用通知功能必选) <uses-permission android:name="android.permission.VIBRATE”/> (8)获取任务信息,目的是防止sdk被频繁唤醒(必选) <uses-permission android:name="android.permission.GET_TASKS”/>
前端处理中,分为两部分:获取cid 和 点击推送消息后的逻辑
1)获取cid
注意
需要使用条件编译,避免H5上运行时报错
cid
也就是手机标识,用来唯一标识是哪台手机的
getCID
方法可以放在登录逻辑中,将获取到的 cid
放在登录接口中,让后端将用户与 cid 绑定并存起来。
// 获取客户端标识
getCID() {
let cid = ''
// #ifdef APP-PLUS
let pinf = plus.push.getClientInfo();
cid = pinf.clientid;
// #endif
return cid
}
2)点击推送消息后的逻辑
以点击消息后,进入到 home
页面为例, 在 APP.vue
中编写如下逻辑
先重定向到首页,再跳转到特定的页面,符合日常使用逻辑;若直接跳转到特定页面,用户一旦点击返回,由于页面栈中没有其他页面,便容易出现预料之外的错误。
<script> export default { created() { // #ifdef APP-PLUS // 添加监听从系统消息中心点击某条消息启动应用事件 plus.push.addEventListener("click", msg => { // 分析msg.payload处理业务逻辑 if (!msg.payload) { return } this.handlePush(msg) }, false); // false: 在冒泡阶段执行;true: 在捕获阶段执行 // #endif }, methods: { // 处理点击推送消息后的事件 handlePush(msg) { uni.reLaunch({ // 1.先重定向到首页 url: '../navigation/index', success: () => { uni.navigateTo({ // 2.跳转到消息推送指定单据,payload格式:../home/index url: msg.payload }); } }) }, } } </script>
1)进入 uniPush
开发者中心
2)选择透传消息,填写描述、透传内容、目标用户等,以点击消息后要跳转到 home
页面为例,如下图所示
解析
Intent 数据格式:
其中io.dcloud.HBuilder为APP包名,需要替换为自己APP的包名;
S.title=的值为推送消息标题,对应5+ API中PushMessage对象的title属性值;
S.content=的值为推送消息内容,对应5+ API中PushMessage对象的content属性值;
S.payload=的值为推送消息的数据,对应5+ API中PushMessage对象的payload属性值;
launchFlags=0x14000000字段,解决接收多条通知后点击可能无法触发click事件的问题
3)点击预览
4)点击确认来发送透传消息,即可在手机端上查看到开头所说的消息推送
1)需要上线在华为市场下载【实测不一定需要】
2)需要华为手机安装华为移动服务
3)华为推送的 SHA256
码未配置:华为推送平台-项目设置-常规-应用,将前面我们 keytool
生成的 SHA256
复制进去即可
就目前所知,vivo 一个设备一天只能收到5条离线消息,其他推测是没有次数限制。
见 3.1 ,问题2
1)解决办法
服务端调用所要用到的AppID
、AppKey
等应用配置信息应该使用 unipush开发者中心
中的,而非个推网站中注册的应用信息,如下图所示
注意!!
只有打了正式包才可以收到离线推送,打自定义基座不行(华为是可以在自定义基座的情况下实现离线推送的)
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。