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”}就是你自己定义的参数了。

以上就是自定义推送消息的处理了,至于具体的逻辑则根据项目的需求来处理了,希望可以帮到大家!

原创粉丝点击