来自悦跑圈的多推送 SDK 方案 -- MixPush
作者简介
本文由 lamWiki 原创并授权发布,未经原作者允许请勿转载。
本文将现有的多家推送 SDK 做了个整合,共享系统级推送,送达率更高。基本上多推送的方案也就是这样了,希望大家喜欢。
lamWiki 的博客地址:
http://www.jianshu.com/p/011d9c0994a8
一、前言
消息推送是 App 运营的重要一环,为了优化消息推送成功率,降低电量和流量消耗,系统级的推送服务显得尤为重要。小米 和 魅族 由此推出了自家的推送平台,在 MIUI 和 Flyme 上共享系统级推送服务,让 APP 在被杀死的情况下也能正常收到推送消息。以后也会有越来越多的手机厂商会推出自己的推送平台,MixPush 由此而生,降低开发者集成多家推送的开发成本,提高推送的到达率。
项目开源 Github
https://github.com/joyrun/MixPush
二、推荐推送平台
1、小米推送
支持所有的 Android 平台,特点是在 MIUI 系统上共享系统级推送,APP被杀死也可以收到通知栏推送。
https://dev.mi.com/console/appservice/push.html
2、魅族推送
仅仅支持 Flyme 系统,不能在非 Flyme 系统上使用,特点是在 Flyme 系统共享系统级推送,APP 被杀死也可以收到通知栏推送。
https://open.flyme.cn/open-web/views/push.html
3、个推推送
Android 平台上最大的第三方推送平台,推送消息稳定。
http://www.getui.com/cn/index.html
原理图
三、原理分析以及使用
MixPush 只是一个降低集成多家推送服务的框架,自身不拥有推送功能,所有的推送功能都是依靠各个推送平台来实现。从原理图可以看到,客户端 APP 会根据不同的手机注册不同的推送平台,不能同时注册两个推送服务,避免重复收到推送。而服务端不用考虑需要推送消息的用户手机属于何种平台,一律向各个平台发起推送,而客户端会根据注册的平台只会收到单一平台的推送消息。
3.1 Android客户端配置
添加仓库地址,修改根目录的build.gradle文件:
选择推送平台,如果没有可以参考源码自行实现,添加依赖:
创建一个继承 MixPushIntentService 的服务类,用于接收事件:
配置 AndroidManifest.xml
,注册服务类。
在 Application 类进行初始化,如果没有请自行创建:
修改 App 的 build.gradle 文件,配置 个推 的 APP ID 等信息。
3.2 定制通知栏通知的图标
1、小米推送
目前通知类的消息, 通知的图标展示规则如下:
如果 App 中同时存在名为 mipush_notification 和 mipush_small_notification 的drawable 文件,则使用 mipush_notification 的 drawable 作为通知的大图标,mipush_small_notification 的 drawable 作为通知的小图标。
如果 App 中只存在其中一个 drawable 文件,则使用该 drawable 作为通知的图标。
如果 App 中不存在这两个 drawable 文件,则使用 App 的 icon 作为通知的图标。在MIUI 中,通知栏图标统一显示为 App 的 icon ,不可以定制。
2、个推推送
为了修改默认的通知栏顶部提示小图标,请在资源目录的 res/drawable-ldpi/ 、 res/drawable-mdpi/ 、 res/drawable-hdpi/ 、 res/drawable-xhdpi/ 、 res/drawable-xxhdpi/ 等各分辨率目录下,放置相应尺寸的文件名为 push.png
图片。
ldpi: 48*48
mdpi: 64*64
hdpi: 96*96
xhdpi: 128*128
xxhdpi: 192*192
3、魅族推送
和小米推送的一样。
魅族推送只支持 Flyme 系统,务必需要注意。
3.3 服务端配置测试
目前只有 Java 的服务端代码,如果服务端使用其它语言,请参考设计思路自己开发。
复制代码和 jar 包到项目。
服务端推送测试
如果你不是使用以上三个推送,也可以根据接口自己来实现。
推荐阅读: