一个融合多家推送sdk的库:RePush

推送一直是拉活用户的重要运营手段,相比IOS的系统推送通道,Android的推送实在让开发者头疼。各大厂商均定制本身的Rom,除了微信这种霸王级别的应用,其余的应用想要保活推送通道可谓是难上加难。那对于推送的实时性要求较高的应用怎么办呢?OK,你们想到了如下几种姿式: 1.本身作应用的保活,好比提升进程级别、开一个通知栏的Service等 2.找公司的BD与各大厂家合做,将本身的应用包名加入到厂家的白名单中,让系统来提供保活 3.本身开发一波大的SDK,将市面上常见的设备厂商的推送SDK进行融合,根据不一样的设备厂商选择对应的厂商SDK,共享系统的推送通道。 4.待补充ing... 客观的看待上述几种姿式,仍是第三个最不容易翻车(固然若是大家家的BD足够6,可让各大厂商给大家作应用保活,就当我在说梦话)。So,这段时间研究了一波,本身撸了一个库:RePush(没错,叫RePush是由于老婆大人的名字有个睿.恩,秀恩爱就是要这么直接)。git

注:悦跑圈团队开源了一个MixPush,架构挺不错的,我也借鉴了一波github

开始预调研各大厂家的Push

小米

小米设备占比仍是蛮大的,因此集成他们的SDK毋庸置疑。幸亏小米的推送SDK作的是很完善的,集成没费多少功夫。 小米推送平台地址 注:我的开发者须要提交身份证等证实文件作实名认证;企业的须要上传一部分资质,小米审核经过以后就能够开心浪了。客观讲小米的推送作的很是良心,功能比较完善,你们能够直接看个人代码实现。bash

华为

趁着个人良心还热乎,我敢说华为的推送是我见过最坑的,没有之一。 华为推送平台微信

  • 不支持别名
  • 不支持标签
  • 若是你想群发消息,只能将客户端的token上报给服务端,服务端遍历token挨个推送
  • 若是用户想关闭推送,你也只能将该用户的token上报给服务端,服务端将该token从表中剔除
  • 在meta9等设备上,在咱们的app没有得到自启动权限的状况下,当app被系统彻底干掉时,收到推送后用户点击推送并不会触发HuaweiPushRevicer中的onEvent方法。这就形成开发者没法处理点击后的跳转事件。我电话咨询了下华为的开发人员,他们说建议咱们使用自定义事件(即Uri)来传递信息。这块我已经处理好了,详见代码中的PushHandlerActivity。

友盟

所谓的推送N+1策略就是指N个厂家的推送加一个第三方的推送,相信你们的App里面都有友盟统计吧,顺手集成上他们的SDK也不是什么难事。客观讲友盟的推送坑不是不少。你们看代码吧。架构

RePush的使用

写在前面:须要你们全局搜索"repush_custome",将涉及到的值改为本身在第三方平台上申请的值。

  1. import module(repush_master必须)
  2. 修改app下的build.gradle文件加入依赖
  3. 继承RePushIntentService实现本身的点击逻辑。例如
public class PushHandlerService extends RePushIntentService {
    @Override
    public void onReceivePassThroughMessage(RePushMessage message) {
        Toast.makeText(getApplicationContext(), "客户端收到了透传消息" + message.getContent(), Toast.LENGTH_SHORT).show();
        Logger.e("收到透传消息 -> " + message.getPlatform());
        Logger.e("收到透传消息 -> " + message.getContent());
    }

    @Override
    public void onNotificationMessageClicked(RePushMessage message) {
        Logger.e("通知栏消息点击 -> " + message.getPlatform());
        Logger.e("通知栏消息点击 -> " + message.toString());
    }

    @Override
    public void onToken(RePushMessage token) {
        SharePrefUtil.saveString("token", token.getToken());
        Log.e(TAG, "接收到了token -> " + token.getToken() + " " + RePushMaster.getCurrentPlatForm());
    }

}
复制代码
  1. 自定义的Application中的onCreate中加入初始化代码。注意:第三方推送的SDK是可插拔的,须要哪家的sdk直接addPushClient就行了.
private void initPush() {
        //输入你在小米申请的appid & appkey
        RePushMaster.addPushClient(new MiPushClient("repush_costom", "repush_custom"));
        RePushMaster.addPushClient(new HuaWeiClient());
        RePushMaster.addPushClient(new UMengClient());
        RePushMaster.setSelector(new RePushMaster.ReSelector() {
            @Override
            public String select(Map<String, RePushClient> pushAdapterMap, String brand) {
                //已完成根据设备选择sdk的逻辑,能够替换成本身的选择逻辑
                return super.select(pushAdapterMap, brand);
            }
        });
        // 配置接收推送消息的服务类
        RePushMaster.setPushIntentService(PushHandlerService.class);
        // 注册推送
        RePushMaster.registerPush(this);

    }
复制代码

5.在Activity中开始使用: 打开推送: RePushMaster.enable(this); 关闭推送: RePushMaster.disable(this); 设置别名: RePushMaster.setAlias(this, "alias"); 设置标签: RePushMaster.setTags(this, "tag"); 获取token: SharePrefUtil.getString("token", "token is null");app

6.服务端的同窗就不用管太多了,加入大家的客户端中集成了华为 小米 友盟三家的推送,那就分别调用这三家服务端的sdk进行推送就能够了。ide

关于集成其余第三方的SDK

因为时间缘由,本项目并无集成市面上全部的push sdk,例如:极光、个推等。若是你的项目里面用到了这些sdk,能够实现RePushClient接口进行自定义。gradle

代码传送门(欢迎star,拍砖)

代码地址ui

About Me

contact way value
mail weixinjie1993@gmail.com
wechat W2006292
github https://github.com/weixinjie
blog https://juejin.im/user/57673c83207703006bb92bf6
相关文章
相关标签/搜索