最近研究推送,找了找各个推送SDK的评价,大部分的人都在说极光的很好用,很好集成,出于对技术的敬畏,今天就打算去搞一搞,而且恰好公司项目的信鸽推送最近有毛病。刚好留个备胎。
话不多说直接上图。
首先用它那就肯定要在极光官网注册账号,也方便查看官方文档来进行学习。
注册完成可以进入开发者平台,然后按照流程 添加应用
接着进入推送设置,你的项目包路径,具体位置看下图
确定之后,就会可以下载Demo和APK文件了,虽然运行跑起来很酷,但是说实话,我去下载Demo去看他们的代码,太费劲儿了,所以接下来我就直接根据自己的成功案例来进行讲解说明
一、配置gradle
首先在项目的build.gradle里面配置
这东西就实现了自动集成减少手动配的问题,很是舒服
接着就是配置app的build.gradle文件
二、增加极光的广播和服务类继承类以及在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配置
在application节点中增加
至此,就实现了极光的android端集成。更新SDK版本号很是轻松,不像以前还需要导入本地依赖jar包进行配置,和权限什么的,有了jcenter,舒服很多
最后运行程序,发送广播测试一波
一次点击输入内容,最后点击最下面的发送预览,这样的你的程序就接收到了推送的消息了。
下面的什么的标签(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());
}
}
至于正式版的代码混淆,只需要在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.** { *; }
希望对读者有帮助,如果我的总结有缺漏或者错误请直接评论指出,谢谢(抱拳)!