Android集成友盟推送最详细介绍
来源:互联网 发布:网站程序员工资 编辑:程序博客网 时间:2024/06/07 22:52
前言
如今大部分应用都会涉及到推送,正好最近的项目推送是我在搞,今天就分享一下我的使用过程。
集成方式
关于友盟推送的集成方式,文档已经介绍的很详细了,我就不在此多做解释。 友盟推送完整集成过程
完全自定义处理
今天我想详细的介绍一下关于消息完全自定义处理,因为在你的项目中,你可能会根据推送消息来做出很多的处理。比如Activity的跳转,Dialog的展示,等等其他的处理。因此掌握消息完全自定义处理才是王道。话不多说,开搞!
如果开发者想对消息进行完全自定义处理,那么你必须建立一个service并继承自UmengMessageService,并重写它的onMessage方法,在你的Application中进行如下设置
PushAgent mPushAgent = PushAgent.getInstance(this); //注册推送服务,每次调用register方法都会回调该接口 mPushAgent.register(new IUmengRegisterCallback() { @Override public void onSuccess(String deviceToken) { //注册成功会返回device token Log.i("success", deviceToken); } @Override public void onFailure(String s, String s1) { Log.i("failure", "deviceToken onFailure " + s + " " + s1); } }); Log.i("------", "deviceToken " + mPushAgent.getRegistrationId()); mPushAgent.setPushIntentServiceClass(MyPushIntentService.class);
mPushAgent.setPushIntentServiceClass(MyPushIntentService.class);
这段代码表示你现在的推送都会进行自己定义的处理而不是SDK默认的处理。在这个service中,你需要处理他的接收以及接收后的展示方式,一般情况下都是进行通知的展示。好了,接着往下看:
public class MyPushIntentService extends UmengMessageService { private static final String TAG = MyPushIntentService.class.getName(); private String messageType = ""; @Override public void onMessage(Context context, Intent intent) { try { String message = intent.getStringExtra(AgooConstants.MESSAGE_BODY); UMessage msg = new UMessage(new JSONObject(message)); Map<String, String> extra = msg.extra; Intent intentAct = new Intent(); if (extra != null) { messageType = extra.get("MT"); } /* * 强制下线 */ if (messageType.equals("1000")) { intentAct.setClass(context, LoginActivity.class); } intentAct.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //展示通知 showNotifications(context, msg, intentAct); // 对完全自定义消息的处理方式,点击或者忽略 boolean isClickOrDismissed = true; if (isClickOrDismissed) { //完全自定义消息的点击统计 UTrack.getInstance(getApplicationContext()).trackMsgClick(msg); } else { //完全自定义消息的忽略统计 UTrack.getInstance(getApplicationContext()).trackMsgDismissed(msg); } } catch (Exception e) { UmLog.e(TAG, e.getMessage()); } } /** * 自定义通知布局 * * @param context 上下文 * @param msg 消息体 * @param intent intent */ public void showNotifications(Context context, UMessage msg, Intent intent) { NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setContentTitle(msg.title) .setContentText(msg.text) .setTicker(msg.ticker) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.app_small_icon) .setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.mipmap.app_icon)) .setColor(Color.parseColor("#41b5ea")) .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIntent); mNotificationManager.notify(100, builder.build()); }}
一般情况下,项目中会用到推送基本都是后台发送推送,然后你根据后台发送的推送消息体中的某个参数进行消息的处理,在这里, 我想大家展示的是extra 这个参数,它是一个map,你可以根据它的key值“MT”,获取value,根据不同的value来进行处理。同时,因为是自定义处理,所以在这里,你的通知展示也需要你自己来完成。
至于收到的消息可以通过官网的测试消息进行测试推送:
其结构就是这个样子的:
{“appkey”:”58f86a4f677baa517800162b”,”production_mode”:”false”,”description”:”测试”,”type”:”unicast”,”payload”:{“extra”:{“MT”:”1000”},”display_type”:”notification”,”body”:{“title”:”测试”,”ticker”:”测试”,”text”:”这是一条测试消息!”,”after_open”:”go_app”,”play_vibrate”:”true”,”play_sound”:”true”,”play_lights”:”true”}},”policy”:{“expire_time”:”2017-07-15 17:49:42”},”device_tokens”:”Am07oMXtjZnkcFjeVol0KcBvwegjnfBZjDM2vWsKG7l0”}
“extra”:{“MT”:”1000”}就是你自己定义的参数了。
以上就是自定义推送消息的处理了,至于具体的逻辑则根据项目的需求来处理了,希望可以帮到大家!
- Android集成友盟推送最详细介绍
- android 推送详细介绍
- 集成友盟推送android
- Android集成友盟推送
- Android集成“小米消息推送”详细教程
- Android集成友盟推送功能
- Android之集成友盟推送功能
- Android集成友盟推送服务
- iOS集成环信推送,最详细流程(证书创建、环信集成、测试)
- iOS集成环信推送,最详细流程(证书创建、环信集成、测试)
- iOS集成环信推送,最详细流程(证书创建、环信集成、测试)
- Android studio集成svn详细介绍
- 极光推送详细介绍
- cocos2d-x集成友盟消息推送SDK(Android版)
- android studio集成友盟v2.3消息推送
- android集成友盟推送遇到的问题
- Android 学习之如何集成友盟推送
- android studio关于友盟集成推送问题记录
- switch后面的表达式类型
- jdbc配置
- Flex 布局教程:语法篇 作者: 阮一峰 日期: 2015年7月10日 网页布局(layout)是 CSS 的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display 属性 + po
- Yii2 -- composer 安装出现停滞问题
- js获取元素的方法(获取html元素的方法)
- Android集成友盟推送最详细介绍
- https网站 支持百度API解决方法
- VS2015 + Qt5.8 环境配置
- 20170712js
- 关于laravel的实例化
- centos7下boot空间不足解决办法
- Fragment 碎片的使用
- http://www.cnblogs.com/longteng1991/archive/2013/06/13/3131739.html#
- HDFS的架构设计