推送一直是拉活用戶的重要運營手段,相比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 |