极光推送自定义消息处理

一:注册极光后台

      用户到极光官网,注册相应的账号,然后登陆到极光, 创建自己的应用,然后获取到相应的 Appkey ,注意:创建的应用的包名必须和你的应用的包名一样,不然会出现收不到消息。

 

二:初步的功能集成

    下载极光官网的 Demo ,按照官方文档进行集成,或者按照他给的 Demo 集成也是可以的,然后进行测试,通过后台发送通知或者自定义消息测试是否集成成功。 集成中出现的问题一般有: 少了相应的 .so  文件,此时,你就要去下载相应的 .so 文件,还有就是版本的不一致导致接受不到消息的,那这种情况的话,你就要去逛网查找相应的 jar 包或者依赖加入到你自己的项目中。

 

三:自定义消息的处理

   自定义消息的处理其实就是对自己所写的广播类进行一个处理,我直接把代码贴出来讲解的吧,代码如下:

 

public class JPushReceiver extends BroadcastReceiver {

    private static final String TAG = "JPush";

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Bundle bundle = intent.getExtras();

            if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
                String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
                Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);

            } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
                String string = bundle.getString(JPushInterface.EXTRA_MESSAGE);
                //{}
                Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + string);//                processCustomMessage(context, bundle);
                //  CMD:SYNC_BIND
                // CMD:BIND_REQ;MSG:哈哈哈哈哈哈哈哈哈;TITLE:哈喽哈申请绑定设备;REQUID:545988709872697344
                JPushHelper.getInstance().onReceive(string);

            } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
                int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
                Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);

            } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
                Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
            } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
                Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
                //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..

            } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
                boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
                Log.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
            } else {
                Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
            }
        } catch (Exception e) {

        }

    }

    // 打印所有的 intent extra 数据
    private static String printBundle(Bundle bundle) {
        StringBuilder sb = new StringBuilder();
        for (String key : bundle.keySet()) {
            if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
                sb.append("\nkey:" + key + ", value:1" + bundle.getInt(key));
            } else if (key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)) {
                sb.append("\nkey:" + key + ", value:2" + bundle.getBoolean(key));
            } else if (key.equals(JPushInterface.EXTRA_MSG_ID)) {
                Log.e(TAG, "-----" + "value:3" + bundle.get(key));
                String extraMsgId = JPushInterface.EXTRA_MSG_ID;

            } else if (key.equals(JPushInterface.EXTRA_EXTRA)) {
                if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
                    Log.e(TAG, "This message has no Extra data");
                    continue;
                }
                try {
                    JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
                    Iterator it = json.keys();

                    while (it.hasNext()) {
                        String myKey = it.next();
                        sb.append("\nkey:4" + key + ", value:5 [" +
                                myKey + " - " + json.optString(myKey) + "]");
                    }
                } catch (JSONException e) {
                    Log.e(TAG, "Get message extra JSON error!");
                }
                //{"CMD":"BIND_REQ";"MSG":"哈哈哈哈哈哈哈哈哈";"TITLE":"哈喽哈申请绑定设备;REQUID:545988709872697344}

            } else {
                //int  boolean
                sb.append("\nkey:" + key + ", value:6hhhhh" + bundle.get(key));
                Log.e("hakn", "dshuj----" + bundle.getString(JPushInterface.EXTRA_MESSAGE));
                String s = bundle.getString(JPushInterface.EXTRA_MESSAGE);
                String[] b = s.split(";");
                Log.d("MISS", " b -------- " + b.length + " --- " + b[b.length - 1]);
                String c = b[b.length - 1];
                Log.d("MISS", " c ---- " + c.split(":")[1]);
                //传 accouid
                EventBus.getDefault().post(new MessageEvent(c.split(":")[1]));
            }
        }
        return sb.toString();
    }
}

自定义消息  EXTRA_MESSAGE  就是对这个字段的处理,拿到这个后台返回的数据,通过截取相应的字段,拿到自己想要的数据,截取的方法我也写在上面了。

 

 

 

你可能感兴趣的:(极光推送自定义消息处理)