1. 程式人生 > >Android推送整合方案總結

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來獲取服務端傳遞過來的資料。
自定義後續動作
官方示例
⑥不支援設定通知聲音