我们是uniapp开发的app,项目中的系统消息推送使用的是GoEasy Websocket 实时推送,上线一段时间后,客户反馈说,当app没有在前台运行时也需要想办法通知用户一些重要的系统通知。那么此时通知栏推送就需要集成了。
集成通知栏推送很麻烦,国内一些公司做了一些插件来帮我们打通app跟厂商之间的api的调用,这确实也大大减少了开发者的工作量,但是在集成厂商通道的过程中还是遇到了一些问题, 我这里记录一下,也方便之后为其他app项目集成厂商通道时方便排错。

为什么选择GoEasy原生插件来实现通知栏推送 而不是unipush?

  1. 使用GoEasy原生插件来推送通知栏提醒只会在需要推送通知栏的时候推送,不会滥推给客户带来骚扰。
  2. app前台运行时我们使用的是 GoEasy Websocket, 所以 GoEasy知道客户端的连接情况,根据GoEasy
    websocket的连接情况来推送该推送的通知栏提醒。
    如果用unipush,这个是否在线的判断,就需要我自己来做,而且我也很难判断,又不可能每条都推送通知栏提醒。
  3. GoEasy通知推送为付费服务,当通知栏推送不工作时,有专人协助我排查问题,但是使用unipush,虽然免费,但是收不到通知栏推送消息时,几乎只能靠自己 和百度来解决问题,调试成本高。

通知栏推送的分类和基本工作方式

通知栏推送分两种:

    本地通知
    离线通知

本地通知,指app在后台运行,且goeasy websocket连接未断开时,处理的通知栏推送,此时通知栏推送是goeasy sdk完成的,无上架要求。

离线通知, 指goeasy连接断开或者app进程被杀后,需要通过厂商推送来实现的通知栏提醒。什么意思呢? 就是这种情况下,只有通过各个手机厂商自己的推送服务平台向手机推送通知栏推送。目前goeasy支持以下厂商:

  1. APNs (iOS苹果)
  2. 小米 (需要上架才能推送)
  3. 华为
  4. vivo (需要上架才能推送)
  5. oppo
  6. 魅族
  7. FCM (这个只适用海外用户通过google服务来进行通知栏推送,国内的项目用不上,因为google服务被墙了)

收不到本地通知的常见原因

  1. 初始化时allowNotification值是否为true

  2. 发送消息时是否有带notification的相关参数

  3. 在手机系统设置里确认,该app的通知栏提醒为“允许”状态
  4. GoEasy的sdk版本是否低于2.2.8,如果是,请在官网下载最新的sdk进行集成
  5. 检查manifest.json中权限配置是否勾选NOTIFICATION相关权限,并检查manifest.json的源码视图中是否有同步更新

  6. 检查manifest.json中模块配置是否勾选上了push模块,
    且一定不能勾选unipush,检查manifest.json的源码视图中distribute节点中配置中是否包含pushRegisterMode参数配置?pushRegisterMode是unipush的配置,个别hbuilder版本下,模块配置中没有勾选unipush但是源码视图中有。如果有,需要删除这个参数。
  7. GoEasy连接是否已经断开, 如果已经断开,则需要集成厂商通道才能推送通知栏提醒
    (注意大多数vivo手机一切换到后台运行后,app的某些资源几乎会马上回收导致goeasy连接断开,所以需要结合goeasy后台的在线客户端页面来确认连接是否还在)
  8. 如果是付费应用,排查是否购买了通知栏推送服务

收不到离线通知的常见原因

APNs (iOS苹果离线推送)不工作

  1. app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
  2. 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
  3. 确认iOS开发证书是否包含push notification权限,如果没有,需要重新生成开发证书
  4. 确认iOS推送证书是否配置正确

a. 请确认是否在GoEasy后台上传时的iOS的推送证书【跟制作基座时用的证书是完全不同的证书,打包时用的是开发证书,厂商推送是推送证书】

b. ios推送证书与开发证书的bundle id是否一致

c. 推送证书是否是测试环境跟正式环境通用的证书

d. 如果您选择的运行证书的环境为正式环境,您的app是否已经上架app store

e. 如果app已经上架,需要选择正式环境,如果选择了测试环境,则收不到

小米离线推送不工作

  1. app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
  2. 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
  3. 小米开放平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
  4. 小米推送服务没有通过申请。app需要在小米应用市场上架,并在小米开发平台申请推送服务,只有申请通过后才能使用小米离线推送。
  5. 在GoEasy网后台配置uniapp通知栏推送小米参数时提示无效,导致没有成功配置小米厂商
        解决方案:小米如果是刚开启的推送权限,需要等待几分钟后才会生效。您可以等3分钟以后再去配置
  6. 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
        解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确,比如appkey 跟appsecret的值要正确,不要填错了
  7. 受到小米厂商推送限制影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到小米厂商限制,需要申请小米厂商分类消息。
    参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category

华为离线推送不工作

  1. app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
  2. 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
  3. 华为开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
  4. 华为开发者平台中的推送服务是否成功的开启
  5. 是否正确的生成了SHA256证书指纹
  6. 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
        解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确
  7. goeasy后台厂商通道配置参数要正确
  8. 受到华为厂商推送限制的影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到华为厂商限制,需要申请华为厂商分类消息。
    参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category

vivo离线推送不工作

  1. app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
    (注意大多数vivo手机一切换到后台运行后,app的某些资源几乎会马上回收导致goeasy连接断开,所以需要结合goeasy后台的在线客户端页面来确认连接是否还在)
  2. 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
  3. vivo开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
  4. vivo开发者平台中的推送服务是否已经通过申请
  5. app是否在vivo应用市场已上架
  6. 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
        解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确
  7. goeasy后台厂商通道配置参数要正确
  8. 受到vivo厂商推送限制的影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到vivo厂商限制,需要发送时需要根据业务真实指定classification参数,
    0:运营类消息,1:系统类消息,不填默认为1。
    参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category

oppo离线推送不工作

  1. app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
  2. 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
  3. oppo开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
  4. oppo开发者平台中的推送服务是否已经通过申请
  5. 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
       解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确,appkey,appsecret, appserversecret 的值要正确的填写
  6. goeasy后台厂商通道配置参数要正确
  7. 受到oppo厂商推送限制的影响。如果至少收到过一次离线推送,说明厂商配置没有问题,可能受到oppo厂商限制,需要申请oppo厂商分类消息。
    参考文档:https://docs.goeasy.io/2.x/common/notification/channel_category

魅族离线推送不工作

  1. app在后台运行是否可以收到通知栏提醒,如果收不到说明代码或者环境有问题,需要先解决这个问题再往下看
  2. 是否添加了原生插件并按文档要求打包自定义基座(特别是是须勾选了push模块且不能勾选unipush)
  3. 魅族开发者平台填写的应用包名是否与制作自定义基座时填写的Android包名完全一致
  4. 魅族开发者平台中的推送服务是否已经开启
  5. 打自定义基座时报错“arguments invalid”,在原生插件配置页面,没有正确配置厂商相关参数
        解决方案:检查配置值的前后是否有多余的空格; 其次检查值是否正确,appkey,appsecret 的值要正确的填写
  6. goeasy后台厂商通道配置参数要正确

FCM 没有使用到,所以没有相关问题排查。

如果以上排除步骤无法锁定原因,建议按照GoEasy厂商通道配置文档再走一次,不要自认为没有问题,厂商通道的配置没有什么难点,主要是要细心。
如果实在无法排查到原因,就找GoEasy客服吧,他们会很耐心地帮您排查问题。

其他常见问题

问题1: 为啥我的通知栏消息没有悬浮弹窗提醒?
答:通知栏消息被静默显示,一方面取决于厂商对不同类型通知有不同的展示规则,另一个方面也要取决于app在手机上的设置,看是否打开了悬浮通知。

问题2: 为啥小米手机上不是每条消息都会通知?比如发送3条,只有第一条会有提示,后面两条都没有提示?
答:这个取决于手机操作系统的规则,为了在避免打扰到用户,部分手机厂商会对通知频繁的app进行提示限制,比如只会折叠通知不会响铃,有些手机厂商只有当用户点击了通知之后才会重新提醒(带提示音)。
监听通知栏点击事件

用户点击通知栏消息,除了APP被自动拉起外,开发者还可以通过监听通知栏消息的点击事件,根据消息数据,执行相应的业务逻辑,比如跳转到不同的页面,或显示不同的内容。

为了避免在APP启动后,因为监听动作未完成而导致APP无法响应点击操作,确保APP总是可以第一时间响应通知栏消息的点击事件,请务必在main.js GoEasy初始化后,立即监听onClickNotification事件。

Uniapp下GoEasy通知栏推送不工作问题排查记录的更多相关文章

  1. iOS8下的远程推送

    本篇文章主要介绍了"iOS8下的远程推送",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 昨天做了一下远程推送,今天写下来,分享给需要的人.参考了很多篇文章,或许 ...

  2. goEasy消息推送,pushlet 向特写用户实时推送

    goEasy 1先去goEasy官网注册goeasy.io,并创建application,得到superKey 2引入js <script type="text/javascript& ...

  3. git 使用钩子直接推送到工作目录

    远端机器 $ mkdir /www/teacherapi  # 创建工作目录 $ cd /data/git $ git init teacherapi.git --bare --shared Init ...

  4. GoEasy消息推送

    1. 从GoEasy获取appkey appkey是验证用户的有效性的唯一标识. 注册账号. GoEasy官网:https://goeasy.io 用注册好的账号登录到GoEasy的后台管理系统,创建 ...

  5. spring boot下WebSocket消息推送(转)

    原文地址:https://www.cnblogs.com/betterboyz/p/8669879.html WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.W ...

  6. spring boot下WebSocket消息推送

    WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...

  7. Spring下集成ActiveMQ推送

    本文是将ActiveMQ消息制造者集成进spring,通过spring后台推送消息的实现. 首先是spring的applicationContext的配置,如下 <?xml version=&q ...

  8. cordova 框架下开发app推送

    cordova提供官方的push pluging,使用的是Google的GCM消息推送服务,一些网络原因,国内GCM可能不怎么好用.所以选择国内的第三方插件. 可供选择的有百度云推送,腾讯云信鸽,极光 ...

  9. window下git代码推送

    https://blog.csdn.net/luosaosao/article/details/63684470

  10. 用GoEasy推送实现Java实时推送

    前段时间客户有个需求他希望他在后台管理页面发布一个消息,所有用这个系统的用户无论在哪个页面都能及时收到他发布的信息,以前对于类似需求在少量 页面接收的前提下,我一般采用ajax定时去服务器pull信息 ...

随机推荐

  1. [Linux]常用命令之【history】#查看历史操作#

    1 历史记录: history history命令就是历史记录. 它显示了在终端中所执行过的所有命令的历史. history //显示终端执行过的命令 history 10 //显示最近10条终端执行 ...

  2. 从k8s 的声明式API 到 GPT的 提示语

    命令式 命令式有时也称为指令式,命令式的场景下,计算机只会机械的完成指定的命令操作,执行的结果就取决于执行的命令是否正确.GPT 之前的人工智能就是这种典型的命令式,通过不断的炼丹,告诉计算机要怎么做 ...

  3. IDEA中隐藏问文件或者文件夹

    点击+,输入要隐藏的文件名,支持*通配符 回车确认

  4. Anaconda 安装 PyTorch 和 DGL

    安装 PyTorch Anaconda 是 PyTorch 官方推荐的包管理工具,它会帮助安装所有的依赖项.当使用 conda 安装的时候,可能会出现下载过慢的问题,需要更换清华源来代替默认的cond ...

  5. 【Dotnet 工具箱】跨平台图表库 LiveCharts2

    你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! LiveCharts2 LiveCharts2 是一个简单.灵活.交互式以及功能强大的跨平台图表库. ...

  6. 2023年windows DockerDeskTop最新款4.18.0 全程保姆级安装

    目录 前景提示 windows 10 内置的linux系统 1.这个内置系统一定要在windows store里安装,否则,无法使用,这是重点.进入商店,搜索linux. 2.一般画圈这些都可以使用. ...

  7. include-file

    0X01 前言 这篇文章介绍文件包含漏洞. 0X02 最常见的两个函数的形象解释: 我们知道文件包含最常见的是两个函数 include() require()(这里就不谈他们的亲戚 include_o ...

  8. .Net性能测试工具BenchmarkDotNet学习

    .Net性能测试工具BenchmarkDotNet学习 BenchmarkDotNet 是一个用于性能基准测试的开源框架.它可以让开发人员编写简单易懂的代码,并测量和分析这些代码的性能表现,从而帮助开 ...

  9. python字符串集合面试笔试题

    python字符串面试笔试题 以下代码的输出是? s = 'foo' t = 'bar' print('barf' in 2 * (s + t)) A.True B.Fasle +运算符连接字符串,而 ...

  10. Vue中关于keep-alive的使用

    keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 当组件在keep-alive内被切换时组件的ac ...