小米應用商店:小米推送常見問題匯總(下)

來源: 小米開放平臺
作者:小米開放平臺
時間:2020-09-21
23039
本文介紹小米應用商店的推送常見問題匯總。

四、接入過程問題

1.第一次接觸安卓版小米推送服務,使用你們的demo沒有成功,怎么辦?

第一次使用小米推送服務(安卓版),請仔細閱讀如下指南:小米推送Android版快速接入指南(https://dev.mi.com/console/doc/detail?pId=100)。

一般注冊推送服務沒成功,常見的原因如下:

1)沒有開啟推送服務。使用推送服務前需要登錄開發(fā)者賬號、創(chuàng)建應用、開通推送服務3個步驟,缺一不可。

2)沒有正確配置AndroidManifest.xml文件。需要特別注意包名、權限部分,包名需要跟開發(fā)者站點上開通推送服務的一致,權限的前綴需要改成包名。

3)系統(tǒng)時間錯誤。由于小米推送服務需要使用https請求向服務器注冊一個匿名賬號,在次過程中如果系統(tǒng)時間錯誤,會引起https過期,導致注冊不成功。

4)聯(lián)網(wǎng)被阻止。小米推送服務客戶端需要使用5222和443兩個端口,如果在公司內(nèi)網(wǎng),需要聯(lián)系IT部門把這兩個端口開放。同時需要檢查應用的聯(lián)網(wǎng)是否會被一些手機安全助手阻止。需要特別注意的是,在MIUI系統(tǒng)上,長連接是由“小米服務框架”這個系統(tǒng)應用維護的,因此需要確保這個應用的聯(lián)網(wǎng)并沒有被阻止。

2.為什么onNotificationMessageArrived方法沒被調(diào)用到?

首先,確認接入是否正確,這個方法需要在manifest中添加<action android:name=”com.xiaomi.mipush.MESSAGE_ARRIVED”/>這個action。

在MIUI系統(tǒng)上,這個方法的調(diào)用需要同時滿足如下兩個條件:

1)新版的MIUI。這個特性是在2015年才加進小米推送服務的,因此需要MIUI升級到較新的版本才能調(diào)用這個方法。

2)需要應用駐留后臺。小米推送服務的通知欄消息,是可以在應用不啟動的前提下,就彈出通知欄消息的,在這種情況下,由于MIUI的自啟動管理,限制了應用不能在被殺后被后臺喚醒,所以推送消息不能直接喚醒應用執(zhí)行這個方法。

3.為什么我在onNotificationMessageClicked方法中的startActivity不能調(diào)起目標界面?

由于onNotificationMessageClicked中傳入的context是application context,本身沒有activity棧,因此需要在創(chuàng)建activity時候加入NEW_TASK的flag:Intent i=new Intent(context,MyActivity.class);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(i);

4.為什么我的設備在調(diào)用registerPush的時候會出現(xiàn)no account的錯誤?

在app第一次在一臺設備上注冊推送服務時,sdk會通過https請求,從小米推送服務器生成一個匿名賬號。這個錯誤是由于這個請求失敗導致的。一般請求失敗常見的原因包括如下幾種:

1)系統(tǒng)時間錯誤。時間錯誤會導致https在校驗證書有效期的時候,出現(xiàn)證書過期,導致https請求失敗。

2)網(wǎng)絡原因。這個大部分的原因都是設備架了代理服務器或連了vpn,如果排除這些原因,就檢查一下app是否申請了聯(lián)網(wǎng)權限,是否被什么安全軟件阻止了登錄,公司wifi是否能用,等等。

3)如果是在MIUI系統(tǒng)上,生成匿名賬號是在一個叫小米服務框架的系統(tǒng)app上完成的,還需要檢查這個app的聯(lián)網(wǎng)是不是在安全中心的聯(lián)網(wǎng)控制中被手動關閉了。

5.我們iOS應用還沒發(fā)布到蘋果商店,是不是正式包還收不到消息,要等發(fā)布了才行?

將MISDKRun設置為online,然后使用adHoc的證書即可收到生產(chǎn)環(huán)境的消息;

6.如何進行通知分類、實現(xiàn)通知欄多條消息并存?

可以使用notifyId(Integer id)可選項。

https://dev.mi.com/console/doc/detail?pId=1278#_3_3

默認情況下,通知欄只顯示一條推送消息。如果通知欄要顯示多條推送消息,需要針對不同的消息設置不同的notify_id(相同notify_id的通知欄消息會覆蓋之前的)。

7.注冊推送,SDK日志提示“MIIDManager startMIIDUpdateListener failed cause lack of GET_ACCOUNTS permission”。

這是推送的一種消息推送方式,不影響正常使用;當sdk執(zhí)行按miid推送消息的時候,會檢查一下app有沒有獲得miid的權限,如果沒有,會打印相關消息。

8.注冊推送提示“Don't send message before initialization succeeded!”

Mipush sdk內(nèi)部邏輯,檢測消息通道是否順暢,不影響推送功能正常使用。

9.Mipush是否支持通知欄自定義顯示圖片/如何自定義通知欄樣式?

SDK可以根據(jù)推送消息中指定的layout文件和填充內(nèi)容,自由定制展示樣式。在MIUI中,通知展示由系統(tǒng)通道負責,需要MIUI升級后才支持自定義通知。具體使用方法可以參考《服務端Java SDK文檔》。另外,關于自定義通知欄layout的配置目前只支持app本地資源已有的圖片和布局文件,可以通過這個服務器自定義布局顯示出來;暫不支持網(wǎng)絡圖片下載。

10.推送消息支持靜默推送(即無聲音、無燈光、無震動)嗎?

支持,可以在構建消息時調(diào)用notifyType(Integer type)方法,將type設置成0即可。

notifyType表示設置通知類型,type類型支持以下值:

·1:使用默認提示音提示

·2:使用默認震動提示

·4:使用默認led燈光提示

·-1(系統(tǒng)默認值):以上三種效果都有

·0:以上三種效果都無,即靜默推送。

并且支持1,2,4的任意OR運算來實現(xiàn)聲音、震動和閃光燈的任意組合。

11.timeToLive最大時長為多少?

timeToLive表示消息的生命周期,若用戶離線,設置消息在服務器保存的時間,單位:ms,服務器默認最長保留14天。

12.如何開啟/關閉app在前臺時的通知彈出?

應用在前臺的情況下,通知消息到達客戶端后是否彈出通知可以通過服務端來設置。服務端調(diào)用Message.Builder類的extra(String key,String value)方法將EXTRA_PARAM_NOTIFY_FOREGROUND的值設置為"0"或者"1"。當EXTRA_PARAM_NOTIFY_FOREGROUND值為”1″時,app會彈出通知欄消息;當EXTRA_PARAM_NOTIFY_FOREGROUND值為”0″時,app不會彈出通知欄消息。注:默認情況下會彈出通知欄消息。

示例:

Message message = new Message.Builder()

          .title(title)

          .description(description).payload(messagePayload)

          .restrictedPackageName(MY_PACKAGE_NAME)

          .passThrough(0)

          .notifyType(1)

          .extra(Constants.EXTRA_PARAM_NOTIFY_FOREGROUND, "0")

          .build();

13.給IOS10系統(tǒng)推送消息時,如何設置title?

如果使用的Java或PHP的SDK,可以使用IOSBuilder的title、subtitle、body方法。

14.如何理解消息回執(zhí)中的barStatus參數(shù)?

barStatus表示用戶是否允許該app的消息在通知欄展示。barStatus的值只和用戶本地的配置有關系。用戶設置允許app彈出通知,返回Enable;用戶設置不允許app彈出通知,返回Disable;本地獲取狀態(tài)出現(xiàn)異常時,返回Unknown。Disable時,如果有消息到達,不會顯示通知;Enable時,如果有消息到達,會顯示通知。

15.為什么有時候獲取到的regID是非正式環(huán)境的?(平臺類型是iOS類型)

客戶端獲取到的regId環(huán)境,與MiSDKRun有關。MiSDKRun=debug為測試環(huán)境,MiSDKRun=online為正式環(huán)境。

16.IOS平臺接入時是否支持swift?

支持,具體用法請參見文檔:https://dev.mi.com/console/doc/detail?pId=98#_3_13。

17.使用推送運營平臺發(fā)送消息時,如何設置notifyId?

可以在“通知分類”輸入框里設置。

faq_1.png

18.IOS和android平臺需要分別創(chuàng)建應用還是可以使用同一個?

IOS和android平臺需要創(chuàng)建不同的應用,要分開創(chuàng)建,AppId和APPKey也是不同的。

19.收到回調(diào):onCommandResult:command={Registration},resultCode={70000001},reason={the push is not connected.},category={null},commandArguments={null}

該errorCode一般是由于網(wǎng)絡問題導致的,請先確認設備網(wǎng)絡是否正常,網(wǎng)絡是否使用代理。另外,修改系統(tǒng)時間也會導致上述錯誤。可通過設備瀏覽器登錄如下鏈接來確認設備網(wǎng)絡及設置是否正常:

國內(nèi):https://api.xmpush.xiaomi.com/_x/monitor/status

海外:https://api.xmpush.global.xiaomi.com/_x/monitor/status

20.蘋果手機的應用在打開狀態(tài)時收不到消息,在后臺和未打開狀態(tài)時卻能收到消息,這種現(xiàn)象正常嗎?

正常。蘋果手機的應用在前臺時,消息是不會展示的,但手機實際是收到消息的,可以在接受消息的回調(diào)中打斷點,或者打印log進行驗證。

五、推送統(tǒng)計數(shù)據(jù)問題

1.計劃推送數(shù)是指什么?怎么計算的?

計劃推送數(shù)是指推送請求所覆蓋的所有的設備數(shù),如果目標對象的選取是所有用戶,那分母就是歷史上所有激活過推送服務的有效設備數(shù);如果是按照標簽選取的,那分母是歷史上所有訂閱過這個標簽的有效設備數(shù);如果是按照別名或者regID來選取,那么分母就是所請求的所有合法的別名或regID。

2.設備有效性的判定規(guī)則:

如果應用調(diào)用了unregisterPush,或者在MIUI上卸載了,或者超過3個月都沒有和小米服務器建立過長連接,則會判定設備失效。

3.為什么在數(shù)據(jù)統(tǒng)計后臺看,按天統(tǒng)計中,會出現(xiàn)計劃推送少于送達數(shù)的現(xiàn)象?

這是正常現(xiàn)象,在按天統(tǒng)計中,計劃推送是指當天的所有請求總共覆蓋了多少設備數(shù),而送達數(shù)則是當天這個app所有的送達,因此這個送達數(shù)不但包括當天發(fā)的消息送達了多少,也包括了之前發(fā)的消息,作為離線消息當天抵達設備的數(shù)量。因此這個送達數(shù)是存在大于計劃推送數(shù)的可能性的。

4.如何查詢統(tǒng)計數(shù)據(jù):

1)使用服務端SDK中的數(shù)據(jù)API直接拉取統(tǒng)計數(shù)據(jù),可方便地與開發(fā)者現(xiàn)有的統(tǒng)計系統(tǒng)結合;

2)登錄開發(fā)者站,進入應用的推送服務查看推送統(tǒng)計數(shù)據(jù);

5.從計劃推送量到實際下發(fā)量再到送達量會有一定比例的損耗,如何降低這個損耗?

一方面,可以調(diào)用服務端的feedback接口,拉取無效的設備,以后在推送總量里剔除這部分設備。開發(fā)者也可以自行維護有效設備集合,減少發(fā)送的設備里存在過多取消注冊或無效的設備。

另一方面,可以設置合適的ttl(timeToLive消息過期時間),建議如果消息沒有實效性的話可以適度增大ttl,也可不設置該值直接使用我們服務器的默認時間(2周),這樣的話只要用戶在ttl有效期之內(nèi)上線,就能收到之前推送的消息。

立即登錄,閱讀全文
版權說明:
本文內(nèi)容來自于小米開放平臺,本站不擁有所有權,不承擔相關法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家