1.服務(wù)器通過sdk已經(jīng)發(fā)送了消息,Android客戶端沒有收到怎么是怎么回事?
如果你的app不在前臺(tái),請(qǐng)先閱讀FAQ3。
遇到這個(gè)問題,請(qǐng)參考以下步驟:
步驟1,請(qǐng)確認(rèn)demo中AndroidManifest.xml關(guān)于service,broadcast,permission的聲明都copy到了你的AndroidManifest.xml中。注意,AndroidManifest中的PushMessageHandler需要定義在和MiPushClient.initialize調(diào)用在同一進(jìn)程。
步驟2,打開客戶端的日志。方法參照2。
步驟3,殺掉你app,重新啟動(dòng)app。觀察日志。push的客戶端的初始化需要完成以下幾步:1,創(chuàng)建帳號(hào);2,創(chuàng)建長(zhǎng)連接connect,3,認(rèn)證bind;認(rèn)證結(jié)束即表示連接建立成功,可以收發(fā)消息。如果上述步驟中出錯(cuò),日志都會(huì)打印出來,根據(jù)日志具體問題具體分析。
步驟4,如果步驟3連接建立正常,此時(shí)請(qǐng)檢查服務(wù)器發(fā)送的返回結(jié)果。如果服務(wù)器顯示發(fā)送成功,但是客戶端沒有及時(shí)收到。請(qǐng)將服務(wù)器端返回值,發(fā)送消息時(shí)的topic,alias或者regid以及客戶端對(duì)應(yīng)的regid發(fā)送到devpush xiaomi.com。
2.如何打開客戶端push的日志方便調(diào)試?
參照DemoApplication中的用法,在class的靜態(tài)代碼塊中執(zhí)行:app推廣渠道
static{
LoggerInterface newLogger=new LoggerInterface(){
Override
public void setTag(String tag){
//ignore
}
Override
public void log(String content,Throwable t){
Log.d(TAG,content,t);
}
Override
public void log(String content){
Log.d(TAG,content);
}
};
Logger.setLogger(newLogger);
}
3.push client sdk在混淆時(shí)出錯(cuò)怎么辦?
client sdk已經(jīng)混淆過了,不需要再混淆。請(qǐng)使用keep命令保留client sdk的內(nèi)容;
-keepclasseswithmembernames class com.xiaomi.**{*;}
-keep public class*extends com.xiaomi.mipush.sdk.PushMessageReceiver
注:混淆時(shí)遇到Warning:com.xiaomi.push.service.a.a:can’t find referenced method void setExact(int,long,android.app.PendingIntent)’in class android.app.AlarmManager這個(gè)提示,請(qǐng)將安卓SDK到19以上(包含19),或者添加-dontwarn com.xiaomi.push.service.a.a