mPaas移动推送常见问题和踩坑记录-阿里云开发者社区

开发者社区> 好南非> 正文

mPaas移动推送常见问题和踩坑记录

简介: mPaaS 集成了华为、小米等厂商的推送功能,从而有效地提高用户留存率,提升用户体验。在我们日常运维过程中,发现少部分设备在厂商push下无法push,在此分享下相关案例的排查过程,方便后续同类问题借鉴。
+关注继续查看

一 背景

金融级移动开发平台 mPaaS(Mobile PaaS)为 App 开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动应用。其中消息推送服务(Message Push Service,简称 MPS)为开发者提供了专业的移动消息推送方案,针对不同的场景推出多种推送类型,满足个性化推送需求。为了提升推送的到达率,mPaaS 集成了华为、小米等厂商的推送功能,从而有效地提高用户留存率,提升用户体验。在我们日常运维过程中,发现少部分设备在厂商push下无法push,在此分享下相关案例的排查过程,方便后续同类问题借鉴。

二 push相关背景

1. push整体架构

以接触最多的国内Android设备为例,整体结构如下,官网已经给出详细介绍(链接),这里不在赘述。

image

2. 厂商push和自建push

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

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

三 问题排查举例

通过上面的介绍,可以看出三方厂商push是否成功,主要取决于三个链路,分别为:

1.三方token正确生成上报

2.服务端正常转发到厂商服务器  

3.下发到客户端消息可以正常显示

1. 测试准备

为了快速验证问题,我们需要准备一个推送程序,可以快速推送信息到App上。MPS提供了推送的Http接口供外部调用,我们可以通过初始化一个简单的java程序实现推送信息的发送,方便联调。使用链接:链接

2. 三方token生成阶段

目前mPaas对三方厂商push的token生成分为以下步骤。

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

以华为设备为例,判断是否是华为设备的标准是,检测当前手机是否是emui, 如果是才走华为PUSH SDK。在我们日常运维的case中,发现过部分设备由于刷机或者其他操作,在华为手机上安装的不是emui,类似这种设备是走不了华为push的,只能走自建push。

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

   image


2.2 生成三方token

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

image


我们查看华为定义的错误码(链接),发现2表示SERVICE_VERSION_UPDATE_REQUIRED,需要升级当前的HMS版本。

image

升级HMS版本的方案有两个


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

在启动阶段调用如下服务,安装更新华为推送服务

if (HuaweiApiAvailability.getInstance().isHuaweiMobileNoticeAvailable(context) == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) {

   // 需要升级

  HuaweiApiAvailability.getInstance().resolveError(activity, ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED, 1);

}

image

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

https://consumer.huawei.com/cn/support/content/zh-cn04461342/

2.3 三方token正常上报

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

image

2.4 token过期

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

3. 服务端投送阶段

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

目前如果消息设置了红点或者静默,因为厂商push不支持,MPS会自动走自建push。

3.2 三方服务端报错

这种主要用作mPaas服务端推送到三方服务端后,三方返回异常。这种需要去MPS拉取服务端报错日志,然后核对厂商文档解决,比如华为服务端报错文档链接如下:链接

3.3 三方服务端限流

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

4. 设备显示阶段

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

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

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

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

四 其他常见问题

1. 常用日志举例

1.1 tag:mPush14

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

image

1.2 tag: mcssdk

mcssdk 是oppo push sdk的日志tag, 可以查看厂商的一些日志信息,比如查看三方token

image

2. 其他思路

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

  1. oppo的faq: 链接
  2. vivo的faq: 链接

3. 推送Android设备但是推到了iOS设备

现象:发现部分手机上本来需要推送到Android设备的消息,推送到了iOS设备。

分析:服务端是通过最后一次绑定来判断最后推送的设备,说明用户在Android设备上一直没有触发绑定,导致服务端存储的是iOS的登录记录。

原因:用户Android手机登录使用的是指纹登录,客户在指纹登录的场景下没有触发绑定,导致服务端一直存储的是iOS的绑定记录


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DTS开发记录(5)-- 挑战增量导出
增量导出恐怕是DTS系统中最艰难的部分了,我们曾考虑过很多方案,最后都因为需要表大纲做一定的假设而不具备通用性而放弃。有很多效率较高的方案,由于为了追求通用性而无法实现,因为现实的情况比我们理想的要复杂许多。
769 0
jquery checkbox勾选/取消勾选只能操作一次的诡异问题
第一次执行,没问题,但第二次执行就有问题了,选择不了 解决办法:把attr()换成prop()   $("#CheckedAll").click(function () { if ($(this).
833 0
Gridview的item含有checkbox,setOnItemClickListener方法失效的问题
在开发中我们常常遇到一些莫名奇妙的问题,就比如Gridview的item含有checkbox,setOnItemClickListener方法失效的问题。 刚开始网上搜了一下,如http://my.oschina.net/fuckboogie/blog/346202 按这个没办法解决我上面的问题,于是我在item的子布局里面新增了 <span style="font-size
755 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4478 0
caffe: test code 执行出问题: Check failed: FLAGS_weights.size() > 0 (0 vs. 0) Need model weights to score.
Check failed: FLAGS_weights.size() > 0 (0 vs. 0) Need model weights to score. 出现这个错误,但是我记得昨天还好好的,网上搜了也没有答案,后来仔细检查才发现,原来存放 .caffemodel 的文件名字 中间有空格!!! 把文件夹路径上的名字去掉,果断就可以了。
1750 0
DTS开发记录(10)-- 可视化的流程编辑
在将数据从数据源导出到数据目标的过程中,我们通常需要对数据进行一些检查、验证、加工、转换等操作,而这个加工转换的流程可能是非常复杂的,DTS通过可视化的拖拽的方式对数据加工转换流程进行自定义编辑。
917 0
ListView 中Checkbox 错乱问题
最近项目需求,模仿今日头条的短视频播放,点击其中一个视频,将其他的视频停止播放。撸完代码后执行,发现会发现图片错位的情况,然后去谷歌,寻求解决,大多数都是setTag()方式,可以试过后还是存在问题。
560 0
+关注
17
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载