个推小助手
个推小助手
  • 发布:2023-01-30 15:25
  • 更新:2024-12-04 12:01
  • 阅读:43899

uni-push2.0 常见问题

分类:uni-app

uni-push2.0 常见问题

一、基础问题

1.uni-push2.0 和 uni-push1.0 有什么区别

uni-push1.0:支持 app(Android 和 ios),不支持小程序端、web 端,可以用个推服务端 api 推送
uni-push2.0:支持 app(Android 和 ios)、小程序端、web 端。服务端不支持用个推 api 推送,只能用 dcloud 提供的 服务端(云函数)推送

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.设置角标问题

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

7.是否需要云打包?

首次集成push:必须云打包。
修改 android 多厂商参数:必须云打包。
修改 iOS 推送证书:不需要云打包。

8.推送频次限制

推送条数限制:没有限制
单推(to Single)频次限制:没有限制
批量推(to List)频次限制:200万次/天
群推(to APP)频次限制:100次/天,每分钟不能超过5次

9.CID什么情况下会变化

  • 若安卓用户超过100天、 iOS用户超过一年,CID 一直没有登录请求(CID 没有与个推服务端建立长链接)。则 CID 会失效,之后再启动会重新生成一个CID;
  • 如果应用没有获取sd卡权限,卸载重装/清除缓存,CID会变(CID信息会写入sd卡)。
  • 个推Appid参数、应用的包名、苹果Bundleid的修改。
  • 苹果手机进行了越狱或系统还原。

二、Android 消息推送问题

安卓厂商离线推送是否要求上架应用商店?

安卓消息推送流程说明

  • 默认情况下:
    • 当CID在线(即app在前台打开运行)时,消息通过个推通道下发到客户端。
    • 当CID离线(即app在后台、锁屏、进程关闭)时,有开启对应厂商离线功能的,消息将通过个推侧请求对应厂商侧的服务端,实际的消息是经由厂商服务器下发至客户端。对于没有开启对应厂商功能的,消息将存在个推的离线库中,等待CID在线,再通过个推通道下发到客户端。
  • 注意:安卓的消息推送,走了厂商通道的消息就不会再通过个推通道推送至客户端,反之亦是如此,即消息只会推送一次

安卓在线收不到通知

  • 手机通知权限是否正常打开,部分安卓8以上的手机通知权限中需要打开【Default】渠道的通知权限。
  • 当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
    • 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息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条离线消息。
  • 小米

    • 标题长度限制50个字,内容长度限制128个字。
    • 检查手机通知权限设置,小米有不重要通知功能,部分消息可能会存在通知栏不重要通知里
    • 服务端推送时,推送代码要加上离线时间设置,不能为空。
    • 小米需要上架至应用市场才能使用离线厂商推送。
    • 小米【 公信消息】,一个设备一天只能收到5条离线消息。
  • OPPO

    • 标题长度限制32个字,内容长度限制200个字。
    • 检查手机通知权限是否打开,oppo是默认关闭的,将通知权限下的【Default】通道权限也打开。
    • 手机系统时间是否正常
    • oppo【 公信消息】,一个设备一天只能收到2条离线消息。
  • 魅族

    • 标题长度限制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 支持下发测试消息。发送测试消息方式如下:

  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 开放平台oppo开放平台 录入测试用户(regid 对应个推cid 绑定的 device token,可以从个推后台的“故障排查”中查询 cid 信息获取)。
    华为、荣耀不需要录入测试用户。华为、荣耀、vivo 需要在options内添加测试参数;oppo只需要添加测试设备,不需要options内加参数。

  2. 若从后台页面推送,填写红框附加参数:
    ”华为“ 、”/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 快速接入指南

2 关注 分享
k***@qq.com 4***@qq.com

要回复文章请先登录注册

1***@qq.com

1***@qq.com

开通的时候提示鸿蒙包名不能为空咋整,没有鸿蒙啊
2024-12-04 12:01
新时代码农

新时代码农

回复 3***@qq.com :
我也遇到了这个问题,请问如何解决呢?
2024-11-22 11:27
s***@qq.com

s***@qq.com

Android在线收不到通知。
问题描述:应用启动之后可以收到通知,但是但应用退到后台一小段时间之后再重新回到前台,再次发送测试推送消息后应用便再也收不到了。
说明:我们的应用目前没有添加离线推送配置,按照“安卓消息推送流程说明”中的描述,当应用回到前台时理论上应该能立即收到推送的,实际情况不行,请问为什么?
另外文章最后一个截图对应的页面挂了,无法判断cid是否在线。
2024-11-13 11:05
1***@163.com

1***@163.com

{
"errCode": "uni-push-param-invalid",
"errMsg": "推送失败,意外的参数:cids"
}这是啥问题啊
2024-10-14 17:07
3***@qq.com

3***@qq.com

第十一个问题:获取cid失败,提示:getPushClientId: fail uniPush is not enabled,使用cli方式创建的项目也可能会导致获取cid失败
2024-08-02 15:03
d***@163.com

d***@163.com

回复 南黎2024 :
解决了吗,我2.0调云函数成功手机收不到
2024-07-10 11:06
jbkj

jbkj

回复 南黎2024 :
哥,还是无法给你私信啊,你加我吧,1690373486
2024-06-18 11:32
jbkj

jbkj

回复 南黎2024 :
可以,你私信我,我私信不了你,隐私
2024-06-17 19:46
南黎2024

南黎2024

回复 jbkj :
加qq?
2024-06-17 19:44
jbkj

jbkj

回复 南黎2024 :
哥们加个好友讨论下,方便吗?我也在接这个玩意
2024-06-17 19:08