最新版Android端集成极光推送总结 2019-6-13

最近研究推送,找了找各个推送SDK的评价,大部分的人都在说极光的很好用,很好集成,出于对技术的敬畏,今天就打算去搞一搞,而且恰好公司项目的信鸽推送最近有毛病。刚好留个备胎。

话不多说直接上图。

首先用它那就肯定要在极光官网注册账号,也方便查看官方文档来进行学习。最新版Android端集成极光推送总结 2019-6-13_第1张图片
注册完成可以进入开发者平台,然后按照流程 添加应用最新版Android端集成极光推送总结 2019-6-13_第2张图片
接着进入推送设置,你的项目包路径,具体位置看下图
最新版Android端集成极光推送总结 2019-6-13_第3张图片
确定之后,就会可以下载Demo和APK文件了,虽然运行跑起来很酷,但是说实话,我去下载Demo去看他们的代码,太费劲儿了,所以接下来我就直接根据自己的成功案例来进行讲解说明最新版Android端集成极光推送总结 2019-6-13_第4张图片
一、配置gradle
首先在项目的build.gradle里面配置
最新版Android端集成极光推送总结 2019-6-13_第5张图片
这东西就实现了自动集成减少手动配的问题,很是舒服

接着就是配置app的build.gradle文件

最新版Android端集成极光推送总结 2019-6-13_第6张图片
最新版Android端集成极光推送总结 2019-6-13_第7张图片
这里面需要添加的就是框框的东西,需要改的就是箭头的东西。

二、增加极光的广播和服务类继承类以及在Application中初始化极光


public class JGReceiver extends JPushMessageReceiver {

}


public class JGService extends JCommonService {

}

上面的广播是接受极光添加标签呀接口呀注册成功失败的监听,里面可以重写很多办法,来进行获取操作返回的信息。
服务就是为了让极光服务更加的坚挺,进程不被杀死。

public class BaseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        JPushInterface.setDebugMode(true); //允许被debug,正式版本的时候注掉
        JPushInterface.init(this);  //初始化
    }

就这么一写就完事儿了
三、为上面的广播服务application和极光的东西进行AndroidManifest配置

最新版Android端集成极光推送总结 2019-6-13_第8张图片
在application节点中增加
最新版Android端集成极光推送总结 2019-6-13_第9张图片
至此,就实现了极光的android端集成。更新SDK版本号很是轻松,不像以前还需要导入本地依赖jar包进行配置,和权限什么的,有了jcenter,舒服很多

最后运行程序,发送广播测试一波
最新版Android端集成极光推送总结 2019-6-13_第10张图片
一次点击输入内容,最后点击最下面的发送预览,这样的你的程序就接收到了推送的消息了。
最新版Android端集成极光推送总结 2019-6-13_第11张图片
下面的什么的标签(tag)、别名(aliias)什么的,就是对用户的指定发送,只需要在极光初始化后进行用户绑定就行,这样你就能对指定的用户进行绑定了,具体绑定方法见
极光推送API,这里还是需要研究一下的。

但是问题来了,当你接收到极光的推送,想做自定义的处理,怎么说。也很简单。有两种方法
第一种、使用极光的广播重写需要的方法,这里我粘贴一段我的代码,具体的也可以去API官网里面查

public class JGReceiver extends JPushMessageReceiver {


    private static final String TAG = "极光";

    /**
     * tag 增删查改的操作会在此方法中回调结果。
     * @param context
     * @param jPushMessage
     */
    @Override
    public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
        super.onTagOperatorResult(context, jPushMessage);
        EventBus.getDefault().post(jPushMessage);
    }

    /**
     * 查询某个 tag 与当前用户的绑定状态的操作会在此方法中回调结果。
     * @param context
     * @param jPushMessage
     */
    @Override
    public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
        super.onCheckTagOperatorResult(context, jPushMessage);
        EventBus.getDefault().post(jPushMessage);
    }


    /**
     * alias 相关的操作会在此方法中回调结果。
     * @param context
     * @param jPushMessage
     */
    @Override
    public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
        super.onAliasOperatorResult(context, jPushMessage);
        EventBus.getDefault().post(jPushMessage);
    }


    /**
     * 设置手机号码会在此方法中回调结果。
     * @param context
     * @param jPushMessage
     */
    @Override
    public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
        super.onMobileNumberOperatorResult(context, jPushMessage);
        EventBus.getDefault().post(jPushMessage);
    }


    /**
     * 注册成功回调
     * @param context
     * @param s
     */
    @Override
    public void onRegister(Context context, String s) {
        super.onRegister(context, s);
        LogUtils.e(TAG,"自带广播注册成功回调");
    }

    /**
     * 长连接状态回调
     * @param context
     * @param b
     */
    @Override
    public void onConnected(Context context, boolean b) {
        super.onConnected(context, b);
        LogUtils.e(TAG,"自带广播长连接状态回调");
    }

    /**
     * 注册失败回调
     * @param context
     * @param cmdMessage
     */
    @Override
    public void onCommandResult(Context context, CmdMessage cmdMessage) {
        super.onCommandResult(context, cmdMessage);
        LogUtils.e(TAG,"自带广播注册失败回调");
    }

    /**
     * 通知的MultiAction回调
     * @param context
     * @param intent
     */
    @Override
    public void onMultiActionClicked(Context context, Intent intent) {
        super.onMultiActionClicked(context, intent);
    }

    /**
     * 收到通知回调
     * @param context
     * @param notificationMessage
     */
    @Override
    public void onNotifyMessageArrived(Context context, NotificationMessage notificationMessage) {
        super.onNotifyMessageArrived(context, notificationMessage);
        LogUtils.e(TAG,"自带广播收到通知回调"+ "\n" + notificationMessage.toString());
    }

    /**
     * 点击通知回调
     * @param context
     * @param notificationMessage
     */
    @Override
    public void onNotifyMessageOpened(Context context, NotificationMessage notificationMessage) {
        super.onNotifyMessageOpened(context, notificationMessage);
        LogUtils.e(TAG,"自带广播点击通知回调");
    }

    /**
     * 清除通知回调
     * @param context
     * @param notificationMessage
     */
    @Override
    public void onNotifyMessageDismiss(Context context, NotificationMessage notificationMessage) {
        super.onNotifyMessageDismiss(context, notificationMessage);
        LogUtils.e(TAG,"自带广播清除通知回调");
    }

    /**
     * 收到自定义消息回调
     * @param context
     * @param customMessage
     */
    @Override
    public void onMessage(Context context, CustomMessage customMessage) {
        super.onMessage(context, customMessage);
        LogUtils.e(TAG,"自带广播收到自定义消息回调");
    }
}

第二种、自己写一个自定义的广播,然后去手动监听,完成处理,但是记住如果在极光自带的广播里调用了拦截的方法,一定要super,不然你的自定义广播接收不到,下面是我的代码

public class WReceiver extends BroadcastReceiver {
    private static final String TAG = "极光";

    private NotificationManager nm;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (null == nm) {
            nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }

        Bundle bundle = intent.getExtras();

        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            LogUtils.d(TAG, "JPush 用户注册成功");

        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
            LogUtils.d(TAG, "接受到推送下来的自定义消息");
           
        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
            LogUtils.d(TAG, "接受到推送下来的通知");

        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
            LogUtils.d(TAG, "用户点击打开了通知");

        } else {
            LogUtils.d(TAG, "Unhandled intent - " + intent.getAction());
        }
    }

最新版Android端集成极光推送总结 2019-6-13_第12张图片
接下来的测试,看log就行了。

至于正式版的代码混淆,只需要在proguard-rules.pro中添加

# 极光推送
-dontoptimize
-dontpreverify

-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }

-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }

希望对读者有帮助,如果我的总结有缺漏或者错误请直接评论指出,谢谢(抱拳)!

你可能感兴趣的:(个人小结,Android)