Android集成友盟推送最详细介绍

前言

如今大部分应用都会涉及到推送,正好最近的项目推送是我在搞,今天就分享一下我的使用过程。

集成方式

关于友盟推送的集成方式,文档已经介绍的很详细了,我就不在此多做解释。 友盟推送完整集成过程

完全自定义处理

今天我想详细的介绍一下关于消息完全自定义处理,因为在你的项目中,你可能会根据推送消息来做出很多的处理。比如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 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来进行处理。同时,因为是自定义处理,所以在这里,你的通知展示也需要你自己来完成。

至于收到的消息可以通过官网的测试消息进行测试推送:

Android集成友盟推送最详细介绍_第1张图片

其结构就是这个样子的:

{“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)