个推小助手
个推小助手
  • 发布:2023-01-30 15:25
  • 更新:2024-07-10 11:06
  • 阅读:31751

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

h5设置: https://www.html5plus.org/doc/zh_cn/runtime.html?from_wecom=1#plus.runtime.setBadgeNumber
云函数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厂商发送测试消息

华为单应用单设备单日可接收消息数量上限:新闻阅读(新闻,需具备《互联网新闻信息服务许可证》): 5 条。其它营销类消息:2 条。
其它安卓厂商也有额度限制,详见:厂商通道限额&QPS说明

  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测试推送,额外需要先在 vivo 开放平台 录入测试用户。华为不需要录入。

  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、unipush 打包提示用户错误


这种报错都是clientid用户错误,需要获取正确的跟应用匹配的cid。可使用自有证书提交云打包后,下载安装再去获取正确的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,dcloud的会默认当成全推处理。全推每分钟不能超过5次,10分钟内不能推重复消息体 。
请仔细检查云函数是否正确传了 cid

1 关注 分享
k***@qq.com

要回复文章请先登录注册

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
南黎2024

南黎2024

靠cid故障检测能返回设备的token
都是提示发送成功 但是收不到信息 (安卓在线设备)
我切换到push1.0就可以收到
2024-06-17 19:06
南黎2024

南黎2024

cid 是null
但是我用1.0版本就是正常的 是2.0有什么特别的配置吗?
2024-06-17 18:50
1***@qq.com

1***@qq.com

华为手机收不到消息,老机型能收到,新的机型收不到
2024-04-07 18:23
小龙虾h

小龙虾h

能在普通vue项目中怎么使用unipush2.0进行消息推送吗?
2024-04-02 17:10
落水的死鱼

落水的死鱼

我做测试调通了,但点击通知后,角标数量并没有减少,是要做什么其他的配置吗?测试机为苹果
2023-12-31 07:33