这几天项目要集成友盟推送,官网虽然有很全文档 ,但是不够详细,写个博客记录一下。
使用感受
*文档不那么详细,不那么通熟易懂。
*推送消息发送,延迟好高!
*消息状态即使显示为发送成功了,到达客户端也许还是要等。
*没有说清楚各个方法会在什么时候调用。
*首先去官网 打开友盟的文档 此时版本是2.7.0 ,前面简单的就不多说了。
*下载demo看一下 格式就是这样的
注:PushExample是推送的demo,PushSDK是demo所需要的包。
在Eclipse里面PushSDK就是liarbry,在AndroidStudio里面就是module
在应用的主Activity onCreate()
函数中开启推送服务
PushAgent mPushAgent = PushAgent.getInstance(context);
mPushAgent.enable();//打开客户端通知服务
mPushAgent.disable();//关闭客户端通知服务
mPushAgent.isEnabled();//返回推送服务是否可用
PushAgent.getInstance(context).onAppStart();//统计日活数据,需要在应用主要的activity里面调用此方法。(请务必)
String device_token = UmengRegistrar.getRegistrationId(context)//获取device_token,此参数可以用于测试模式,发消息时可以只让这个用户收到消息。
友盟可以的自定义
*自定义消息和。
*自定义消息的行为。
*自定义消息点击事件。
*自定义消息
自定义消息发送到客户端响应 dealWithCustomMessage(fianl Context context,final UMessage msg)
推送消息发送到客户端响应 getNotification(fianl Context context,final UMessage msg)
两者不同事执行,互不影响。
UmengMessageHandler messageHandler = new UmengMessageHandler(){ /** * 参考集成文档的1.6.3 * http://dev.umeng.com/push/android/integration#1_6_3 * */ @Override public void dealWithCustomMessage(final Context context, final UMessage msg) { new Handler().post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub // 对自定义消息的处理方式,点击或者忽略 boolean isClickOrDismissed = true; Toast.makeText(context,"-自定义消息"+msg.text,Toast.LENGTH_SHORT).show(); if(isClickOrDismissed) { //自定义消息的点击统计 UTrack.getInstance(getApplicationContext()).trackMsgClick(msg); } else { //自定义消息的忽略统计 UTrack.getInstance(getApplicationContext()).trackMsgDismissed(msg); } // Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show(); } }); } /** * 参考集成文档的1.6.4 * http://dev.umeng.com/push/android/integration#1_6_4 * */ @Override public Notification getNotification(Context context, UMessage msg) { Toast.makeText(context, "收到一条消息"+msg.custom, Toast.LENGTH_LONG).show(); Log.e("---->getNotification","msg.builder_id = "+msg.builder_id+" msg.title = "+msg.title+" msg.text"+msg.text+" msg.ticker"+msg.ticker); switch (msg.builder_id) { case 1: NotificationCompat.Builder builder = new NotificationCompat.Builder(context); RemoteViews myNotificationView = new RemoteViews(context.getPackageName(), R.layout.notification_view); myNotificationView.setTextViewText(R.id.notification_title, msg.title); myNotificationView.setTextViewText(R.id.notification_text, msg.text); myNotificationView.setImageViewBitmap(R.id.notification_large_icon, getLargeIcon(context, msg)); myNotificationView.setImageViewResource(R.id.notification_small_icon, getSmallIconId(context, msg)); builder.setContent(myNotificationView) .setContentTitle(msg.title) .setSmallIcon(getSmallIconId(context, msg)) .setContentText(msg.text) .setTicker(msg.ticker) .setAutoCancel(true); Notification mNotification = builder.build(); //由于Android v4包的bug,在2.3及以下系统,Builder创建出来的Notification,并没有设置RemoteView,故需要添加此代码 mNotification.contentView = myNotificationView; return mNotification; default: //默认为0,若填写的builder_id并不存在,也使用默认。 return super.getNotification(context, msg); } } }; mPushAgent.setMessageHandler(messageHandler);
*自定义行为
launchApp、openUrl、openActivity这三个方法可以由消息推送SDK自动完成
自定义行为在点击推送消息时触发。
*自定义推送消息点击事件。
自定义推送消息点击事件在代码里面 msg.custom为自定义消息的内容,推送消息的msg.custom为""。
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler(){ @Override public void dealWithCustomAction(Context context, UMessage msg) { Toast.makeText(context, "点击"+msg.custom, Toast.LENGTH_LONG).show(); } }; //使用自定义的NotificationHandler,来结合友盟统计处理消息通知 //参考http://bbs.umeng.com/thread-11112-1-1.html //CustomNotificationHandler notificationClickHandler = new CustomNotificationHandler(); mPushAgent.setNotificationClickHandler(notificationClickHandler);
友盟消息封装在 Umessage 类中