『技术分享』—— 我和 Android 推送的时间简史

2017 年 3 月 3 日

「极光」跟我的渊源真的是极深的,说到极光,不得不追溯到 2017 年 3 月 3 日,当时正做毕设项目趣闻。基本的预期功能已经实现了,开始考虑集成推送功能,鉴于水平和时间的约束,决定还是集成第三方推送最为保险。

然后百度了一下「第三方推送」,映入眼帘的便是「极光推送」,毫不犹豫的选择了它。在集成过程中也是比较顺利,在收到第一条推送后,喜悦的心情无以言表,不得不说大平台就是强。

2017 年 3 月 7 日

3 月 7 日,找到了第一份实习工作(毕业后也在这里转了正),坐标「南京」。入职不久,老大开始让我接手公司项目中的推送模块。然后我把公司推送的逻辑大致看了一下,无论是设置 tag、或者是处理通知栏点击事件处理、还是自定义消息推送,对于刚入职的我是相当的复杂。毕竟在之前集成的毕设项目中,逻辑处理很少,只是简单的收到通知、点击并打开应用...

逻辑整理的差不多,开始了主要的任务--升级到新版的极光推送

当我看到项目极光当前的版本,硬是被吓一跳。

『技术分享』—— 我和 Android 推送的时间简史_第1张图片
当前版本

我记得当时极光已经到 3.0.0+ 的版本了,看来升级果断是有必要的!还有一点,我们公司是「极光」的 VIP,在原来推送的基础上,多了一项非常强大的功能!集成产商的推送(小米、华为和魅族)。

这意味着,如果在「小米、华为和魅族」的大部分的设备上,推送不再走极光的通道,而是走设备的产商通道。

什么意思呢?就拿公司老版本的项目来说,不仅集成了极光推送还集成了小米推送,不仅服务端需要推送两份推送,就连客户端自己都要对设备的类型进行判断,如果是「小米」设备就调用「小米」的接口。那如果集成了产商推送,就不需要此操作,你只需提供应用的 APPID 等其他配置信息即可,华为和魅族同样!

那么走产商通道又意味着什么呢?有集成过推送的小伙伴应该知道,推送能准确到达在于一个长连接,假如应用的进程被杀死,推送也便收不到。假如集成了产商的推送,即便进程被杀死,推送还是可以正常收到的,不过仅限于基本的推送,不包括自定义推送。

这个升级的过程也是相当的坎坷,我记得这部分的功能也是「极光」的测试功能,正好我们集成过来一并测试...不过还有有一位热心的小姐姐,习惯称之为「大侠」!这个称号是当时她的昵称,一直都这么叫过来的。每次遇到问题都能不厌其烦的为我解惑。

其中让我印象最为深刻的,是那天公司项目已经到了发版周期的最后两天,在华为的设备上推送没有收到。这可把我急的,第一时间就是找「大侠」帮忙,可能因为我在 QQ 上表达的不是很清楚,小姐姐看起来比我 还着急,直接让我跟她通电话讨论一下具体的原因,这让我意想不到。还好最后是解决了问题,在此说声 谢谢

2017年 9月19日

9月 19 日,工作半年了,打算和大神同事一起维护一个开源项目,于是就有了 WeaponApp 的诞生,目前也快到 600 的赞了。

WeaponApp

当然,推送的功能也是少不了的,由于有了前面的经验,集成起来也是相当顺手,不过因为是个人项目就没有考虑,后来同事自学了服务端,顺便也把服务端的极光推送集成了,感兴趣的话可以把项目 clone 下来。

在这个项目中初次尝试了集成「极光IM」,官方的接口也是很详细,并且还有自己的用户系统,登录和注册不需要自己实现了,不过目前的用户还是很少...

『技术分享』—— 我和 Android 推送的时间简史_第2张图片
所有用户

2017年 10 月 26 日

10 月 26 日,咱们公司另一交易项目「原油」开始进行大版本的升级,基本上属于重头做起。不用多说,推送的部分还是由我负责,鉴于又是「极光」的 VIP,直接将「贵金属」项目的推送部分挪过来,去除不需要的部分,修改一些基础的配置,最后也是顺利的完成了。

不知不觉中,推送功能已经在 4 个项目中集成了:

『技术分享』—— 我和 Android 推送的时间简史_第3张图片
个人项目

公司的就不方便列出来了,加在一块也有数十万的用户了(绝大部分是公司)...整体的过程还是很顺利的,无论是集成的步骤,还是后续的服务都很完美,这可能就是「极光」做的那么大的原因吧。

推送一览

赘述

说完「极光」与我的渊源,接下来就大概说一下集成的过程。

官网已经有详细的集成介绍,我就不赘述了。官网集成,只是总结一下集成的步骤,一共三步:

  1. 添加依赖
    手动集成,需要拷贝相应的 so 文件到制定的目录
    自动导入Android Studio 直接添加依赖
  2. 添加配置文件
    拷贝官网的 AndroidManifest 数据到项目 app module 下的 AndroidManifest 中,并更换对应的包名和 APPID
    调用「极光」接口进行初始化
  3. 添加接收器
    创建自定义 Receiver 用于处理推送的消息。

一般这样集成就可以正常收到推送了。如果遇到问题也别慌,冷静下来。从我的经验来看,最好在每个关键的地方打上日志,方便运行时候查看和后面遇到问题方便定位。还有就是日志的 TAG,最好和极光的日志过滤规则保持一致,比如 JPush

当你有下面的日志输出,就证明已经集成成功了!

[JPushInterface] action:init
.......
[PushService] Login succeed!

成功的日志只有这一个,错误的情况就各种各样了,可以对照之前的日志进行分析,比如:

『技术分享』—— 我和 Android 推送的时间简史_第4张图片
初始化失败

很有可能是因为 so 文件加载失败...

还有好多东西,我后续在添加吧,感兴趣的小伙伴可以很我交流交流,希望能帮到你!

「本文系极光征文 | 写写文章就能赢 Filco,岂不美滋滋的参赛文章」

你可能感兴趣的:(『技术分享』—— 我和 Android 推送的时间简史)