【uni-app】一文看懂uni-push个推的使用

2025-10-21 06:50:39

前言

​ 一些技术或者功能的使用,经常是需要翻阅多个文档才能得到想要的答案。故整理成文档,一条线下来从基础概念到简单使用,方便有需要的人查阅。

​ 首先会展示 目标(效果) 来让你了解该篇内容要达到什么样的使用情况,其次会告诉你通过什么样的过程达到该 目标 ,最后会整理过程中遇到的 常见问题 及解决方法,也欢迎各位能把遇到的问题和解决方案私信让我补充上去,感谢!

1. 基础概念(必须了解,已了解的可直接跳过)

1.1 什么是消息推送?

如同微信收到未读消息后会在通知栏显示,该条消息便是微信APP的消息推送。多用于有需要从服务端主动发出消息提醒到客户端的场景。

1.2 uniPush & 个推 & 厂商推送

个推unipush厂商推送简介个推提供移动端消息推送服务uniapp集成了个推的各个功能,更好地与uniapp结合各个厂商上也有自己的推送,比如华为、小米,相当于使用厂商自带的推送服务特点需要收费相当于收费版的个推免费给开发uniapp的人使用免费,但有的厂商有使用条件,比如vivo需要上架应用市场后才可开通

当APP在线时,走个推通道;APP离线时,走厂商推送。

结论

当我们使用 uni-app 开发应用时,使用 uni-push 是最方便的,如下:

unipush 拥有个推的收费功能集成了个推和厂商推送两种推送方式,会自动根据判定APP是否在线,来决定采用哪种方式推送,以保证推送消息的送达率。尽管使用 unipush,但服务端需使用的文档参考,仍然是个推官网的文档。

1.3 通知消息 & 透传消息

1)通知消息

官方 封装 了消息模板、以及客户端点击消息后的事件,若只需要简单地发出消息推送,不处理复杂的点击后的逻辑,使用通知消息即可。

2)透传消息

完全 可自定义 模板及点击消息后事件的消息,若需要处理自定义的点击后的逻辑,使用透传消息更佳。

1.4 个推流程

以cid个推方式为例

1)注册cid

手机启动APP获取手机cid标识登录成功后将cid发送给服务端服务端保存cid并与用户关联

2)服务端推送消息

服务端根据业务找到需要推消息的用户将消息以透传或通知消息发出客户端收到提示

3)客户端接收消息(以透传消息为例)

客户端弹出消息点击消息拉起APP根据透传逻辑处理(正常是打开某个对应的页面)

2. 目标(本文仅以安卓为例)

我们本次个推要达成的目标是:

能够通过 uniPush开发者中心 uniPush官方网站的个推服务,向手机发送推送,如下两图所示:

3. 过程

3.1 开通 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

3.2 注册厂商推送

上一步开通了 uniPush 之后,便可以配置厂商推送设置,用于接收离线消息用,如下图,可打开对应厂家的开发者后台,通用注册步骤如下:

1)打开对应厂商开发者后台

2)注册开发者账号(大部分需要上传个人身份证及真人照,特殊的只能注册企业账号,需要企业的营业执照等资料)

3)提交审核

4)审核通过后,可进入开发者后台查看对应 App 的 AppID、AppKey 等内容,复制并填写到 uniPush 的厂商推送设置中

3.3 配置手机权限

在 uniApp 项目中,进入 manifest.json 源代码视图,如下权限是必须配置的手机权限,来保证个推消息推送的成功率

(1)网络连接(必选)

(3)查看网络状态,sdk重连机制等需要使用(必选)

(5)开机自启动权限,提升sdk活跃,保障触达(必选)

(7)震动权限(使用通知功能必选)

3.4 前端处理逻辑

前端处理中,分为两部分:获取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 中编写如下逻辑

先重定向到首页,再跳转到特定的页面,符合日常使用逻辑;若直接跳转到特定页面,用户一旦点击返回,由于页面栈中没有其他页面,便容易出现预料之外的错误。

3.5 发送cid个推测试

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)点击确认来发送透传消息,即可在手机端上查看到开头所说的消息推送

4. 常见问题

4.1 注册华为厂商通道注意事项

1)需要上线在华为市场下载【实测不一定需要】

2)需要华为手机安装华为移动服务

3)华为推送的 SHA256 码未配置:华为推送平台-项目设置-常规-应用,将前面我们 keytool 生成的 SHA256 复制进去即可

4.2 个推是否会有次数限制?

就目前所知,vivo 一个设备一天只能收到5条离线消息,其他推测是没有次数限制。

4.3 keytool 申请 Android 应用签名时报错提示拒绝访问

见 3.1 ,问题2

4.4 服务端调用个推接口时,报错20001参数不合法

1)解决办法

服务端调用所要用到的AppID、AppKey 等应用配置信息应该使用 unipush开发者中心 中的,而非个推网站中注册的应用信息,如下图所示

4.5 为什么收不到消息的离线推送?

注意!! 只有打了正式包才可以收到离线推送,打自定义基座不行(华为是可以在自定义基座的情况下实现离线推送的)

    【攻略】【活動】暝視尋靈織卷|原神 5.2版本活動紀錄(完更) @原神 哈啦板
    保龄球由盛到衰的三大谜团:一夜之间火遍全国,一夜之间悄然谢幕

    Copyright © 2022 摩洛哥世界杯_直播世界杯决赛 - dgaida.com All Rights Reserved.