安卓使用友盟推送問題總結

最近用了一下友盟的推送,遇到一些問題,做了一下總結.

總結

總結一

如何在未點擊推送通知時處理一些操作.友盟文檔中只給出了自定義消息和自定義通知欄動作的代碼示例.其實在UmengMessageHandler回調中還有一個回調方法dealWithNotificationMessage用於處理這種情況,當然可以通過自定義消息來完成這個功能,手動去創建一個推送通知,但是這裏偷個懶.代碼如下:

// 友盟消息處理
UmengMessageHandler messageHandler = new     UmengMessageHandler() {
            @Override
            public void dealWithCustomMessage(final Context context, final UMessage msg) {
                // 自定義消息

            }

            @Override
            public void dealWithNotificationMessage(Context context, UMessage uMessage) {
                super.dealWithNotificationMessage(context, uMessage);
                // 收到消息時的回調方法(不點擊通知也會走),自定義消息和通知都會走這個回調,可以在這個回調方法中做一些預處理

            }

        };

 // 自定義通知欄動作
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
            @Override
            public void dealWithCustomAction(Context context, UMessage msg) {

            }
        };

總結二

如何清除掉推送消息.因爲項目中帶有用戶體系,所有當用戶退出登錄或者被頂號,需要去清除掉之前收到的通知,爲用戶隱私做考慮.友盟文檔中並沒有提到這塊,而且大概看了一下友盟封裝的Notification(UmengMessageHandler類中),發送通知時的ID是隨機數,代碼如下:

// 隨機數 
this.f = (new Random(System.nanoTime())).nextInt();
...
// 發送通知 
int var6 = this.f;
// 通知Manager
NotificationManager var5 = (NotificationManager)var1.getSystemService("notification");
var5.notify(var6, var2);

所以想要單個清除的話,就老老實實的完全自定義友盟的服務去處理,記錄好notify的id,通過mNotificationManager.cancel(id)去完成需求;如果是之前提到的清除掉所有通知,則可以偷個懶,代碼如下:

    /**
     * 取消通知
     *
     * @param context
     */
    public static void cancelNotify(Context context) {
        String ns = Context.NOTIFICATION_SERVICE;
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
        mNotificationManager.cancelAll();
    }

希望對遇到同樣問題的童鞋有幫助,當然如果需求很複雜,就使用完全自定義去處理就可以,文章提到的也是比較偷懶的做法.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章