推送一直是拉活用户的重要运营手段,相比IOS的系统推送通道,Android的推送实在让开发者头疼。各大厂商均定制本身的Rom,除了微信这种霸王级别的应用,其余的应用想要保活推送通道可谓是难上加难。那对于推送的实时性要求较高的应用怎么办呢?OK,你们想到了如下几种姿式: 1.本身作应用的保活,好比提升进程级别、开一个通知栏的Service等 2.找公司的BD与各大厂家合做,将本身的应用包名加入到厂家的白名单中,让系统来提供保活 3.本身开发一波大的SDK,将市面上常见的设备厂商的推送SDK进行融合,根据不一样的设备厂商选择对应的厂商SDK,共享系统的推送通道。 4.待补充ing... 客观的看待上述几种姿式,仍是第三个最不容易翻车(固然若是大家家的BD足够6,可让各大厂商给大家作应用保活,就当我在说梦话)。So,这段时间研究了一波,本身撸了一个库:RePush(没错,叫RePush是由于老婆大人的名字有个睿.恩,秀恩爱就是要这么直接)。git
注:悦跑圈团队开源了一个MixPush,架构挺不错的,我也借鉴了一波github
小米设备占比仍是蛮大的,因此集成他们的SDK毋庸置疑。幸亏小米的推送SDK作的是很完善的,集成没费多少功夫。 小米推送平台地址 注:我的开发者须要提交身份证等证实文件作实名认证;企业的须要上传一部分资质,小米审核经过以后就能够开心浪了。客观讲小米的推送作的很是良心,功能比较完善,你们能够直接看个人代码实现。bash
趁着个人良心还热乎,我敢说华为的推送是我见过最坑的,没有之一。 华为推送平台微信
所谓的推送N+1策略就是指N个厂家的推送加一个第三方的推送,相信你们的App里面都有友盟统计吧,顺手集成上他们的SDK也不是什么难事。客观讲友盟的推送坑不是不少。你们看代码吧。架构
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());
}
}
复制代码
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
因为时间缘由,本项目并无集成市面上全部的push sdk,例如:极光、个推等。若是你的项目里面用到了这些sdk,能够实现RePushClient接口进行自定义。gradle
代码地址ui
contact way | value |
---|---|
weixinjie1993@gmail.com | |
W2006292 | |
github | https://github.com/weixinjie |
blog | https://juejin.im/user/57673c83207703006bb92bf6 |