1.小米推送簡介
小米推送(MiPush)是小米公司向開發(fā)者提供的消息推送服務(wù),通過在云端與客戶端之間建立一條穩(wěn)定、可靠的長連接,為開發(fā)者提供向客戶端應(yīng)用實(shí)時(shí)推送消息的服務(wù),有效地幫助開發(fā)者觸達(dá)用戶,提升APP活躍度。
依托強(qiáng)大的服務(wù)器集群,以及多年在手機(jī)即時(shí)通訊領(lǐng)域的技術(shù)積累,小米在消息推送服務(wù)這一領(lǐng)域有著豐富的經(jīng)驗(yàn)和雄厚的實(shí)力。在保證推送消息的到達(dá)率及到達(dá)速度的同時(shí),我們還設(shè)計(jì)了一套基于業(yè)界最高標(biāo)準(zhǔn)加密算法的安全措施,讓應(yīng)用消息的傳輸更加安全可靠。
截止2019年底,小米推送累計(jì)接入應(yīng)用30000+,覆蓋設(shè)備數(shù)11億,每天發(fā)送消息110億條。
圖1 小米推送服務(wù)業(yè)務(wù)邏輯
2.產(chǎn)品優(yōu)勢
2.1 MIUI系統(tǒng)級通道
小米推送在MIUI上的長連接由系統(tǒng)維護(hù),能夠充分的保障通知欄消息在MIUI上的送達(dá)率。設(shè)備聯(lián)網(wǎng)的情況下,有效推送的送達(dá)率能達(dá)到90%以上。
2.2定制化消息樣式
支持長文字、大圖等富文本通知欄消息樣式,滿足不同開發(fā)者的個(gè)性化推送需求。
2.3穩(wěn)定、安全、快速、靈活
小米推送支持通知欄消息和透傳消息兩種消息類型,同時(shí)提供API接口和推送運(yùn)營平臺兩種消息下發(fā)途徑。SDK覆蓋Android、iOS客戶端及服務(wù)端主流語言,只需半天時(shí)間集成,可以幫助開發(fā)者更好的結(jié)合自身業(yè)務(wù)邏輯,滿足復(fù)雜業(yè)務(wù)場景需求。
2.4多平臺支持
小米推送服務(wù)的客戶端SDK基于標(biāo)準(zhǔn)的Android SDK,支持所有的Android2.2及以上的系統(tǒng)。同時(shí),我們也支持iOS版本的推送,目的是提供一整套有關(guān)推送消息的整合解決方案,讓開發(fā)者真正地做到推送無憂。iOS推送是基于蘋果的APNs服務(wù)之上封裝的一層服務(wù)。降低開發(fā)者使用iOS推送的門檻。同時(shí)服務(wù)端的接口實(shí)現(xiàn)了跨平臺,方便開發(fā)者跨平臺使用小米推送。
2.5全面的數(shù)據(jù)統(tǒng)計(jì)
推送運(yùn)營平臺提供包括APP數(shù)據(jù)和消息數(shù)據(jù)等多維度的統(tǒng)計(jì),幫助開發(fā)者更好的掌握應(yīng)用數(shù)據(jù),助力精細(xì)化運(yùn)營。
2.6自助調(diào)查工具
小米推送為開發(fā)者提供了一套完備的調(diào)查工具,可以輔助開發(fā)者自助查詢設(shè)備與消息的送達(dá)/在線情況,實(shí)時(shí)把控消息狀態(tài)。
3.推送功能介紹
3.1推送的消息類型
小米推送支持通知欄提醒和透傳消息兩種消息類型,同時(shí)提供運(yùn)營平臺及API兩種推送消息下發(fā)方式。
3.1.1通知欄消息
通知欄消息通過小米系統(tǒng)通道下發(fā),不需要應(yīng)用駐留后臺。
客戶端收到這類消息后,會直接在通知欄展現(xiàn)。用戶點(diǎn)擊彈出通知后,客戶端SDK會將消息中攜帶的數(shù)據(jù)傳遞給應(yīng)用,由應(yīng)用決定下一步的動(dòng)作。
通知欄消息展示效果如圖2所示,主要內(nèi)容包括消息標(biāo)題、摘要、應(yīng)用圖標(biāo)和時(shí)間。開發(fā)者可以自行定義具體展示內(nèi)容。同時(shí),針對每條消息,開發(fā)者也可以單獨(dú)定義是否響鈴、是否振動(dòng)、是否點(diǎn)亮呼吸燈,并且可以選擇響鈴的聲音。
注:在MIUI中,由于通知欄是由小米服務(wù)框架彈出,因此大、小圖標(biāo)均不可自定義。使用的聲音資源必須先內(nèi)置在應(yīng)用程序的安裝包中。
圖2 MIUI和原生Android上消息展示
關(guān)于通知欄消息有如下幾點(diǎn)說明:
·MIUI10以上,同一個(gè)App的所有通知欄消息會聚合成一個(gè)消息組,消息組最多支持展示10條消息,超過10條消息,會自動(dòng)刪除一條最老的消息并補(bǔ)上來一條新消息。
·消息組折疊狀態(tài)下默認(rèn)展示3條消息,多余的消息用+N標(biāo)識,N=消息總數(shù)-3。特別的,如果該App的消息組位于通知欄首位,則會展示5條消息,超過5條的多余消息用+N標(biāo)識。
·如果手動(dòng)點(diǎn)擊或刪除一條展示的消息,會自動(dòng)補(bǔ)充上來一條消息展示。
3.1.2透傳消息
透傳消息是指開發(fā)者可選擇不通過任何預(yù)定義的方式展現(xiàn),由應(yīng)用直接接收推送消息。利用透傳消息,開發(fā)者可自定義更多使用推送的方式和展現(xiàn)形式,從而能更為靈活地使用消息推送通道。
需要注意的是,在一些Android系統(tǒng)(如MIUI)中,受到系統(tǒng)自啟動(dòng)管理設(shè)置的限制,應(yīng)用不能在后臺自啟動(dòng)。在這類系統(tǒng)中,如果在發(fā)送消息的時(shí)候?qū)?yīng)的應(yīng)用沒有被啟動(dòng),透傳類消息將不能順利送達(dá)。因此,對于對送達(dá)率要求很高的消息,建議盡量采用通知欄提醒的方式推送消息。
注:在MIUI中,對于小米推送服務(wù)的通知欄提醒類消息,通知由系統(tǒng)級應(yīng)用“小米服務(wù)框架”彈出,不需要應(yīng)用駐留后臺。在非MIUI上,通知欄消息和透傳消息都需要應(yīng)用保留進(jìn)程。
3.2推送方式
小米推送支持標(biāo)簽(Topic)、RegID、別名(Alias)、Useraccount四種消息發(fā)送方式。
3.2.1基于標(biāo)簽的推送
標(biāo)簽(Topic)可以認(rèn)為是具有某些相同屬性的用戶集合,在應(yīng)用初始化時(shí)或運(yùn)行過程中,開發(fā)者可結(jié)合自己的業(yè)務(wù)特征,給用戶打上不同的標(biāo)簽(Topic)。
在推送消息時(shí),開發(fā)者可以結(jié)合每條消息的內(nèi)容和目標(biāo)用戶,選擇所對應(yīng)的標(biāo)簽,完成請求后,小米推送服務(wù)會向所有打上這一標(biāo)簽的用戶發(fā)送該消息,從而滿足精準(zhǔn)推送的需求。
注:
?標(biāo)簽不會主動(dòng)失效,只有開發(fā)者主動(dòng)調(diào)用退訂標(biāo)簽(unsubscribe)或設(shè)備標(biāo)識(RegID/alias/useraccount)失效才會取消;
?全部用戶消息同樣屬于標(biāo)簽消息(設(shè)備注冊時(shí)會注冊一個(gè)默認(rèn)標(biāo)簽用于發(fā)送全量消息);
?每個(gè)設(shè)備可訂閱標(biāo)簽的個(gè)數(shù)無上限;
?每個(gè)標(biāo)簽可對應(yīng)的設(shè)備數(shù)無上限;
?標(biāo)簽可以和RegID與alias對應(yīng);
?標(biāo)簽消息在消息有效期結(jié)束之前,可以停止發(fā)送。停止后不能繼續(xù)發(fā)送。只有標(biāo)簽消息可以停止,其余消息發(fā)送后不可停止。
3.2.2基于RegID的推送
RegID是小米推送為每個(gè)設(shè)備上的每個(gè)app注冊推送服務(wù)時(shí)生成的唯一標(biāo)識。
當(dāng)開發(fā)者需要給一個(gè)或多個(gè)具體的設(shè)備推送消息時(shí),可以使用基于RegID的推送,將個(gè)性化的信息推送給指定的設(shè)備。這種方式適用于需要為每個(gè)用戶訂制個(gè)性化推送的場景。
注:
?RegID是在客戶端向小米推送服務(wù)注冊時(shí),小米推送服務(wù)端根據(jù)設(shè)備標(biāo)識、AppID以及當(dāng)前時(shí)間戳生成,因此能夠保證每個(gè)設(shè)備上每個(gè)app對應(yīng)的regID都是不同的。
?RegID在應(yīng)用卸載或清除本地?cái)?shù)據(jù)后會重新生成;
?RegID在如下幾種情況下會被判斷失效:
①App卸載重裝或者清除數(shù)據(jù)后重新注冊,這種情況下會生成一個(gè)新的RegID,而老的RegID會失效;
②App調(diào)用了unregisterPush;
③在MIUI上,App卸載時(shí),如果能成功上報(bào),則RegID會被判定失效;
④設(shè)備超過3個(gè)月沒有和小米Push服務(wù)器建立長連接;
?可以通過feedback接口從小米推送服務(wù)后臺拉取失效RegID的列表;
?iOS SDK從2.2.2版本之后新增支持客戶端獲取RegID的方法:getRegID。
3.2.3基于別名(alias)的推送
別名(alias)是小米推送提供的一種個(gè)性化設(shè)定,開發(fā)者可以將用戶在應(yīng)用內(nèi)的賬號或其它用戶唯一標(biāo)識設(shè)定為用戶設(shè)備RegID的別名,在推送中可以直接基于別名進(jìn)行推送。
別名不僅方便開發(fā)者將推送與自有的賬號系統(tǒng)進(jìn)行關(guān)聯(lián),同時(shí)也避免了因需要保存設(shè)備RegID與自有帳號的對應(yīng)關(guān)系而額外帶來的開發(fā)和存儲成本。
注:
?alias與RegID(設(shè)備)一一對應(yīng),同一個(gè)alias不能對應(yīng)多個(gè)RegID,alias對應(yīng)的RegID以最后一次setalias對應(yīng)的RegID為準(zhǔn);
?alias失效的可能原因如下:
①主動(dòng)調(diào)用unsetalias;
②alias對應(yīng)的RegID已經(jīng)失效;
③設(shè)置alias不成功(調(diào)用setalias失?。?/span>
?alias只跟設(shè)備相關(guān),所以請使用用戶賬號作為alias時(shí),合理判斷alias可能失效的情況。
3.2.4基于useraccount的推送
useraccount主要適用于用戶多點(diǎn)登陸的情況,與alias類似,同樣可以作為應(yīng)用自身的用戶標(biāo)識與RegID建立映射關(guān)系。
典型的場景就是用戶的alias和user account都可以用來設(shè)置設(shè)備對應(yīng)的用戶賬號,所不同的是,一個(gè)alias只能對應(yīng)一臺設(shè)備,如果有多臺設(shè)備設(shè)置了同樣的alias,則最后一個(gè)設(shè)置成功的生效,其它設(shè)備就會失效。而一個(gè)user account可對應(yīng)20臺以內(nèi)的設(shè)備。因此如果應(yīng)用是單點(diǎn)登錄的,一個(gè)賬號只會在一臺設(shè)備上生效,用alias會比較合適。而如果產(chǎn)品需求是單賬號多點(diǎn)登錄同時(shí)接收消息,則用user account會更合適。
注:
useraccount最多可對應(yīng)20臺設(shè)備,并以最近注冊的20臺設(shè)備為準(zhǔn)(如果第21臺設(shè)備注冊,則第一個(gè)注冊的設(shè)備將會失效)。
3.3其他個(gè)性化功能
3.3.1定時(shí)推送
開發(fā)者可以根據(jù)業(yè)務(wù)需求自定義消息推送時(shí)間,可以選擇立即推送或指定時(shí)間推送。定時(shí)消息功能可以指定未來30天內(nèi)任意時(shí)間作為消息下發(fā)時(shí)間。定時(shí)消息在消息開始推送之前可以通過推送運(yùn)營平臺-消息記錄-詳情中取消。
3.3.2自定義消息有效期
開發(fā)者可以根據(jù)自己的業(yè)務(wù)需求設(shè)置每條推送消息的有效期,推送的目標(biāo)用戶在消息有效期內(nèi)網(wǎng)絡(luò)在線就會收到消息。消息有效期最長14天。如果應(yīng)用沒有單獨(dú)設(shè)置一條消息的有效期,小米推送的默認(rèn)有效期也是14天。
3.3.3自定義消息接收時(shí)間
小米推送支持為每個(gè)客戶端設(shè)定可接收推送時(shí)間,開發(fā)者可以設(shè)置接收消息推送時(shí)間段,不在該時(shí)間段的推送消息會被緩存起來,到了合適的時(shí)段再向App推送被緩存的消息;
應(yīng)用內(nèi)設(shè)置免打擾時(shí)段的功能即可以通過自定義消息接收時(shí)間實(shí)現(xiàn)。
3.3.4通知分類
通知分類用來控制多條消息在通知欄內(nèi)的替換關(guān)系。
相同通知分類消息會存在替換(新的消息會覆蓋之前的),不同類通知可以在通知欄并存。最多可以有10001類通知并存。
因此,如果需要多條通知在通知欄內(nèi)并存,請?jiān)谕扑蜁r(shí)將將這些通知設(shè)置為不同的分類。
3.3.5自定義鍵值對
開發(fā)者可以自己輸入一些自定義的鍵值對(key-value),在發(fā)送消息時(shí)傳給客戶端/服務(wù)端??蛻舳?服務(wù)端可以根據(jù)這些key-value可完成一些相應(yīng)的操作。
3.3.6自定義聲音、振動(dòng)、呼吸燈
開發(fā)者可以自由控制推送消息到達(dá)時(shí)的提醒方式,同時(shí)可以自定義消息提醒的提示音。
注:自定義提示音只能調(diào)用客戶端存儲的資源,需要由開發(fā)者自己制定資源位置。
3.3.7 AB test多文案推送
多文案推送方式是小米推送提供的通知欄消息自動(dòng)化文案優(yōu)選工具,旨在幫助開發(fā)者提高通知消息點(diǎn)擊。開發(fā)者可在同一個(gè)推送計(jì)劃中添加2-5條文案。推送開始后的前15分鐘會進(jìn)行預(yù)發(fā)送,每條文案發(fā)送相同數(shù)量的設(shè)備,15分鐘過后系統(tǒng)會自動(dòng)選擇當(dāng)前點(diǎn)擊率最高的消息作為最終文案,發(fā)送給剩余的設(shè)備。
說明:
注:
·預(yù)發(fā)送總量與目標(biāo)總量的關(guān)系需要開發(fā)者自行保證。如果目標(biāo)設(shè)備數(shù)<文案條數(shù)x預(yù)發(fā)送數(shù),則會直接按照文案順序,以預(yù)發(fā)送數(shù)依次進(jìn)行發(fā)送,發(fā)完為止。
·每條文案的測試消息會對應(yīng)相應(yīng)的jobkey,可在推送運(yùn)營平臺計(jì)劃詳情頁進(jìn)行查詢。
3.3.8平緩?fù)扑?/strong>
開啟平緩?fù)扑凸δ?,開發(fā)者可自行控制消息發(fā)送速度,讓消息勻速的送達(dá)至設(shè)備,以降低大量消息對服務(wù)器造成的負(fù)擔(dān)。
平緩?fù)扑椭С置棵?000~100000條消息,默認(rèn)每秒3000條;
3.3.9富文本消息
富文本消息包括大文本和大圖兩種樣式,并支持添加操作按鈕。目前已經(jīng)在小米推送國內(nèi)和海外運(yùn)營平臺上線,同時(shí)也支持通過服務(wù)端API發(fā)送(Java SDK 2.2.20及以上版本)。國內(nèi)版和海外版部分功能有所區(qū)別。
注:推送運(yùn)營平臺AB test多文案功能只支持默認(rèn)類型消息,不適用于富文本消息。
3.3.10個(gè)性化場景推送
根據(jù)網(wǎng)絡(luò)環(huán)境推送
開發(fā)者可以根據(jù)設(shè)備所處的環(huán)境進(jìn)行推送:可以選擇僅推送給處于WiFi環(huán)境下的用戶。典型場景舉例:視頻類app可以推給WiFi條件下的用戶,提升點(diǎn)擊率。
按照應(yīng)用版本推送
開發(fā)者可以通過指定應(yīng)用的版本號來進(jìn)行推送,可以選擇某些版本接收消息/不接受消息。
注:版本號需要開發(fā)者自己指定。
按照機(jī)型推送
開發(fā)者可以通過指定手機(jī)的品牌與機(jī)型來進(jìn)行推送,可以選擇某些版本接收消息/不接受消息。
注:model需要開發(fā)者自己指定。
4.使用推送
4.1啟用推送
登錄小米推送官網(wǎng),注冊開發(fā)者賬號并創(chuàng)建App,通過管理控制臺啟用推送服務(wù)。
注:小米推送服務(wù)的開通與使用與應(yīng)用是否上架無關(guān),應(yīng)用不在應(yīng)用商店上架也可使用小米推送。更改應(yīng)用的歸屬關(guān)系、刪除應(yīng)用等行為,請通過【管理控制臺】-【小米應(yīng)用商店】-【更多服務(wù)】進(jìn)行操作。
4.2下載并集成客戶端SDK
SDK下載地址:http://dev.xiaomi.com/mipush/downpage/
SDK集成和調(diào)試:
小米推送服務(wù)的客戶端SDK集成非常簡單,僅需一位工程師0.5天的時(shí)間即可完成客戶端SDK的集成。
同時(shí)開發(fā)者也可以在接入SDK之前,通過接入demo的方式,快速體驗(yàn)小米推送的實(shí)際效果(僅限Android設(shè)備)。
4.3推送實(shí)現(xiàn)方式
4.3.1 API推送
通過小米推送提供的API接口,開發(fā)者可以自行構(gòu)建并發(fā)送消息。包括個(gè)性化功能實(shí)現(xiàn)、獲取統(tǒng)計(jì)數(shù)據(jù)、追蹤消息狀態(tài)、拉取失效數(shù)據(jù)等。小米推送官方提供了JAVA服務(wù)端SDK版本,如果無法滿足需求,我們同樣提供了http API,開發(fā)者可以在底層接口上自行進(jìn)行封裝,滿足各種定制化的推送需求。
4.3.2推送運(yùn)營平臺
推送運(yùn)營平臺是小米推送提供的管理和使用推送業(yè)務(wù)的一站式平臺,通過運(yùn)營平臺開發(fā)者可以實(shí)現(xiàn)應(yīng)用管理、消息下發(fā)、數(shù)據(jù)統(tǒng)計(jì)、使用人員管理等功能。
推送運(yùn)營平臺網(wǎng)頁版推送工具可以幫助開發(fā)者通過運(yùn)營平臺快速實(shí)現(xiàn)消息下發(fā)。
支持通知欄消息和透傳消息兩種類型,同時(shí)支持多種推送方式和個(gè)性化推送。
推送運(yùn)營平臺地址:http://admin.xmpush.xiaomi.com/
5.推送統(tǒng)計(jì)
小米推送支持推送數(shù)據(jù)實(shí)時(shí)統(tǒng)計(jì)功能,包括推送數(shù)據(jù)、APP數(shù)據(jù)、消息記錄等維度,幫助開發(fā)者更好的監(jiān)控和分析業(yè)務(wù)現(xiàn)狀。
開發(fā)者可以根據(jù)業(yè)務(wù)需求,登錄推送運(yùn)營后臺查看,或者通過API接口獲取。