最近用了一下友盟的推送,遇到一些問題,做了一下總結.
總結
總結一
如何在未點擊推送通知時處理一些操作.友盟文檔中只給出了自定義消息和自定義通知欄動作的代碼示例.其實在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();
}
希望對遇到同樣問題的童鞋有幫助,當然如果需求很複雜,就使用完全自定義去處理就可以,文章提到的也是比較偷懶的做法.