Uniapp下GoEasy通知栏推送不工作问题排查记录
我们是uniapp开发的app,项目中的系统消息推送使用的是GoEasy Websocket 实时推送,上线一段时间后,客户反馈说,当app没有在前台运行时也需要想办法通知用户一些重要的系统通知。那么此时通知栏推送就需要集成了。
集成通知栏推送很麻烦,国内一些公司做了一些插件来帮我们打通app跟厂商之间的api的调用,这确实也大大减少了开发者的工作量,但是在集成厂商通道的过程中还是遇到了一些问题, 我这里记录一下,也方便之后为其他app项目集成厂商通道时方便排错。
为什么选择GoEasy原生插件来实现通知栏推送 而不是unipush?
- 使用GoEasy原生插件来推送通知栏提醒只会在需要推送通知栏的时候推送,不会滥推给客户带来骚扰。
- app前台运行时我们使用的是 GoEasy Websocket, 所以 GoEasy知道客户端的连接情况,根据GoEasy
websocket的连接情况来推送该推送的通知栏提醒。
如果用unipush,这个是否在线的判断,就需要我自己来做,而且我也很难判断,又不可能每条都推送通知栏提醒。 - GoEasy通知推送为付费服务,当通知栏推送不工作时,有专人协助我排查问题,但是使用unipush,虽然免费,但是收不到通知栏推送消息时,几乎只能靠自己 和百度来解决问题,调试成本高。
通知栏推送的分类和基本工作方式
通知栏推送分两种:
本地通知
离线通知
本地通知,指app在后台运行,且goeasy websocket连接未断开时,处理的通知栏推送,此时通知栏推送是goeasy sdk完成的,无上架要求。
离线通知, 指goeasy连接断开或者app进程被杀后,需要通过厂商推送来实现的通知栏提醒。什么意思呢? 就是这种情况下,只有通过各个手机厂商自己的推送服务平台向手机推送通知栏推送。目前goeasy支持以下厂商:
- APNs (iOS苹果)
- 小米 (需要上架才能推送)
- 华为
- vivo (需要上架才能推送)
- oppo
- 魅族
- FCM (这个只适用海外用户通过google服务来进行通知栏推送,国内的项目用不上,因为google服务被墙了)
收不到本地通知的常见原因
- 初始化时allowNotification值是否为true
- 发送消息时是否有带notification的相关参数
- 在手机系统设置里确认,该app的通知栏提醒为“允许”状态
- GoEasy的sdk版本是否低于2.2.8,如果是,请在官网下载最新的sdk进行集成
- 检查manifest.json中权限配置是否勾选NOTIFICATION相关权限,并检查manifest.json的源码视图中是否有同步更新
- 检查manifest.json中模块配置是否勾选上了push模块,
且一定不能勾选unipush,检查manifest.json的源码视图中distribute节点中配置中是否包含pushRegisterMode参数配置?pushRegisterMode是unipush的配置,个别hbuilder版本下,模块配置中没有勾选unipush但是源码视图中有。如果有,需要删除这个参数。 - GoEasy连接是否已经断开, 如果已经断开,则需要集成厂商通道才能推送通知栏提醒
(注意大多数vivo手机一切换到后台运行后,app的某些资源几乎会马上回收导致goeasy连接断开,所以需要结合goeasy后台的在线客户端页面来确认连接是否还在) - 如果是付费应用,排查是否购买了通知栏推送服务
收不到离线通知的常见原因
APNs (iOS苹果离线推送)不工作
- app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
- 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
- 确认iOS开发证书是否包含push notification权限,如果没有,需要重新生成开发证书
- 确认iOS推送证书是否配置正确
a. 请确认是否在GoEasy后台上传时的iOS的推送证书【跟制作基座时用的证书是完全不同的证书,打包时用的是开发证书,厂商推送是推送证书】
b. ios推送证书与开发证书的bundle id是否一致
c. 推送证书是否是测试环境跟正式环境通用的证书
d. 如果您选择的运行证书的环境为正式环境,您的app是否已经上架app store
e. 如果app已经上架,需要选择正式环境,如果选择了测试环境,则收不到
小米离线推送不工作
- app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
- 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
- 小米开放平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
- 小米推送服务没有通过申请。app需要在小米应用市场上架,并在小米开发平台申请推送服务,只有申请通过后才能使用小米离线推送。
- 在GoEasy网后台配置uniapp通知栏推送小米参数时提示无效,导致没有成功配置小米厂商
解决方案:小米如果是刚开启的推送权限,需要等待几分钟后才会生效。您可以等3分钟以后再去配置 - 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确,比如appkey 跟appsecret的值要正确,不要填错了 - 受到小米厂商推送限制影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到小米厂商限制,需要申请小米厂商分类消息。
参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category
华为离线推送不工作
- app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
- 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
- 华为开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
- 华为开发者平台中的推送服务是否成功的开启
- 是否正确的生成了SHA256证书指纹
- 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确 - goeasy后台厂商通道配置参数要正确
- 受到华为厂商推送限制的影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到华为厂商限制,需要申请华为厂商分类消息。
参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category
vivo离线推送不工作
- app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
(注意大多数vivo手机一切换到后台运行后,app的某些资源几乎会马上回收导致goeasy连接断开,所以需要结合goeasy后台的在线客户端页面来确认连接是否还在) - 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
- vivo开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
- vivo开发者平台中的推送服务是否已经通过申请
- app是否在vivo应用市场已上架
- 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确 - goeasy后台厂商通道配置参数要正确
- 受到vivo厂商推送限制的影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到vivo厂商限制,需要发送时需要根据业务真实指定classification参数,
0:运营类消息,1:系统类消息,不填默认为1。
参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category
oppo离线推送不工作
- app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
- 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
- oppo开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
- oppo开发者平台中的推送服务是否已经通过申请
- 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确,appkey,appsecret, appserversecret 的值要正确的填写 - goeasy后台厂商通道配置参数要正确
- 受到oppo厂商推送限制的影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到oppo厂商限制,需要申请oppo厂商分类消息。
参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category
魅族离线推送不工作
- app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
- 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
- 魅族开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
- 魅族开发者平台中的推送服务是否已经开启
- 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确,appkey,appsecret 的值要正确的填写 - goeasy后台厂商通道配置参数要正确
FCM 没有使用到,所以没有相关问题排查。
如果以上排除步骤无法锁定原因,建议按照GoEasy厂商通道配置文档再走一次,不要自认为没有问题,厂商通道的配置没有什么难点,主要是要细心。
如果实在无法排查到原因,就找GoEasy客服吧,他们会很耐心地帮您排查问题。
其他常见问题
问题1: 为啥我的通知栏消息没有悬浮弹窗提醒?
答:通知栏消息被静默显示,一方面取决于厂商对不同类型通知有不同的展示规则,另一个方面也要取决于app在手机上的设置,看是否打开了悬浮通知。
问题2: 为啥小米手机上不是每条消息都会通知?比如发送3条,只有第一条会有提示,后面两条都没有提示?
答:这个取决于手机操作系统的规则,为了在避免打扰到用户,部分手机厂商会对通知频繁的app进行提示限制,比如只会折叠通知不会响铃,有些手机厂商只有当用户点击了通知之后才会重新提醒(带提示音)。
监听通知栏点击事件
用户点击通知栏消息,除了APP被自动拉起外,开发者还可以通过监听通知栏消息的点击事件,根据消息数据,执行相应的业务逻辑,比如跳转到不同的页面,或显示不同的内容。
为了避免在APP启动后,因为监听动作未完成而导致APP无法响应点击操作,确保APP总是可以第一时间响应通知栏消息的点击事件,请务必在main.js GoEasy初始化后,立即监听onClickNotification事件。
Uniapp下GoEasy通知栏推送不工作问题排查记录的更多相关文章
- iOS8下的远程推送
本篇文章主要介绍了"iOS8下的远程推送",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 昨天做了一下远程推送,今天写下来,分享给需要的人.参考了很多篇文章,或许 ...
- goEasy消息推送,pushlet 向特写用户实时推送
goEasy 1先去goEasy官网注册goeasy.io,并创建application,得到superKey 2引入js <script type="text/javascript& ...
- git 使用钩子直接推送到工作目录
远端机器 $ mkdir /www/teacherapi # 创建工作目录 $ cd /data/git $ git init teacherapi.git --bare --shared Init ...
- GoEasy消息推送
1. 从GoEasy获取appkey appkey是验证用户的有效性的唯一标识. 注册账号. GoEasy官网:https://goeasy.io 用注册好的账号登录到GoEasy的后台管理系统,创建 ...
- spring boot下WebSocket消息推送(转)
原文地址:https://www.cnblogs.com/betterboyz/p/8669879.html WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.W ...
- spring boot下WebSocket消息推送
WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...
- Spring下集成ActiveMQ推送
本文是将ActiveMQ消息制造者集成进spring,通过spring后台推送消息的实现. 首先是spring的applicationContext的配置,如下 <?xml version=&q ...
- cordova 框架下开发app推送
cordova提供官方的push pluging,使用的是Google的GCM消息推送服务,一些网络原因,国内GCM可能不怎么好用.所以选择国内的第三方插件. 可供选择的有百度云推送,腾讯云信鸽,极光 ...
- window下git代码推送
https://blog.csdn.net/luosaosao/article/details/63684470
- 用GoEasy推送实现Java实时推送
前段时间客户有个需求他希望他在后台管理页面发布一个消息,所有用这个系统的用户无论在哪个页面都能及时收到他发布的信息,以前对于类似需求在少量 页面接收的前提下,我一般采用ajax定时去服务器pull信息 ...
随机推荐
- 二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 --- Ubuntu版
二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 --- Ubuntu版本 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安 ...
- 四月十六号java基础知识
1.如果没有一个机制来限制对类中成员的访问,则很可能会造成错误的输入如果在类的成员声明前面加上修饰符private,则无法从类的外部访问到该类内部的成员,而只能被该类自身访问和修改,而不能被任何其他类 ...
- 重新理解RocketMQ Commit Log存储协议
本文作者:李伟,社区里大家叫小伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云Ro ...
- 运行项目报错Cannot read property 'styles' of undefined
原因是安装依赖版本不对,以下是我的解决办法: 1.先删除项目中package-lock.json 文件 及node_modules文件(可使用rimraf指令删除node_modules,直接删文件很 ...
- 最好用的.NET敏捷开发框架-RDIFramework.NET V3.6版全新发布 100%源码授权
RDIFramework.NET,基于.NET的快速信息化系统敏捷开发框架.10年沉淀.历经上千项目检验,致力于企业智能化开发,帮助提升软件开发效率.最好用的.NET开发框架,100%源码授权. 1. ...
- 机器学习(七):梯度下降解决分类问题——perceptron感知机算法与SVM支持向量机算法进行二维点分类
实验2 感知机算法与支持向量机算法 一.预备知识 1.感知机算法 二.实验目的 掌握感知机算法的原理及设计: 掌握利用感知机算法解决分类问题. 三.实验内容 设计感知机算法求解, 设计SVM算法求解( ...
- Prism Sample 18-NavigationCallback
同17相比,在导航方法中增加了回调函数 private void Navigate(string navigatePath) { if (navigatePath != null) _regionMa ...
- 这是一道非常有争议的题,我的分析如下: TCP/IP在多个层引入了安全机制,其中TLS协议位于______。 A.数据链路层 B.网络层 C.传输层 D.应用层
这是一道非常有争议的题,我的分析如下: TCP/IP在多个层引入了安全机制,其中TLS协议位于______. A.数据链路层 B.网络层 C.传输层 D.应用层 这道题选D吗?因为tls协议在osi七 ...
- 2021-01-05:mysql的自增id的实现逻辑是什么样子的?
福哥答案2021-01-05:答案来自这个链接:[ 每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?](https://zhanghaoxin.blog.csdn.net/articl ...
- 2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。
2021-03-31:给定一个数组arr,给定一个值v.求子数组平均值小于等于v的最长子数组长度. 福大大 答案2021-03-31: 这道题是昨天每日一题的变种.数组每个元素减v,然后求<=0 ...