
wap2app下拉刷新
> 支持局部刷新
> 全局刷新
原文地址wap2app下拉刷新
> 支持局部刷新
> 全局刷新
原文地址wap2app下拉刷新

如何优雅的接入邮件、短信及消息推送
在日常开发中,我们经常会需要发送邮件、短信、APP消息及任务(报警)通知等内容,按照现有开发规则,每个业务平台在需要发送此类消息时都需要重新对接一次相关平台,不仅会造成业务系统臃肿,而且费时费力,事倍功半,严重影响开发效率。
为了解决这个问题,我们特别开发了“开发者平台”,将程序开发中常用的功能进行整合,对外提供统一API,只需十几行代码即可实现相应功能,具体功能说明可参见下表:
功能 | 已对接平台 | 是否有API | 其他说明 |
---|---|---|---|
智能验证码 | 自研 | / | 支持效果统计及数据分析 |
短链接(二维活码) | 自研 | 暂无 | 支持效果统计及数据分析;可修改短链接的原始链接 |
邮件发送 | SMTP服务 | 有 | 支持邮件模板、支持效果统计及数据分析 |
短信发送 | 阿里云、腾讯云、华为云 | 有 | 设定好邮件模板后可一键切换平台;不同短信模板可使用不同平台 |
APP消息推送 | 个推(UniPush)、友盟推送、极光推送 | 有 | 无 |
任务(报警)通知推送 | 短信、邮件、企业微信群机器人、企业微信应用消息、钉钉群机器人 | 有 | 支持文字、图文、markdown等多种形式 |
广告管理 | 自定义图文广告 | / | 支持效果统计及数据分析;支持轮播、弹窗广告形式;同一页面可添加多个广告 |
更多实用功能开发中,不定期更新。
本平台可直接注册使用,同时支持私有化部署,如有疑问可咨询平台客服
平台地址:www.21ds.cn
在日常开发中,我们经常会需要发送邮件、短信、APP消息及任务(报警)通知等内容,按照现有开发规则,每个业务平台在需要发送此类消息时都需要重新对接一次相关平台,不仅会造成业务系统臃肿,而且费时费力,事倍功半,严重影响开发效率。
为了解决这个问题,我们特别开发了“开发者平台”,将程序开发中常用的功能进行整合,对外提供统一API,只需十几行代码即可实现相应功能,具体功能说明可参见下表:
功能 | 已对接平台 | 是否有API | 其他说明 |
---|---|---|---|
智能验证码 | 自研 | / | 支持效果统计及数据分析 |
短链接(二维活码) | 自研 | 暂无 | 支持效果统计及数据分析;可修改短链接的原始链接 |
邮件发送 | SMTP服务 | 有 | 支持邮件模板、支持效果统计及数据分析 |
短信发送 | 阿里云、腾讯云、华为云 | 有 | 设定好邮件模板后可一键切换平台;不同短信模板可使用不同平台 |
APP消息推送 | 个推(UniPush)、友盟推送、极光推送 | 有 | 无 |
任务(报警)通知推送 | 短信、邮件、企业微信群机器人、企业微信应用消息、钉钉群机器人 | 有 | 支持文字、图文、markdown等多种形式 |
广告管理 | 自定义图文广告 | / | 支持效果统计及数据分析;支持轮播、弹窗广告形式;同一页面可添加多个广告 |
更多实用功能开发中,不定期更新。
本平台可直接注册使用,同时支持私有化部署,如有疑问可咨询平台客服
平台地址:www.21ds.cn
收起阅读 »
打包ios应用所需的证书和证书profile文件的创建方法
苹果官方提供的方法,都需要mac电脑去完成,而很多使用H5开发的朋友们,只有windows电脑,没有mac电脑,那么有没有办法创建苹果的打包证书和上架苹果应用呢?
是可以的,我们这篇文章教会大家使用windows电脑创建ios证书:
一、首先,你需要一个苹果开发者账号,假如你还没有苹果开发者账号,你可以参考这篇文章先开通苹果开发者账号:
https://www.yunedit.com/xueyuan/jx/applereg
二、有了苹果开发者账号后,就可以登陆苹果开发者中心,进入Certificates菜单,开始生成证书:

三、创建过程中,选择ios distribution ad hoc and app store,类型,无论是真机测试还是上架,都是选择这个类型,千万别选了apple类型或dev类型。
四、创建的过程中,它会要求我们上传一个csr文件,如下图:
五、这个csr文件原本是需要通过mac电脑去生成,假如没有mac电脑,我们可以使用香蕉云编去生成:
https://www.yunedit.com
登录香蕉云编后,进入到创建ios证书的界面,创建csr文件,创建完后把这个csr文件下载到你本地的电脑上,如下图:
六、回到苹果开发者中心,上传这个csr文件,即可生成cer证书,然后将这个cer证书下载到你本地电脑上。
七、回到香蕉云编,上传这个cer文件,即可使用生成p12证书的功能,生成p12打包证书。
好了p12证书生成完了,那么证书profile文件又如何生成呢?
下面的步骤是生成Profile的步骤:
1、登录苹果开发者中心控制台,点击Identifiers,点击蓝色加号,创建一个appid,这个appid要跟你在hbuilder打包用的包名一致,假如已经创建,则跳过这一步。
2、点击profiles,开始创建描述文件,创建的时候选择app store类型,假如你选择的是ad hoc类型,则看第四步。
3、创建的过程中会要求我们选择第一步创建的appid:
4、假如你创建的是ad hoc类型的profile(假如你创建的是app store类型的profile则不需要这一步),则创建过程中,还需要提供测试手机的udid,你可以使用你的iphone手机,打开香蕉云编右上角获取手机udid的工具,获取手机的udid。
好了,就这么简单,就可以成功创建证书了。
苹果官方提供的方法,都需要mac电脑去完成,而很多使用H5开发的朋友们,只有windows电脑,没有mac电脑,那么有没有办法创建苹果的打包证书和上架苹果应用呢?
是可以的,我们这篇文章教会大家使用windows电脑创建ios证书:
一、首先,你需要一个苹果开发者账号,假如你还没有苹果开发者账号,你可以参考这篇文章先开通苹果开发者账号:
https://www.yunedit.com/xueyuan/jx/applereg
二、有了苹果开发者账号后,就可以登陆苹果开发者中心,进入Certificates菜单,开始生成证书:
三、创建过程中,选择ios distribution ad hoc and app store,类型,无论是真机测试还是上架,都是选择这个类型,千万别选了apple类型或dev类型。
四、创建的过程中,它会要求我们上传一个csr文件,如下图:
五、这个csr文件原本是需要通过mac电脑去生成,假如没有mac电脑,我们可以使用香蕉云编去生成:
https://www.yunedit.com
登录香蕉云编后,进入到创建ios证书的界面,创建csr文件,创建完后把这个csr文件下载到你本地的电脑上,如下图:
六、回到苹果开发者中心,上传这个csr文件,即可生成cer证书,然后将这个cer证书下载到你本地电脑上。
七、回到香蕉云编,上传这个cer文件,即可使用生成p12证书的功能,生成p12打包证书。
好了p12证书生成完了,那么证书profile文件又如何生成呢?
下面的步骤是生成Profile的步骤:
1、登录苹果开发者中心控制台,点击Identifiers,点击蓝色加号,创建一个appid,这个appid要跟你在hbuilder打包用的包名一致,假如已经创建,则跳过这一步。
2、点击profiles,开始创建描述文件,创建的时候选择app store类型,假如你选择的是ad hoc类型,则看第四步。
3、创建的过程中会要求我们选择第一步创建的appid:
4、假如你创建的是ad hoc类型的profile(假如你创建的是app store类型的profile则不需要这一步),则创建过程中,还需要提供测试手机的udid,你可以使用你的iphone手机,打开香蕉云编右上角获取手机udid的工具,获取手机的udid。
好了,就这么简单,就可以成功创建证书了。
收起阅读 »
编译报 node-sass-china\vendor\win32-x64-64\binding.node缺失

ios上架苹果app审核驳回被拒Guideline 4.3 - Design
提交app到苹果被拒驳回了4.3,有需要解决的可以联系电话微:18953671207
Guideline 4.3 - Design
We noticed that your app provides the same feature set as other apps submitted to the App Store.
Specifically, this app appears to be similar to another app previously submitted under a terminated Apple Developer Program account.
The next submission of this app may require a longer review time.
Next Steps
- Review the Design section of the App Store Review Guidelines.
- Ensure your app is compliant with all sections of the App Store Review Guidelines and the Terms & Conditions of the Apple Developer Program.
- Once your app is fully compliant, resubmit your app for review.
When creating multiple apps where content is the only varying element, you should offer a single app to deliver differing content to customers. If you would like to offer this content for purchase, it would be appropriate to use the in-app purchase API.
Alternatively, you may consider creating a web app, which looks and behaves similar to a native app when the customer adds it to their Home screen. Refer to the Configuring Web Applications section of the Safari Web Content Guide for more information.
Submitting apps designed to mislead or harm customers or evade the review process may result in the termination of your Apple Developer Program account. Review the Terms & Conditions of the Apple Developer Program to learn more about our policies regarding termination.
iOS App 1.1.1App 版本
拒绝原因:
4.3.0 Design: Spam
提交app到苹果被拒驳回了4.3,有需要解决的可以联系电话微:18953671207
Guideline 4.3 - Design
We noticed that your app provides the same feature set as other apps submitted to the App Store.
Specifically, this app appears to be similar to another app previously submitted under a terminated Apple Developer Program account.
The next submission of this app may require a longer review time.
Next Steps
- Review the Design section of the App Store Review Guidelines.
- Ensure your app is compliant with all sections of the App Store Review Guidelines and the Terms & Conditions of the Apple Developer Program.
- Once your app is fully compliant, resubmit your app for review.
When creating multiple apps where content is the only varying element, you should offer a single app to deliver differing content to customers. If you would like to offer this content for purchase, it would be appropriate to use the in-app purchase API.
Alternatively, you may consider creating a web app, which looks and behaves similar to a native app when the customer adds it to their Home screen. Refer to the Configuring Web Applications section of the Safari Web Content Guide for more information.
Submitting apps designed to mislead or harm customers or evade the review process may result in the termination of your Apple Developer Program account. Review the Terms & Conditions of the Apple Developer Program to learn more about our policies regarding termination.
iOS App 1.1.1App 版本
拒绝原因:
4.3.0 Design: Spam

关于uni-resize-sensor组件对谷歌浏览器打印引发的问题
在源码src\core\view\components\resize-sensor\index.vue里,
uni-resize-sensor > div:first-child > div {
width: 100000px;
height: 100000px;
}
uni-resize-sensor > div:last-child > div {
width: 200%;
height: 200%;
}
这里的两个高度导致了谷歌浏览器在打印时尾部多处很多空白页
在源码src\core\view\components\resize-sensor\index.vue里,
uni-resize-sensor > div:first-child > div {
width: 100000px;
height: 100000px;
}
uni-resize-sensor > div:last-child > div {
width: 200%;
height: 200%;
}
这里的两个高度导致了谷歌浏览器在打印时尾部多处很多空白页

蓝牙通讯设置最大传输单元失效,每次只能传输20个字节。uni.setBLEMTU
在连接蓝牙成功后,延迟一秒设置蓝牙传输单元
setTimeout(function(){
uni.setBLEMTU({
deviceId:that.deviceId,
mtu:30,
success(res) {
console.log('设置成功', res)
},
fail(err) {
console.log('设置失败', err)
}
})
},1000)
在连接蓝牙成功后,延迟一秒设置蓝牙传输单元
setTimeout(function(){
uni.setBLEMTU({
deviceId:that.deviceId,
mtu:30,
success(res) {
console.log('设置成功', res)
},
fail(err) {
console.log('设置失败', err)
}
})
},1000)
收起阅读 »

输入法app开发(付费开发)
使用uni-app 框架开发一个输入法app,
能开发的联系微信号:majia755;
价格详谈
使用uni-app 框架开发一个输入法app,
能开发的联系微信号:majia755;
价格详谈

定时器 编号问题
let end = setInterval(function () { }, 10000);
console.log(end);
for (let i = 1; i <= end; i++) {
clearInterval(i);
}
今天清理定时器的时候,发现一个东西。
放到app.vue里的onLaunch 里,预期返回值应该是 1 的,实际上每次都不一样。
不知道是不是uniapp对定时器进行二次封装了,看文档说返回的是id
而且文档写的也有问题 注意事项中的 无需 应该是 需要
let end = setInterval(function () { }, 10000);
console.log(end);
for (let i = 1; i <= end; i++) {
clearInterval(i);
}
今天清理定时器的时候,发现一个东西。
放到app.vue里的onLaunch 里,预期返回值应该是 1 的,实际上每次都不一样。
不知道是不是uniapp对定时器进行二次封装了,看文档说返回的是id
而且文档写的也有问题 注意事项中的 无需 应该是 需要

发行模式下 发布H5模式 报 API setLocale is not yet implemented
在 main.js 里面 写一段 console.log(uni.setLocale) ,这样就可以了
在 main.js 里面 写一段 console.log(uni.setLocale) ,这样就可以了

uni-push2.0 常见问题
uni-push2.0 常见问题
一、基础问题
1.uni-push2.0 和 uni-push1.0 有什么区别
uni-push1.0(已不维护更新)
:支持 app(Android 和 iOS),不支持小程序端、web 端,可以用个推服务端RestAPI V2推送。
uni-push2.0(推荐使用)
:支持 app(Android 、 iOS、纯血鸿蒙(HarmonyOS Next))、小程序端、web 端。服务端不支持用个推 api 推送,只能用 dcloud 提供的云函数推送。详见 uni-push 2.0 快速接入指南 。
2.uni-push2.0 应用信息的 MasterSecret 怎么没了
uniCloud 的 服务端(云函数)推送 推送免鉴权,不需要 MasterSecret。详情:服务端推送消息 。
3.uni-push2.0 中 java、php、python 之类的语言怎么用,必须要用云函数吗
必须用云函数。在 uniCloud 的云函数中,加载扩展库 uni-cloud-push
,直接调用相关 API,无需额外的服务端配置。而传统服务器开发者需要把这个 云函数URL化 后变成 http 接口,再由原来的 php 或 java 代码调用这个 http 接口。
4.云函数收费问题
阿里云版 uniCloud 商业版会收费,详情请查看 免费版和商用版
5.自定义铃声
参考文档:https://ext.dcloud.net.cn/plugin?id=7482&from_wecom=1
对于离线的自定义铃声,必须申请自分类权益(小米&华为),oppo、vivo不支持自定义铃声
6.设置角标问题
(仅支持华为、荣耀、iOS 设置角标,其它品牌又厂商默认控制)
android、iOS设置角标: https://www.html5plus.org/doc/zh_cn/runtime.html?from_wecom=1#plus.runtime.setBadgeNumber
鸿蒙((HarmonyOS Next))设置角标: uni.setAppBadgeNumber(n: number)
云函数api增加入参: https://uniapp.dcloud.net.cn/uniCloud/uni-cloud-push/api.html#uni-cloud-push
"options": {
"HW": {
"/message/android/notification/badge/class": "io.dcloud.PandoraEntry",
//add_num 为离线推送时,设置的华为角标,1表示在当前的角标数上+1
"/message/android/notification/badge/add_num": 1
},
"HO": {
"/android/notification/badge/addNum": 1,
//add_num 为离线推送时,设置的荣耀角标,1表示在当前的角标数上+1
"/android/notification/badge/badgeClass": "io.dcloud.PandoraEntry"
}
}
7.是否需要云打包?
首次集成push:必须云打包。
修改 android 多厂商参数:必须云打包。
修改 iOS 推送证书:不需要云打包。
8.推送频次限制
推送条数限制:没有限制
单推(to Single)频次限制:没有限制
批量推(to List)频次限制:200万次/天
群推(to APP)频次限制:100次/天,每分钟不能超过5次
9.CID什么情况下会变化
- 若安卓用户超过90天、 iOS用户超过一年,CID 一直没有登录请求(CID 没有与个推服务端建立长链接)。则 CID 会失效,之后再启动会重新生成一个CID;
- 如果应用没有获取sd卡权限,卸载重装/清除缓存,CID会变(CID信息会写入sd卡)。
- 个推Appid参数、应用的包名、苹果Bundleid的修改。
- 苹果手机进行了越狱或系统还原。
二、Android 消息推送问题
安卓厂商离线推送是否要求上架应用商店?
- 目前华为、荣耀、魅族、oppo(测试环境)不要求上架应用商店;vivo 、小米、oppo(正式环境)必须上架应用商店后才可使用离线厂商推送。
安卓消息推送流程说明
- 默认情况下:
- 当CID在线(即app在前台打开运行)时,消息通过个推通道下发到客户端。
- 当CID离线(即app在后台、锁屏、进程关闭)时,有开启对应厂商离线功能的,消息将通过个推侧请求对应厂商侧的服务端,实际的消息是经由厂商服务器下发至客户端。对于没有开启对应厂商功能的,消息将存在个推的离线库中,等待CID在线,再通过个推通道下发到客户端。
- 注意:安卓的消息推送,走了厂商通道的消息就不会再通过个推通道推送至客户端,反之亦是如此,即消息只会推送一次
安卓在线收不到通知
- 检查推送的 cid,是否是当前这个测试设备的。如果卸载重装,cid会变,需要用最新的 cid推。
- 检查手机上该 app的通知栏权限是否正常开启了,部分手机可能默认是关闭的。
- 当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
- 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API uni.createPushMessage手动创建通知栏消息。
- 服务端执行推送时,传递参数
force_notification:true
,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
安卓离线收不到通知
步骤一:确认CID是否绑定厂商token
在【Uni Push】-【配置管理】-【故障排查】-【 检测CID的状态及信息:】中输入CID查询,看是否会返回厂商token(device token)。
若返回了具体厂商token,请按以下中各厂商部分说明排查。若查询CID未返回token,请看下方步骤二
目前各厂商对消息有额度限制,例如华为单设备单应用每天只能收到 2 条营销类消息,超过后则当天收不到离线。详见 厂商通道限额&QPS说明 ,如果要提升额度,可以参考限额说明文档,向厂商申请系统、私信消息。
-
华为
- 标题长度限制40个字,内容长度限制1024个字。
- emui10的华为手机,检查手机通知权限设置,将【营销通知】的权限也打开,不要默认静默,静默的话是需要下拉通知栏才能看到。
- 手机通知栏消息是否有存满,清除已存的通知栏消息看下新的消息是否能展示。
- 华为【 资讯营销】,一个设备一天只能收到2条离线消息。
-
荣耀
- 荣耀【 资讯营销】,一个设备一天只能收到2条离线消息。
-
VIVO
- 标题长度限制20个字,内容长度限制50个字。
- 检查通知权限,vivo机型默认关闭
- 1个自然日内相同文案的运营消息给同个设备发,vivo会在客户端做去重处理,导致消息不展示
- vivo要求:通知文案中不能带 “包含测试、test字符”、“纯数字”、“纯表情”、“符号”或者“符号+数
字”、“表情+数字”、“表情+符号” - vivo需要上架至应用市场才能使用离线厂商推送。
- vivo【 公信消息】,一个设备一天只能收到2条离线消息。
自2025年1月17日之后,通过非官方软件商店下载的应用,无法推送 OPPO 公信消息(建议开发时推送测试消息,参考下方:如何给华为、荣耀、vivo、oppo厂商发送测试消息)
-
小米
- 标题长度限制50个字,内容长度限制128个字。
- 检查手机通知权限设置,小米有不重要通知功能,部分消息可能会存在通知栏不重要通知里
- 小米需要上架至应用市场才能使用离线厂商推送。
- 小米【公信消息】,一个设备一天只能收到5条离线消息。
- 给小米设备推送消息时,必须要设置消息分类(/extra.channel_id),否则会被小米拦截。如何设置消息分类,详见:厂商通道限额&QPS说明
-
OPPO
- 标题长度限制32个字,内容长度限制200个字。
- 检查手机通知权限是否打开,oppo是默认关闭的,将通知权限下的【Default】通道权限也打开。
- 手机系统时间是否正常
- oppo【 公信消息】,一个设备一天只能收到2条离线消息。
自2024年7月29日之后,通过非官方软件商店下载的应用,无法推送 OPPO 公信消息(建议开发时推送测试消息,参考下方:如何给华为、荣耀、vivo、oppo厂商发送测试消息)
-
魅族
- 标题长度限制32个字,内容长度限制100个字。
- 检查消息是否存入了魅族手机右上角【魅族消息盒子】中。
- 清除缓存:手机【系统设置】-【应用管理】-【所有应用】点击右上角【显示系统服务应用】找到【推送服务】和【您自己的 App】,如下图,分别进行“清除数据”,然后重启手机。
步骤二:查询CID未返回token,调试查询厂商code码
-
对应厂商平台上的推送服务状态是否是开启状态。
-
在Dcloud后台【Uni Push】-【厂商推送设置】中保存好厂商参数,并用自有证书提交云打包,且需要打正式包,再获取cid去查询是否有返回。
厂商错误码调试方法如下:
-
需要先安装调试环境,参考安装教程
-
手机连接电脑,手机需开启开发者调试模式,此时不用打开app
-
Windows执行示例:如下图,回车执行:adb logcat | findstr "Assist_" 后打开app
-
Mac执行示例:如下图,回车执行:adb logcat | grep "Assist_" 后打开app
-
此时注意查看返回的厂商Code码,如上图中HW的错误码为907135702,点击下方链接搜索查询官方描述。
-
若未返回任何带有厂商标识的日志,说明厂商推送服务还未置于您app应用内,请重新检查厂商服务开通、配置、云打包相关步骤。
华为(包含荣耀)机型需要额外检查:
- 需要在华为开发者后台配置正确的 sha256 指纹证书
- 云打包用自有证书打正式签名包
- 华为开发者后台包名跟客户端包名需要保持一致
- 厂商推送设置-华为厂商,必须上传agconnect-services.json
- 在华为平台是否开通了华为推送服务
- 保存完参数,需要重新提交云端打包
如何给华为、荣耀、vivo、oppo厂商发送测试消息
Android 厂商有离线推送的额度限制,基本都限制单设备单应用每天只能收到 2 条普通消息;如果要提升额度,可以自己向厂商申请消息分类。详见:厂商通道限额&QPS说明
开发测试阶段额度不足时,可以发送测试消息,目前仅华为、荣耀、vivo、oppo 支持下发测试消息。发送测试消息方式如下:
-
若调用服务端 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 开放平台 、 oppo开放平台 录入测试用户(regid 对应个推cid 绑定的 device token,可以从个推后台的“故障排查”中查询 cid 信息获取)。
华为、荣耀不需要录入测试用户。华为、荣耀、vivo 需要在options内添加测试参数;oppo只需要添加测试设备,不需要options内加参数。
-
若从后台页面推送,填写红框附加参数:
”华为“ 、”/message/android/target_user_type”、”数字“ 、”1“(注意 1 是数字不是字符串)
”荣耀“ 、”/android/targetUserType”、”数字“ 、”1“(注意 1 是数字不是字符串)
”vivo“ 、”/pushMode”、”数字“ 、”1“(注意 1 是数字不是字符串)
三、iOS消息推送问题
iOS消息推送流程说明
- 当CID在线(即app在前台打开运行)时,消息通过个推通道下发到客户端。默认不处理的话是没有任何展示的,透传消息个推只负责传递。
- 当CID离线(即app在后台、锁屏)时,消息将通过个推侧请求对应厂商侧的服务端。
- 注意:与安卓消息流程不同的是,Ios走了厂商离线通道,在消息有效期内,app打开在前台时,透传内容还将通过个推通道传递给客户端; 此时可在客户端透传回调中的参数PushMessage对象中获取aps属性值来判断是否是APNs下发的消息 ,参考推送开发指南
iOS在线收不到消息
当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
- 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API uni.createPushMessage手动创建通知栏消息。
- 服务端执行推送时,传递参数
force_notification:true
,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
iOS离线收不到消息
步骤一:确认CID是否绑定苹果devicetoken
在【Uni Push】-【配置管理】-【故障排查】-【 检测CID的状态及信息:】中输入CID查询,看是否会返回苹果devicetoken。
若返回了具体苹果devicetoken,请按以下说明排查,若还未解决,提供CID和任务ID给个推技术支持
注意:返回的devicetoken后面是否带着【developement】字样;若带着,则说明客户端环境是属于苹果的开发环境,苹果推送对开发环境的支持不稳定,建议使用正式环境去进行推送测试。
步骤二:查询CID未返回devicetoken
- 切换手机连接网络,卸载重装试下。
- 使用其他手机安装测试。
- 重新进行云打包。
证书测试一下返回无效、连接报错
- 证书环境问题:通用证书支持开发与正式环境推送;开发证书只支持开发环境推送。
- iOS证书的生成,请参考 证书生成文档。
四、错误提示问题
1、Hbuliderx打包报错,提示包名找不到
查询一下自己上传的service.json文件,和打包时候选择的Android包名是否一致,如果不一致需要修改为一致信息
2、ios新建的证书会报证书环境错误
需要正确上传推送证书
注意:
打包的时候用的开发者证书 后台ios配置需要配的是推送证书
下载ios证书必须是ios的会员,非会员是不能下载的
3、推送时提示:target user is invalid
Unipush推送出现AppidError或者target user is invalid,一般都是您使用的CID,直接通过未进行云打包的自定义基座包获取的,不属于您自己应用,属于Dcloud官方的测试app应用。
需要选择自己的应用,云打包后(自定义基座包或者正式包都行),再获取 cid 。
4、unipush 打包提示应用appid未关联当前服务空间
检查填写的app_id信息,要用unipush 的UNI开头的那个id
5、厂商推送设置配置提示‘验证错误’
- 原因是填写了错误的厂商参数,需要去对应的 厂商平台 核实参数是否一致,且注意填写时不能包含空格。
- 如果确认参数完全一致,可以更换浏览器后再进行填写保存,推荐使用 Google 浏览器。
6、unipush点击运行到基座 毫无反应,弹窗也都没有
点顶部菜单栏帮助-查看运行日志看下:
这种一般都是真机调试版本不对,对应调试的版本和插件版本不一致,当前运行调试的版本没有这个api。检查一下插件的版本和真机版本,更新真机版本解决问题。
7、获取cid提示no push platform报错问题:
没有unipush节点,检查插件工具manifest源码视图里面modules的push配置或者sdkConfigs配置。
8、uniapp在app.vue中接收在线消息时,ios机型点击消息闪退
receive 回调里判断下msg.type是否为空,可能是空指针异常导致闪退。
9、url化后调用提示“应用appId:AppId的unipush服务,未关联当前服务空间
服务空间,unipush那需要关联,项目里也需要关联
10、报错提示 mongo_cell_decision_not_found
注意:扩展库依赖 3 张 opendb 表:opendb-tempdata,opendb-device,uni-id-device。公测版 uniCloud,执行扩展库会自动创建。如果你使用的是 uniCloud 正式版需要自己在 uniCloud 的 web控制台 创建这3张表。
创表路径:
11、获取cid失败,提示:getPushClientId: fail uniPush is not enabled
NVUE项目不行,需要去掉纯nvue选框 https://ask.dcloud.net.cn/question/152548
12、调用报错提示:duplicate message content 或者 push app frequency exceeded
如果推送时不传入 cid,则发送的是全推(给所有用户推)消息。全推每分钟不能超过5次,10分钟内不能推重复消息体 。
通过返回值中的 taskid 几个首字母可以判断是什么推送。RASS:单推、 RASL:批量推、 RASA:全推
请仔细检查云函数是否正确传了 cid
13、后台页面推送时,显示预计人数:0人
原因:没有进行云打包,或者云打包时,未勾选“离线推送”。打的包是小程序 SDK,仅支持发在线透传消息,不会有通知栏展示。
如果是app用户,请把“离线推送”勾选上,云打包再获取cid。 uni-push 2.0 快速接入指南
uni-push2.0 常见问题
一、基础问题
1.uni-push2.0 和 uni-push1.0 有什么区别
uni-push1.0(已不维护更新)
:支持 app(Android 和 iOS),不支持小程序端、web 端,可以用个推服务端RestAPI V2推送。
uni-push2.0(推荐使用)
:支持 app(Android 、 iOS、纯血鸿蒙(HarmonyOS Next))、小程序端、web 端。服务端不支持用个推 api 推送,只能用 dcloud 提供的云函数推送。详见 uni-push 2.0 快速接入指南 。
2.uni-push2.0 应用信息的 MasterSecret 怎么没了
uniCloud 的 服务端(云函数)推送 推送免鉴权,不需要 MasterSecret。详情:服务端推送消息 。
3.uni-push2.0 中 java、php、python 之类的语言怎么用,必须要用云函数吗
必须用云函数。在 uniCloud 的云函数中,加载扩展库 uni-cloud-push
,直接调用相关 API,无需额外的服务端配置。而传统服务器开发者需要把这个 云函数URL化 后变成 http 接口,再由原来的 php 或 java 代码调用这个 http 接口。
4.云函数收费问题
阿里云版 uniCloud 商业版会收费,详情请查看 免费版和商用版
5.自定义铃声
参考文档:https://ext.dcloud.net.cn/plugin?id=7482&from_wecom=1
对于离线的自定义铃声,必须申请自分类权益(小米&华为),oppo、vivo不支持自定义铃声
6.设置角标问题
(仅支持华为、荣耀、iOS 设置角标,其它品牌又厂商默认控制)
android、iOS设置角标: https://www.html5plus.org/doc/zh_cn/runtime.html?from_wecom=1#plus.runtime.setBadgeNumber
鸿蒙((HarmonyOS Next))设置角标: uni.setAppBadgeNumber(n: number)
云函数api增加入参: https://uniapp.dcloud.net.cn/uniCloud/uni-cloud-push/api.html#uni-cloud-push
"options": {
"HW": {
"/message/android/notification/badge/class": "io.dcloud.PandoraEntry",
//add_num 为离线推送时,设置的华为角标,1表示在当前的角标数上+1
"/message/android/notification/badge/add_num": 1
},
"HO": {
"/android/notification/badge/addNum": 1,
//add_num 为离线推送时,设置的荣耀角标,1表示在当前的角标数上+1
"/android/notification/badge/badgeClass": "io.dcloud.PandoraEntry"
}
}
7.是否需要云打包?
首次集成push:必须云打包。
修改 android 多厂商参数:必须云打包。
修改 iOS 推送证书:不需要云打包。
8.推送频次限制
推送条数限制:没有限制
单推(to Single)频次限制:没有限制
批量推(to List)频次限制:200万次/天
群推(to APP)频次限制:100次/天,每分钟不能超过5次
9.CID什么情况下会变化
- 若安卓用户超过90天、 iOS用户超过一年,CID 一直没有登录请求(CID 没有与个推服务端建立长链接)。则 CID 会失效,之后再启动会重新生成一个CID;
- 如果应用没有获取sd卡权限,卸载重装/清除缓存,CID会变(CID信息会写入sd卡)。
- 个推Appid参数、应用的包名、苹果Bundleid的修改。
- 苹果手机进行了越狱或系统还原。
二、Android 消息推送问题
安卓厂商离线推送是否要求上架应用商店?
- 目前华为、荣耀、魅族、oppo(测试环境)不要求上架应用商店;vivo 、小米、oppo(正式环境)必须上架应用商店后才可使用离线厂商推送。
安卓消息推送流程说明
- 默认情况下:
- 当CID在线(即app在前台打开运行)时,消息通过个推通道下发到客户端。
- 当CID离线(即app在后台、锁屏、进程关闭)时,有开启对应厂商离线功能的,消息将通过个推侧请求对应厂商侧的服务端,实际的消息是经由厂商服务器下发至客户端。对于没有开启对应厂商功能的,消息将存在个推的离线库中,等待CID在线,再通过个推通道下发到客户端。
- 注意:安卓的消息推送,走了厂商通道的消息就不会再通过个推通道推送至客户端,反之亦是如此,即消息只会推送一次
安卓在线收不到通知
- 检查推送的 cid,是否是当前这个测试设备的。如果卸载重装,cid会变,需要用最新的 cid推。
- 检查手机上该 app的通知栏权限是否正常开启了,部分手机可能默认是关闭的。
- 当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
- 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API uni.createPushMessage手动创建通知栏消息。
- 服务端执行推送时,传递参数
force_notification:true
,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
安卓离线收不到通知
步骤一:确认CID是否绑定厂商token
在【Uni Push】-【配置管理】-【故障排查】-【 检测CID的状态及信息:】中输入CID查询,看是否会返回厂商token(device token)。
若返回了具体厂商token,请按以下中各厂商部分说明排查。若查询CID未返回token,请看下方步骤二
目前各厂商对消息有额度限制,例如华为单设备单应用每天只能收到 2 条营销类消息,超过后则当天收不到离线。详见 厂商通道限额&QPS说明 ,如果要提升额度,可以参考限额说明文档,向厂商申请系统、私信消息。
-
华为
- 标题长度限制40个字,内容长度限制1024个字。
- emui10的华为手机,检查手机通知权限设置,将【营销通知】的权限也打开,不要默认静默,静默的话是需要下拉通知栏才能看到。
- 手机通知栏消息是否有存满,清除已存的通知栏消息看下新的消息是否能展示。
- 华为【 资讯营销】,一个设备一天只能收到2条离线消息。
-
荣耀
- 荣耀【 资讯营销】,一个设备一天只能收到2条离线消息。
-
VIVO
- 标题长度限制20个字,内容长度限制50个字。
- 检查通知权限,vivo机型默认关闭
- 1个自然日内相同文案的运营消息给同个设备发,vivo会在客户端做去重处理,导致消息不展示
- vivo要求:通知文案中不能带 “包含测试、test字符”、“纯数字”、“纯表情”、“符号”或者“符号+数
字”、“表情+数字”、“表情+符号” - vivo需要上架至应用市场才能使用离线厂商推送。
- vivo【 公信消息】,一个设备一天只能收到2条离线消息。
自2025年1月17日之后,通过非官方软件商店下载的应用,无法推送 OPPO 公信消息(建议开发时推送测试消息,参考下方:如何给华为、荣耀、vivo、oppo厂商发送测试消息)
-
小米
- 标题长度限制50个字,内容长度限制128个字。
- 检查手机通知权限设置,小米有不重要通知功能,部分消息可能会存在通知栏不重要通知里
- 小米需要上架至应用市场才能使用离线厂商推送。
- 小米【公信消息】,一个设备一天只能收到5条离线消息。
- 给小米设备推送消息时,必须要设置消息分类(/extra.channel_id),否则会被小米拦截。如何设置消息分类,详见:厂商通道限额&QPS说明
-
OPPO
- 标题长度限制32个字,内容长度限制200个字。
- 检查手机通知权限是否打开,oppo是默认关闭的,将通知权限下的【Default】通道权限也打开。
- 手机系统时间是否正常
- oppo【 公信消息】,一个设备一天只能收到2条离线消息。
自2024年7月29日之后,通过非官方软件商店下载的应用,无法推送 OPPO 公信消息(建议开发时推送测试消息,参考下方:如何给华为、荣耀、vivo、oppo厂商发送测试消息)
-
魅族
- 标题长度限制32个字,内容长度限制100个字。
- 检查消息是否存入了魅族手机右上角【魅族消息盒子】中。
- 清除缓存:手机【系统设置】-【应用管理】-【所有应用】点击右上角【显示系统服务应用】找到【推送服务】和【您自己的 App】,如下图,分别进行“清除数据”,然后重启手机。
步骤二:查询CID未返回token,调试查询厂商code码
-
对应厂商平台上的推送服务状态是否是开启状态。
-
在Dcloud后台【Uni Push】-【厂商推送设置】中保存好厂商参数,并用自有证书提交云打包,且需要打正式包,再获取cid去查询是否有返回。
厂商错误码调试方法如下:
-
需要先安装调试环境,参考安装教程
-
手机连接电脑,手机需开启开发者调试模式,此时不用打开app
-
Windows执行示例:如下图,回车执行:adb logcat | findstr "Assist_" 后打开app
-
Mac执行示例:如下图,回车执行:adb logcat | grep "Assist_" 后打开app
-
此时注意查看返回的厂商Code码,如上图中HW的错误码为907135702,点击下方链接搜索查询官方描述。
-
若未返回任何带有厂商标识的日志,说明厂商推送服务还未置于您app应用内,请重新检查厂商服务开通、配置、云打包相关步骤。
华为(包含荣耀)机型需要额外检查:
- 需要在华为开发者后台配置正确的 sha256 指纹证书
- 云打包用自有证书打正式签名包
- 华为开发者后台包名跟客户端包名需要保持一致
- 厂商推送设置-华为厂商,必须上传agconnect-services.json
- 在华为平台是否开通了华为推送服务
- 保存完参数,需要重新提交云端打包
如何给华为、荣耀、vivo、oppo厂商发送测试消息
Android 厂商有离线推送的额度限制,基本都限制单设备单应用每天只能收到 2 条普通消息;如果要提升额度,可以自己向厂商申请消息分类。详见:厂商通道限额&QPS说明
开发测试阶段额度不足时,可以发送测试消息,目前仅华为、荣耀、vivo、oppo 支持下发测试消息。发送测试消息方式如下:
-
若调用服务端 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 开放平台 、 oppo开放平台 录入测试用户(regid 对应个推cid 绑定的 device token,可以从个推后台的“故障排查”中查询 cid 信息获取)。
华为、荣耀不需要录入测试用户。华为、荣耀、vivo 需要在options内添加测试参数;oppo只需要添加测试设备,不需要options内加参数。
-
若从后台页面推送,填写红框附加参数:
”华为“ 、”/message/android/target_user_type”、”数字“ 、”1“(注意 1 是数字不是字符串)
”荣耀“ 、”/android/targetUserType”、”数字“ 、”1“(注意 1 是数字不是字符串)
”vivo“ 、”/pushMode”、”数字“ 、”1“(注意 1 是数字不是字符串)
三、iOS消息推送问题
iOS消息推送流程说明
- 当CID在线(即app在前台打开运行)时,消息通过个推通道下发到客户端。默认不处理的话是没有任何展示的,透传消息个推只负责传递。
- 当CID离线(即app在后台、锁屏)时,消息将通过个推侧请求对应厂商侧的服务端。
- 注意:与安卓消息流程不同的是,Ios走了厂商离线通道,在消息有效期内,app打开在前台时,透传内容还将通过个推通道传递给客户端; 此时可在客户端透传回调中的参数PushMessage对象中获取aps属性值来判断是否是APNs下发的消息 ,参考推送开发指南
iOS在线收不到消息
当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
- 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API uni.createPushMessage手动创建通知栏消息。
- 服务端执行推送时,传递参数
force_notification:true
,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
iOS离线收不到消息
步骤一:确认CID是否绑定苹果devicetoken
在【Uni Push】-【配置管理】-【故障排查】-【 检测CID的状态及信息:】中输入CID查询,看是否会返回苹果devicetoken。
若返回了具体苹果devicetoken,请按以下说明排查,若还未解决,提供CID和任务ID给个推技术支持
注意:返回的devicetoken后面是否带着【developement】字样;若带着,则说明客户端环境是属于苹果的开发环境,苹果推送对开发环境的支持不稳定,建议使用正式环境去进行推送测试。
步骤二:查询CID未返回devicetoken
- 切换手机连接网络,卸载重装试下。
- 使用其他手机安装测试。
- 重新进行云打包。
证书测试一下返回无效、连接报错
- 证书环境问题:通用证书支持开发与正式环境推送;开发证书只支持开发环境推送。
- iOS证书的生成,请参考 证书生成文档。
四、错误提示问题
1、Hbuliderx打包报错,提示包名找不到
查询一下自己上传的service.json文件,和打包时候选择的Android包名是否一致,如果不一致需要修改为一致信息
2、ios新建的证书会报证书环境错误
需要正确上传推送证书
注意:
打包的时候用的开发者证书 后台ios配置需要配的是推送证书
下载ios证书必须是ios的会员,非会员是不能下载的
3、推送时提示:target user is invalid
Unipush推送出现AppidError或者target user is invalid,一般都是您使用的CID,直接通过未进行云打包的自定义基座包获取的,不属于您自己应用,属于Dcloud官方的测试app应用。
需要选择自己的应用,云打包后(自定义基座包或者正式包都行),再获取 cid 。
4、unipush 打包提示应用appid未关联当前服务空间
检查填写的app_id信息,要用unipush 的UNI开头的那个id
5、厂商推送设置配置提示‘验证错误’
- 原因是填写了错误的厂商参数,需要去对应的 厂商平台 核实参数是否一致,且注意填写时不能包含空格。
- 如果确认参数完全一致,可以更换浏览器后再进行填写保存,推荐使用 Google 浏览器。
6、unipush点击运行到基座 毫无反应,弹窗也都没有
点顶部菜单栏帮助-查看运行日志看下:
这种一般都是真机调试版本不对,对应调试的版本和插件版本不一致,当前运行调试的版本没有这个api。检查一下插件的版本和真机版本,更新真机版本解决问题。
7、获取cid提示no push platform报错问题:
没有unipush节点,检查插件工具manifest源码视图里面modules的push配置或者sdkConfigs配置。
8、uniapp在app.vue中接收在线消息时,ios机型点击消息闪退
receive 回调里判断下msg.type是否为空,可能是空指针异常导致闪退。
9、url化后调用提示“应用appId:AppId的unipush服务,未关联当前服务空间
服务空间,unipush那需要关联,项目里也需要关联
10、报错提示 mongo_cell_decision_not_found
注意:扩展库依赖 3 张 opendb 表:opendb-tempdata,opendb-device,uni-id-device。公测版 uniCloud,执行扩展库会自动创建。如果你使用的是 uniCloud 正式版需要自己在 uniCloud 的 web控制台 创建这3张表。
创表路径:
11、获取cid失败,提示:getPushClientId: fail uniPush is not enabled
NVUE项目不行,需要去掉纯nvue选框 https://ask.dcloud.net.cn/question/152548
12、调用报错提示:duplicate message content 或者 push app frequency exceeded
如果推送时不传入 cid,则发送的是全推(给所有用户推)消息。全推每分钟不能超过5次,10分钟内不能推重复消息体 。
通过返回值中的 taskid 几个首字母可以判断是什么推送。RASS:单推、 RASL:批量推、 RASA:全推
请仔细检查云函数是否正确传了 cid
13、后台页面推送时,显示预计人数:0人
原因:没有进行云打包,或者云打包时,未勾选“离线推送”。打的包是小程序 SDK,仅支持发在线透传消息,不会有通知栏展示。
如果是app用户,请把“离线推送”勾选上,云打包再获取cid。 uni-push 2.0 快速接入指南