厂商 push 不通排查指南

为了提高「MPS 消息推送」的推送的到达率,mPaaS 集成了华为、小米等厂商的推送功能,从而有效地提升用户留存率,提高用户体验。在平常运维过程当中,发现少部分设备在厂商 push下没法 push,在此分享下相关案例的排查过程,方便后续同类问题借鉴。

1、push 相关背景

1.push 总体架构css

以接触最多的国内 Android 设备为例,总体结构以下:java

2.厂商 push 和自建 push服务器

厂商 push 通道:优势是经过各个 OS 厂商维护的长连接进行推送,在 App 被系统杀掉后也能够进行推送,推送到达率高于自建push。支持华为,小米,oppo,vivo等厂商。缺点是,目前厂商的push基本都只支持通知栏消息的推送,在用户点击通知前,不启动应用,对红点, 图片等消息格式支持有限。架构

自建push通道:经过App启动后和自建服务端的长链接通道实现推送,缺点也很明显,App被杀掉后,就没法收到信息。主要用于不支持厂商渠道场景下的push。运维

2、问题排查举例

经过上面的介绍,能够看出三方厂商 push 是否成功,主要取决于三个链路,分别为:测试

  1. 三方 token 正确生成上报
  2. 服务端正常转发到厂商服务器
  3. 下发到客户端消息能够正常显示

1.测试准备ui

为了快速验证问题,咱们须要准备一个推送程序,能够快速推送信息到App上。MPS提供了推送的Http接口供外部调用,咱们能够经过初始化一个简单的java程序实现推送信息的发送,方便联调。使用连接阿里云

2.三方 token 生成阶段spa

目前 mPaaS 对三方厂商 push 的 token 生成分为如下步骤。3d

2.1 设备在三方push的厂商列表里

以华为设备为例,判断是不是华为设备的标准是,检测当前手机是不是 emui,若是是才走华为 PUSH SDK。在咱们平常运维的 case 中,发现过部分设备因为刷机或者其余操做,在华为手机上安装的不是 emui,相似这种设备是走不了华为 push 的,只能走自建 push。

以vivo设备为例,低版本手机只有在vivo公布的白名单设备内才支持推送。

2.2 生成三方 token

在调用 push sdk 生成 token 的过程当中,因为 push sdk 的生成也依赖当前手机的 room 版本,以华为为例,就将依赖华为手机内置的 HMS Core 版本。针对这种场景下的问题,在获取三方 token 失败的时候,会在回调里返回对应错误码。以下图所示,搜索 push 的关键字 mPush14,而后过滤,能够获取 token 返回错误码2。

咱们查看华为定义的错误码,发现2表示 SERVICE_VERSION_UPDATE_REQUIRED,须要升级当前的 HMS 版本。

升级HMS版本的方案有两个

方案1:主动升级,调用更新服务接口,升级更新效果以下所示:

在启动阶段调用以下服务,安装更新华为推送服务
if (HuaweiApiAvailability.getInstance().isHuaweiMobileNoticeAvailable(context) == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) {
   // 须要升级
  HuaweiApiAvailability.getInstance().resolveError(activity, ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED, 1);
}

 

方案2: 引导用户去华为设置里去升级

2.3 三方 token 正常上报

生成 token 后会经过 RPC 接口上报到 MPS 服务端,须要检查 RPC 接口是否有异常,上报接口是:alipay.client.yunpushcore.device.report

2.4 token 过时

以 oppo 为例,是在应用第一次启动时注册生效,后在刷机、还原手机(设置-其余设置-还原手机)、卸载应用时会失效,须要从新注册才能推送。

3.服务端投送阶段

3.1 消息包含了红点,静默,群发

目前若是消息设置了红点或者静默,由于厂商 push 不支持,MPS 会自动走自建 push。

3.2 三方服务端报错

这种主要用做 mPaaS 服务端推送到三方服务端后,三方返回异常。这种须要去 MPS 拉取服务端报错日志,而后核对厂商文档解决,好比华为服务端报错文档。

3.3 三方服务端限流

以 vivo 为例,默认推送走的是运营消息,天天只能对同一个用户推送 5 次。只有改为系统 push 类型才能没有这个限制。

4. 设备显示阶段

4.1 设备必须打开通知权限才能显示

好比 oppo 的通知权限默认是关闭的,须要打开通知权限,或者引导用户打开后才能显示。

4.2 应用包名和注册 oppo 配置保持一致

应用的包名要和注册 oppo 平台填写的包名要一致,否则不会显示。

3、其余常见问题

1.经常使用日志举例

1.1 tag:mPush14

主要是 mPaaS 上层应用层日志打印,打印 push 注册 token 相以及自建通道 push 相关信息。

1.2 tag: mcssdk

mcssdk 是 oppo push sdk 的日志 tag,能够查看厂商的一些日志信息,好比查看三方 token

2.其余思路

若是以上都解决不了,最后建议去看各个厂商的官方介绍,可能会找到一些思路。

  • oppo FAQ
  • vivo FAQ

做者:荣阳

 

原文连接

本文为阿里云原创内容,未经容许不得转载。

相关文章
相关标签/搜索