以下為一些常見的技術問題解答及常見概念的理解,對推送有疑問的開發(fā)者可以自行Ctrl+F搜索關鍵字找尋解答。
一、概況問題
1.如何申請接入?
感謝您選擇小米推送,點此查看接入指南(https://dev.mi.com/console/doc/detail?pId=68);
2.小米推送收費嗎?
小米推送的基礎服務目前是免費的。
3.小米推送目前支持哪些平臺?
目前支持iOS和Android兩大平臺。
4.如何刪除推送后臺應用?
您可以在開放平臺——管理控制臺——小米應用商店,選擇你要刪除的應用,點擊“更多服務”,即可刪除該應用。
5.如何衡量推送的效果,提供哪些數(shù)據(jù)統(tǒng)計結果?
小米推送目前提供的數(shù)據(jù)統(tǒng)計如下:
1)推送數(shù)據(jù):當日實時的推送量(區(qū)分單發(fā)和群發(fā))和送達量,歷史每天的推送量(區(qū)分單發(fā)和群發(fā))和送達量;
2)消息記錄:每條消息的計劃推送量、送達量和送達率、點擊量和點擊率;
3)用戶數(shù)據(jù):需要開發(fā)者選擇啟用才開始記錄,包括當日實時在線數(shù)和最高在線數(shù),歷史每天的最高在線數(shù)、新增用戶數(shù)和日活躍用戶數(shù)(推送的日活定義為當日長連接在線過的設備)歷史數(shù)據(jù)支持自定義時間段的查詢和導出xls文件。
詳細可以參考:小米推送統(tǒng)計指標說明文檔(https://dev.mi.com/console/doc/detail?pId=341)
6.小米推送服務有哪些限制?
目前針對首批合作開發(fā)者,小米推送服務沒有設置任何推送頻率的使用限制。而且所提供的推送服務完全免費。對于單條消息,可攜帶的數(shù)據(jù)量最大不能超過4KB。
二、概念解釋
1.關于送達率
1.1.小米推送的送達率是怎么計算的?
小米推送送達率=本次推送真正送達的設備數(shù)/所覆蓋的所有設備數(shù);
如果目標對象的選取是所有用戶,那分母就是歷史上所有激活過推送服務的有效設備數(shù);如果是按照標簽選取的,那分母是歷史上所有訂閱過這個標簽的有效設備數(shù);如果是按照別名或者regID來選取,那么分母就是所請求的所有合法的別名或regID。
1.2.有哪些影響送達率的因素?
按照送達率計算方式,會有如下幾個影響送達率的因素:
1)應用的留存率。已經(jīng)卸載了app的設備,肯定是推送不到的,按照目前的計算方式,大部分的卸載設備會被計入分母(計劃推送數(shù))當中。
2)應用所在設備的聯(lián)網(wǎng)情況。如果在消息有效期內(nèi),設備一直不聯(lián)網(wǎng),那消息也是不能送達的,但也會被計入分母當中。
3)消息的有效期。有效期越短,在有效期內(nèi)聯(lián)網(wǎng)的設備數(shù)勢必就越少,因此送達率會隨之下降。
4)目標設備的選取。如果選取的是全量用戶,那其送達率肯定會比按照用戶聯(lián)網(wǎng)情況精準提取目標設備(如選取7天內(nèi)有過打開應用行為的用戶)要低。
2.關于regID
2.1.regID是根據(jù)什么生成的?
regID是在客戶端向小米推送服務注冊時,小米推送服務端根據(jù)設備標識、appID以及當前時間戳生成,因此能夠保證每個設備上每個app對應的regID都是不同的。
2.2.regID會不會變化?
當app注冊成功后,小米推送服務客戶端SDK會在本地通過shared_prefs來保存這個regID,之后app調(diào)用注冊,SDK后會在本地直接讀取出這個regID并直接返回,不會重新請求服務器。因此只要應用不卸載重裝或者清除應用本地數(shù)據(jù),regID就不會變化。否則,如果SDK沒有從本地讀取到緩存的regID,則會向服務端重新請求,此時regID會重新生成。
2.3.regID在哪些情況下會失效?
regID在如下幾種情況下會被判斷失效:
1)app卸載重裝或者清除數(shù)據(jù)后重新注冊,這種情況下會生成一個新的regID,而老的regID會失效;
2)app調(diào)用了unregisterPush;
3)在MIUI上,app卸載時,如果能成功上報,則regID會被判定失效;
4)設備超過3個月沒有和小米push服務器建立長連接;
2.4.如何獲取失效的regID?
可以通過feedback接口從小米推送服務后臺拉取失效regID的列表。
3.標簽(topic)
開發(fā)者可結合自己的業(yè)務特征,給用戶打上不同的標簽(Topic)。在消息的推送過程中,開發(fā)者結合每條消息的內(nèi)容和目標用戶,選擇每條消息所對應的標簽,可以進行更精準的定向推送。
4.別名(Alias)
應用可為每個設備ID(即RegID)設定一個別名(Alias),方便開發(fā)者與自有的ID系統(tǒng)進行關聯(lián),避免因需要保存設備RegID與自有帳號的對應關系而給開發(fā)者帶來額外的開發(fā)和存儲成本。
5.透傳消息
透傳類推送是指開發(fā)者可選擇不通過任何預定義的方式展現(xiàn),由應用直接接收推送消息。利用透傳消息,開發(fā)者可自定義更多使用推送的方式和展現(xiàn)形式,從而能更為靈活地使用消息推送通道。在一些擁有應用啟動管理功能的Android系統(tǒng)上(如MIUI),透傳的實現(xiàn)需要應用在后臺處于啟動狀態(tài)。
6.透傳和通知欄,在送達率上有什么分別?
透傳消息是指當小米推送服務客戶端SDK接收到消息之后,直接把消息通過回調(diào)方法發(fā)送給應用,不做任何處理;
通知欄消息是指在設備接收到消息之后,首先由小米推送服務SDK彈出標準安卓通知欄通知,在用戶點擊通知欄之后,激活應用。
在非MIUI系統(tǒng)中,由于維護小米推送服務長連接的service是寄生在App的運行空間當中的,因此透傳和通知欄方式在送達率上并沒有任何區(qū)別,都需要應用駐留在后臺。即,如果一臺設備通知欄消息能夠接收到并彈出,那么其透傳消息也同樣能接收到。
在MIUI系統(tǒng)中,由于長連接是由MIUI系統(tǒng)服務建立并維護的,因此在接收消息的時候并不需要應用駐留后臺。如果采用通知欄方式接收消息,由于通知欄也是MIUI系統(tǒng)服務彈出的,就可以做到不需要用戶后臺駐留或者可以自啟動消息就能送達。而如果采用透傳消息,由于需要直接執(zhí)行應用的代碼,因此即使消息已經(jīng)到了系統(tǒng)服務,如果應用沒有駐留后臺或者能自啟動,消息依然不能送達,需等下次用戶手動點擊激活應用后,才能接收到消息。
綜上,在MIUI系統(tǒng)中,通知欄消息的送達率會遠高于透傳方式;在非MIUI系統(tǒng)中,通知欄和透傳方式的送達率是一樣的。
7.alias和user account有什么區(qū)別
alias和user account都可以用來設置設備對應的用戶賬號,所不同的是,一個alias只能對應一臺設備,如果有多臺設備設置了同樣的alias,則最后一個設置成功的生效,其它設備就會失效。而一個user account可對應10臺以內(nèi)的設備。因此如果應用是單點登錄的,一個賬號只會在一臺設備上生效,用alias會比較合適。而如果產(chǎn)品需求是單賬號多點登錄同時接收消息,則用user account會更合適。
三、系統(tǒng)服務問題
1.如果我使用通知欄類型消息,能否在通知欄消息到達之前,先執(zhí)行一段app的代碼?或者在通知欄到達時,通知app?
在MIUI系統(tǒng)上,通知欄類型的消息,是不需要應用啟動就能彈出的(這一特性決定了通知欄消息的彈出可以不受應用自啟動管理的影響),因此在整個彈出通知欄消息的過程中,app是完全不可感知的,當用戶點擊通知欄消息之后,才會執(zhí)行到app的代碼。
2.當我的應用被殺掉之后,還能否接收到小米推送服務的消息?
1)如果是在MIUI系統(tǒng)中,使用通知欄類型的消息,是不需要應用出于啟動狀態(tài)就能接收并彈出通知欄的。使用透傳消息,則需要應用駐留后臺才能接收,由于MIUI的自啟動管理限制,所以如果應用被殺,是收不到透傳消息的。
2)如果是在非MIUI系統(tǒng)中,是需要應用駐留后臺才能接收消息的,因此如果應用被殺死并且不能后臺自啟動的話,是沒有辦法接收消息的。為了讓app盡可能的駐留后臺,小米推送服務SDK監(jiān)聽了網(wǎng)絡變化等系統(tǒng)事件,并且有應用之間的互相喚醒,但這些措施并不能保證應用可以一直在后臺駐留。
3.小米push是不是共享通道的?
在MIUI系統(tǒng)中,push服務的消息走的是系統(tǒng)通道,不需要應用單獨建立連接。
在非MIUI上,通道會建立在每個app的進程中,每個接入mipush服務的app都會建立一條單獨的通道。
這種設計的考慮原因如下:使用共享通道,會有如下幾個問題解決不了,1.流量。假如你的app不幸被選中成為其它app的消息通道,而某個惡意app通過這個通道發(fā)了大量的消息,所產(chǎn)生的流量,都會算在你的app的頭上。2.安全性。如果你的消息走的是別的app的通道,數(shù)據(jù)需要通過另一個app的進程中轉,則在這過程中很容易被偽造、纂改、攔截。
4.在MIUI中,小米推送支持的最低Android版本和MIUI版本是什么?
Android支持4.0以上版本;onNotificationMessageArrived回調(diào)等功能需要MIUI7以上版本支持;
5.有沒有方法檢測小米推送是否已經(jīng)注冊的方法
客戶端調(diào)用getregid,如果有返回,就注冊成功了;