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