Android推送整合方案總結
剛做完推送整合方案,記錄下坑。
這裡記錄的特性和使用時針對寫blog時採用的sdk的,具體使用流程和限制還請參考官方給出的sdk.
1、推送規則
小米手機用小米推送;
華為手機用華為推送;
其他手機用友盟推送。
2、總體流程
3、小米推送:
①sdk地址:https://dev.mi.com/console/doc/detail?pId=100#_1
②常用方法:註冊,設定別名,
③別名可設定多個,無效別名需要reset掉。
④訊息接收是用的是廣播接收者,繼承自PushMessageReceiver即可。內部方法可獲得註冊結果、設定別名結果、訊息到達時機、訊息點選時機等。
⑤小米註冊是在application#onCreate()方法中,需要在主程序中。
⑥支援設定通知聲音
4、友盟推送:
①sdk地址:http://dev.umeng.com/push/android/integration#3_4
②推薦使用推送基礎包,不要使用友盟的整合推送,坑的一筆。
③友盟的最新文件有毛病,對不上號,必要時可以翻出舊的文件看看。
④友盟註冊是在application#onCreate()方法中,不需要判斷程序,否則出錯。
⑤設定別名之後,使用別名和token都可以給裝置傳送訊息。
⑥友盟的通知到達的時機,需要繼承UMengMessageHandler類,裡面的getNotification()方法
mPushAgent.setMessageHandler(new UMengPushHandler());
public class UMengPushHandler extends UmengMessageHandler {
@Override
public Notification getNotification(Context context, UMessage uMessage) {
LogUtils.e("getNotification");
// TODO: 2018/1/10 友盟推送的訊息到達時會走這兒
return super.getNotification(context, uMessage);
}
}
⑦友盟的通知訊息被點選
public class UmengPushClickHandler extends UmengNotificationClickHandler {
@Override
public void dealWithCustomAction(Context context, UMessage msg) {
LogUtils.e("dealWithCustomMessage");
try {
LogUtils.e("message=" + msg); //訊息體
LogUtils.e("custom=" + msg.custom); //自定義訊息的內容
LogUtils.e("title=" + msg.title); //通知標題
LogUtils.e("text=" + msg.text); //通知內容
// code to handle message here
// ...
// 對完全自定義訊息的處理方式,點選或者忽略
boolean isClickOrDismissed = true;
if (isClickOrDismissed) {
//完全自定義訊息的點選統計
UTrack.getInstance(context).trackMsgClick(msg);
} else {
//完全自定義訊息的忽略統計
UTrack.getInstance(context).trackMsgDismissed(msg);
}
// 使用完全自定義訊息來開啟應用服務程序的示例程式碼
// 首先需要設定完全自定義訊息處理方式
String msgStr = msg.custom;
if (!TextUtils.isEmpty(msgStr)) {
Map<String, String> map = new HashMap<>();
JSONObject jsonObject = new JSONObject(msgStr);
Iterator<String> it = jsonObject.keys();
while (it.hasNext()) {
String key = it.next();
String val = (String) jsonObject.get(key);
map.put(key, val);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
mPushAgent.setNotificationClickHandler(new UmengPushClickHandler());
⑧支援設定通知聲音
public class HuaWeiPushReceiver extends PushReceiver {
/**
* token申請成功之後
*
* @param context
* @param token
* @param extras
*/
@Override
public void onToken(Context context, String token, Bundle extras) {
String belongId = extras.getString("belongId");
LogUtils.e("onToken token: " + token);
//裝置上報
}
}
④華為不可設定別名,暫時不支援tag。
⑤華為推送通知的自定義操作比較麻煩,不能通過廣播接受者處理,需要用隱式Intent調起一個Activity來獲取服務端傳遞過來的資料。
自定義後續動作
⑥不支援設定通知聲音