查看原文
其他

来自悦跑圈的多推送 SDK 方案 -- MixPush

2017-08-15 lamWiki 承香墨影

作者简介

本文由 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、小米推送

目前通知类的消息, 通知的图标展示规则如下:

  1. 如果 App 中同时存在名为 mipush_notification 和 mipush_small_notification 的drawable 文件,则使用 mipush_notification 的 drawable 作为通知的大图标,mipush_small_notification 的 drawable 作为通知的小图标。

  2. 如果 App 中只存在其中一个 drawable 文件,则使用该 drawable 作为通知的图标。

  3. 果 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 包到项目。

服务端推送测试

如果你不是使用以上三个推送,也可以根据接口自己来实现。

推荐阅读:

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存