推送——Android程序员‘一生的痛’!!

9,300 阅读3分钟

项目中有个比较迷你的聊天功能,可以发语音和图片。

以上是背景。

项目是15年立项的,当时的Android环境和现在有很大不同。 代码的是用MQTT+Service实现的。本身这些技术没有啥难点,但是这些技术在18年就显得有些不适应了。

我的建议:如果项目中有推送需求的话,直接上第三方推送服务,不要尝试自己搞了,本身推送没啥问题,但是主要的问题是进程保活。

客户反馈在华为手机上经常收不到消息通知。通过我们测试,的确收不了。 我发现我们的程序被杀死了。于是我们建议客户把我们的程序加入白名单。但是这种情况还是不行,在后台最多坚持5分钟,最终还是收不到消息。程序信息页面显示程序还在运行,但是就是收不到消息……感觉类似程序被“冻结”了。因为再次进入程序的时候,会立马恢复。

于是反馈客户,说这是安卓系统限制。但是客户那边祭出杀手锏:“为啥微信就能收到!”

我竟无言以对!

Leader也坚持要解决这个问题,于是我在应用保活上做一番挣扎!

我做了一下尝试: 播放静音音频,常驻通知栏,一像素Activity,息屏后把程序调到前台……

最终的结论是只有“息屏后把程序调到前台”这个有点作用,华为手机上会显示高费电应用的提示。但是也就坚持了不到一个小时,就会被“冻结”。

最终——放弃!

我们选择了使用第三方推送服务,首先考虑的是手机厂商渠道。像是小米,华为,魅族的推送都是走系统通道的。

测试结果是程序被杀死也能收到推送。在当前国内的Android手机环境,App在后台根本不能‘独活’。除非你是微信QQ这样的,或者拉帮结伙使用极光个推这种可以相互拉活的,或者找大哥照着,接入官方推送渠道。

最后,期待统一推送联盟早日上线,拯救我们芸芸安卓程序员。

对了,我使用的是腾讯信鸽,在早8点晚7点左右消息延迟很大(超过半小时),甚至有丢消息的情况,其他时间接收正常。给他们的技术发邮件2天了都没回,打算换别家了。

腾讯信鸽是有小米华为魅族的通道的,所以我最先尝试的是信鸽。目前信鸽和个推比较,信鸽的效果还是比较好的,加了白名单在华为手机上也就坚持个3-5分钟,然后就收不到了。如果信鸽的服务器出现瓶颈,我们自己服务器就会尝试通过厂商通道再推送。信鸽可以一次性接入小米华为魅族的通道,比较方便。

刚才看一下魅族推送,魅族推送支持小米和华为通道,但是魅族的实名认证好麻烦,不像华为,支付宝授权一下就可以了。所以等实名认证过了,再试一下魅族推送。

在魅族推送的说明文档中看到了一下内容:

    二 统一推送配置
    AndroidManifest 配置
     <!-- 统一推送配置 -->
     <receiver android:name=".UpsReceiver">
     <intent-filter>
     <!-- 接收 push 消息 -->
     <action android:name="com.meizu.ups.push.intent.MESSAGE"
    />
     </intent-filter>
     </receiver>

难道是传说中的‘统一推送’?

突然有点小激动!!!