Android融合推送MixPush SDK集成多家推送平臺(tái)播急,共享系統(tǒng)級(jí)推送脓钾,殺死APP也能收到推送

消息推送是App運(yùn)營(yíng)的重要一環(huán),為了優(yōu)化消息推送成功率桩警,降低電量和流量消耗可训,系統(tǒng)級(jí)的推送服務(wù)顯得尤為重要。小米和魅族由此推出了自家的推送平臺(tái)捶枢,在MIUI和Flyme上共享系統(tǒng)級(jí)推送服務(wù)握截,讓APP在被殺死的情況下也能正常收到推送消息。以后也會(huì)有越來(lái)越多的手機(jī)廠(chǎng)商會(huì)推出自己的推送平臺(tái)烂叔,MixPush由此而生谨胞,降低開(kāi)發(fā)者集成多家推送的開(kāi)發(fā)成本,提高推送的到達(dá)率蒜鸡。

項(xiàng)目開(kāi)源Github

https://github.com/joyrun/MixPush

推薦推送平臺(tái)

小米推送

支持所有的Android平臺(tái)胯努,特點(diǎn)是在MIUI系統(tǒng)上共享系統(tǒng)級(jí)推送牢裳,APP被殺死也可以收到通知欄推送。
https://dev.mi.com/console/appservice/push.html

魅族推送

僅僅支持Flyme系統(tǒng)叶沛,不能在非Flyme系統(tǒng)上使用蒲讯,特點(diǎn)是在Flyme系統(tǒng)共享系統(tǒng)級(jí)推送,APP被殺死也可以收到通知欄推送灰署。
https://open.flyme.cn/open-web/views/push.html

個(gè)推推送

Android平臺(tái)上最大的第三方推送平臺(tái)判帮,推送消息穩(wěn)定。
http://www.getui.com/cn/index.html

原理圖
image.png
原理分析

MixPush只是一個(gè)降低集成多家推送服務(wù)的框架溉箕,自身不擁有推送功能晦墙,所有的推送功能都是依靠各個(gè)推送平臺(tái)來(lái)實(shí)現(xiàn)。從原理圖可以看到肴茄,客戶(hù)端APP會(huì)根據(jù)不同的手機(jī)注冊(cè)不同的推送平臺(tái)晌畅,不能同時(shí)注冊(cè)兩個(gè)推送服務(wù),避免重復(fù)收到推送独郎。而服務(wù)端不用考慮需要推送消息的用戶(hù)手機(jī)屬于何種平臺(tái)踩麦,一律向各個(gè)平臺(tái)發(fā)起推送枚赡,而客戶(hù)端會(huì)根據(jù)注冊(cè)的平臺(tái)只會(huì)收到單一平臺(tái)的推送消息氓癌。

Android客戶(hù)端配置

添加倉(cāng)庫(kù)地址,修改根目錄的build.gradle文件:

    allprojects {
        repositories {
            ...
                        maven {url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"}
            maven { url 'https://jitpack.io' }
        }
    }

選擇推送平臺(tái)贫橙,如果沒(méi)有可以參考源碼自行實(shí)現(xiàn)贪婉,添加依賴(lài):


dependencies {
    compile 'com.github.joyrun.MixPush:client-core:1.0.0' //必填
    compile 'com.github.joyrun.MixPush:client-mipush:1.0.0' // 小米推送
    compile 'com.github.joyrun.MixPush:client-getui:1.0.0' // 個(gè)推
    compile 'com.github.joyrun.MixPush:client-meizu:1.0.0' // 魅族推送,魅族推送只支持Flyme系統(tǒng)卢肃,務(wù)必需要注意
}

創(chuàng)建一個(gè)繼承MixPushIntentService的服務(wù)類(lèi)疲迂,用于接收事件:


public class PushIntentService extends MixPushIntentService {
    @Override
    public void onReceivePassThroughMessage(MixPushMessage message) {
        Log.e(TAG, "收到透?jìng)飨?-> " + message.getContent());
    }

    @Override
    public void onNotificationMessageClicked(MixPushMessage message) {
        Log.e(TAG, "通知欄消息點(diǎn)擊 -> " + message.getContent());
    }
}

配置AndroidManifest.xml,注冊(cè)服務(wù)類(lèi)

<manifest>
    <application ...>
        ...
        <service android:name=".PushIntentService"/>
    </application>
</manifest>

在A(yíng)pplication類(lèi)進(jìn)行初始化莫湘,如果沒(méi)有請(qǐng)自行創(chuàng)建:

public class DemoApplication extends Application {
    public static final String MEIZU_APP_ID = "<MEIZU_APP_ID>";
    public static final String MEIZU_APP_KEY = "<MEIZU_APP_KEY>";
    public static final String MIPUSH_APP_ID = "<MIPUSH_APP_ID>";
    public static final String MIPUSH_APP_KEY = "<MIPUSH_APP_KEY>";
    
    @Override
    public void onCreate() {
        super.onCreate();
        initPush();
    }
    private void initPush() {
        MixPushClient.addPushManager(new MeizuPushManager(MEIZU_APP_KEY, MEIZU_APP_ID));
        MixPushClient.addPushManager(new MiPushManager(MIPUSH_APP_ID, MIPUSH_APP_KEY));
        MixPushClient.addPushManager(new GeTuiManager());
        MixPushClient.setPushIntentService(PushIntentService.class);
        MixPushClient.setSelector(new MixPushClient.Selector() {
            @Override
            public String select(Map<String, MixPushManager> pushAdapterMap, String brand) {
                // return GeTuiManager.NAME;
                //底層已經(jīng)做了小米推送尤蒿、魅族推送、個(gè)推判斷幅垮,也可以按照自己的需求來(lái)選擇推送
                return super.select(pushAdapterMap, brand);
            }
        });
        // 配置接收推送消息的服務(wù)類(lèi)
        MixPushClient.setPushIntentService(PushIntentService.class);
        // 注冊(cè)推送
        MixPushClient.registerPush(this);
        // 綁定別名腰池,一般是填寫(xiě)用戶(hù)的ID,便于定向推送
        MixPushClient.setAlias(this, getUserId());
        // 設(shè)置標(biāo)簽忙芒,用于對(duì)用戶(hù)進(jìn)行劃分
        MixPushClient.setTags(this,"廣東");
    }
    private String getUserId(){
        return "103";
    }
}

修改APP的build.gradle文件示弓,配置個(gè)推的APP ID等信息

android {
    defaultConfig {
        ...
        manifestPlaceholders = [
                GETUI_APP_ID : "<GETUI_APP_ID>",
                GETUI_APP_KEY : "<GETUI_APP_KEY>",
                GETUI_APP_SECRET : "<GETUI_APP_SECRET>",
                PACKAGE_NAME: "<APP的包名>"
        ]
    }
}

定制通知欄通知的圖標(biāo)

小米推送

目前通知類(lèi)的消息, 通知的圖標(biāo)展示規(guī)則如下:

  1. 如果app中同時(shí)存在名為mipush_notification和mipush_small_notification的drawable文件呵萨,則使用mipush_notification的drawable作為通知的大圖標(biāo)奏属,mipush_small_notification的drawable作為通知的小圖標(biāo)。
  2. 如果app中只存在其中一個(gè)drawable文件潮峦,則使用該drawable作為通知的圖標(biāo)囱皿。
  3. 如果app中不存在這兩個(gè)drawable文件勇婴,則使用app的icon作為通知的圖標(biāo)。在MIUI中嘱腥,通知欄圖標(biāo)統(tǒng)一顯示為app的icon咆耿,不可以定制。
個(gè)推推送

為了修改默認(rèn)的通知欄頂部提示小圖標(biāo)爹橱,請(qǐng)?jiān)谫Y源目錄的res/drawable-ldpi/萨螺、res/drawable-mdpi/、res/drawable-hdpi/愧驱、res/drawable-xhdpi/慰技、res/drawable-xxhdpi/等各分辨率目錄下,放置相應(yīng)尺寸的文件名為push.png圖片组砚。

ldpi:    48*48
mdpi:    64*64
hdpi:    96*96
xhdpi:   128*128
xxhdpi:  192*192
魅族推送

和小米推送的一樣吻商。

注意

  1. 魅族推送只支持Flyme系統(tǒng),務(wù)必需要注意糟红。

服務(wù)端配置測(cè)試

目前只有Java的服務(wù)端代碼艾帐,如果服務(wù)端使用其它語(yǔ)言,請(qǐng)參考設(shè)計(jì)思路自己開(kāi)發(fā)盆偿。

復(fù)制代碼和jar包到項(xiàng)目柒爸。

服務(wù)端推送測(cè)試
public class MixPushServerTest {
    public static final String APP_PACKAGE_NAME = "<APP的包名>";
    public static final String MIPUSH_APP_SECRET_KEY = "<MIPUSH_APP_SECRET_KEY>";

    public static final Long MEIZU_APP_ID = <MEIZU_APP_ID>;
    public static final String MEIZU_APP_SECRET_KEY = "<MEIZU_APP_SECRET_KEY>";

    public static final String GETUI_APP_ID = "<GETUI_APP_ID>";
    public static final String GETUI_APP_KEY = "<GETUI_APP_KEY>";
    public static final String GETUI_MASTER_SECRET = "<GETUI_MASTER_SECRET>";
    public static final String GETUI_URL = "http://sdk.open.api.igexin.com/apiex.htm";
    static {
        MixPushServer.addPushServerManager(new MiPushServerManager(APP_PACKAGE_NAME, MIPUSH_APP_SECRET_KEY));
        MixPushServer.addPushServerManager(new MeizuPushServerManager(MEIZU_APP_ID, MEIZU_APP_SECRET_KEY));
        MixPushServer.addPushServerManager(new GeTuiPushServerManager(GETUI_APP_ID, GETUI_APP_KEY, GETUI_MASTER_SECRET, GETUI_URL));
    }
    String title = "title";
    String description = "description";
    String json = "{\"name\":\"Wiki\",\"age\":24}";
    @Test
    public void sendNotifyToAll() throws Exception {
        MixPushServer.sendNotifyToAll(title, description, json);
    }
    @Test
    public void sendMessageToAll() throws Exception {
        MixPushServer.sendMessageToAll(json);
    }
    @Test
    public void sendMessageToAlias() throws Exception {
        MixPushServer.sendMessageToAlias("100", json);
    }
    @Test
    public void sendMessageToTags() throws Exception {
        MixPushServer.sendMessageToTags("廣東", json);
    }
    @Test
    public void sendNotifyToAlias() throws Exception {
        MixPushServer.sendNotifyToAlias("100", title, description, json);
    }
    @Test
    public void sendNotifyToTags() throws Exception {
        MixPushServer.sendNotifyToTags("廣東", title, description, json);
    }
}

如果你不是使用以上三個(gè)推送,也可以根據(jù)接口自己來(lái)實(shí)現(xiàn)事扭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捎稚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子求橄,更是在濱河造成了極大的恐慌今野,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐农,死亡現(xiàn)場(chǎng)離奇詭異条霜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涵亏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)宰睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人溯乒,你說(shuō)我怎么就攤上這事夹厌。” “怎么了裆悄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵矛纹,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我光稼,道長(zhǎng)或南,這世上最難降的妖魔是什么孩等? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮采够,結(jié)果婚禮上肄方,老公的妹妹穿的比我還像新娘。我一直安慰自己蹬癌,他們只是感情好权她,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著逝薪,像睡著了一般隅要。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上董济,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天步清,我揣著相機(jī)與錄音虏肾,去河邊找鬼封豪。 笑死撑毛,一個(gè)胖子當(dāng)著我的面吹牛藻雌,可吹牛的內(nèi)容都是我干的斩个。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼做个,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滚局!你這毒婦竟也來(lái)了藤肢?” 一聲冷哼從身側(cè)響起省骂,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怠惶,失蹤者是張志新(化名)和其女友劉穎轧粟,沒(méi)想到半個(gè)月后策治,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體览妖,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡府树,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垄潮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逃贝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沐扳,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布舱痘,位于F島的核電站,受9級(jí)特大地震影響渊胸,放射性物質(zhì)發(fā)生泄漏旬盯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一翎猛、第九天 我趴在偏房一處隱蔽的房頂上張望胖翰。 院中可真熱鬧,春花似錦切厘、人聲如沸萨咳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)培他。三九已至,卻和暖如春遗座,著一層夾襖步出監(jiān)牢的瞬間舀凛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工员萍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腾降,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓碎绎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抗果。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筋帖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評(píng)論 25 707
  • 推送技術(shù)產(chǎn)生場(chǎng)景: --服務(wù)器端主動(dòng)性: 客戶(hù)端與服務(wù)器交互都是客戶(hù)端主動(dòng)的, 服務(wù)器一般不能主動(dòng)與客戶(hù)端進(jìn)行數(shù)據(jù)...
    原軍鋒閱讀 34,506評(píng)論 4 60
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開(kāi)發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋(píng)果官方的步伐冤馏,SD...
    Isspace閱讀 6,696評(píng)論 10 16
  • 極光推送是為 App 提供第三方推送服務(wù)的平臺(tái)之一墩划,它提供四種消息形式:通知,自定義消息嗡综,富媒體和本地通知乙帮。筆者將...
    末日云游閱讀 5,634評(píng)論 3 13
  • 早上寂寞7點(diǎn)鐘的公路 綠色牌子上的箭頭通往 下一站 一個(gè)撩動(dòng)你心弦的地名 拉巴湖 越過(guò)這片綠野 就會(huì) 到達(dá)這個(gè)...
    陌上木木閱讀 313評(píng)論 1 6