最近用了一下友盟的推送,遇到一些问题,做了一下总结.
总结
总结一
如何在未点击推送通知时处理一些操作.友盟文档中只给出了自定义消息和自定义通知栏动作的代码示例.其实在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();
}
希望对遇到同样问题的童鞋有帮助,当然如果需求很复杂,就使用完全自定义去处理就可以,文章提到的也是比较偷懒的做法.