> LZ-says:啧啧,最近风起云淡,快过年喽~~~又是一件纠结的事儿。。。
前言
最近项目遇到推送,与后台贱人于一合计,果断采用了极光推送。在使用过程中,有爽有不爽,特意再次记录下。
使用记录
一、集成方式(远程依赖)
通过远程依赖方式接入,只需要简单配置如下:
compile 'cn.jiguang.sdk:jpush:3.1.1' compile 'cn.jiguang.sdk:jcore:1.1.9'
设置支持的SO库架构:
ndk { // 设置支持的SO库架构 abiFilters "armeabi", "arm64-v8a" }
接着在build中设置如下:
manifestPlaceholders = [ JPUSH_PKGNAME: applicationId, JPUSH_APPKEY : "JPush上注册的包名对应的appkey", JPUSH_CHANNEL: "暂时填写默认值即可", ]
不得不说极光这点做的还不错,只要以上几行代码即可快速接入,默认的自动配置相应的例如主配置文件内容等。
设置之后,即可达到消息推出的效果 (当然,这里忽略了注册账号,配置Android包名等等步骤,都是很easy,自行查看吧)。
推送的情况也很是easy,左侧Icon,标题以及内容。
二、如何指定某个用户进行推送?
官方提供我们设置Tag或者Alias,这里我们选择Alias方式进行设置。
由于LZ这里有一个可以唯一标识用户的家伙,所以这里直接将此值设置为Alias即可,关键代码如下:
private static final int MSG_SET_ALIAS = 1001; private void setAlias() { String alias = userName; if (TextUtils.isEmpty(alias)) { Toast.makeText(this, "异常", Toast.LENGTH_SHORT).show(); return; } // 调用 Handler 来异步设置别名 mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, alias)); } private final TagAliasCallback mAliasCallback = new TagAliasCallback() { @Override public void gotResult(int code, String alias, Set tags) { String logs; switch (code) { case 0: logs = "Set tag and alias success"; // 建议这里往 SharePreference 里写一个成功设置的状态。成功设置一次后,以后不必再次设置了。 break; case 6002: logs = "Failed to set alias and tags due to timeout. Try again after 60s."; // 延迟 60 秒来调用 Handler 设置别名 mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60); break; default: logs = "Failed with errorCode = " + code; } } }; private final Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case MSG_SET_ALIAS: // 调用 JPush 接口来设置别名。 JPushInterface.setAliasAndTags(getApplicationContext(), (String) msg.obj, null, mAliasCallback); break; default: } } };
按理说,这样子确实挺好,But,总有恶心的需求,推送默认的文本 加密了,,,加密了!!!
你说怎么破???
三、自定义消息
设置BroadcastReceiver :
import android.app.Notification;import android.app.NotificationManager;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.support.v4.app.NotificationCompat;import android.text.TextUtils;import cn.jpush.android.api.JPushInterface;/** * author : HLQ * e-mail : 925954424@qq.com * time : 2018/01/25 * desc : 极光自定义接收器 * version: 1.0 */public class JPushReceiver extends BroadcastReceiver { private static String TAG = "HLQ_Struggle"; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); String message = bundle.getString(JPushInterface.EXTRA_MESSAGE); if (!TextUtils.isEmpty(message)) { try { String result = new AESCryptUtil().decrypt(message); NotificationManager notifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); // 实例化NotificationCompat.Builde并设置相关属性 NotificationCompat.Builder builder = new NotificationCompat.Builder(context) // 设置小图标 .setSmallIcon(R.drawable.icon_app_logo) // 设置通知标题 .setContentTitle("核验反馈") // 设置通知内容 .setContentText(result) .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true); // 通过builder.build()方法生成Notification对象,并发送通知,id=1 notifyManager.notify((int) (Math.random()*100), builder.build()); } catch (Exception e) { e.printStackTrace(); } } } }
主配置文件中配置自定义的BroadcastReceiver :
为什么要这么弄呢?
默认的推送消息,在你拦截到接收的消息时,通知栏以及显示出来了,So,很无奈;
自定义消息时,极光只是默认将消息传入SDK而且不会显示在通知栏,所以,我们只能通过接收到消息的方式后,手动设置提示通知栏。
文末尾
东西虽少,但是实际操作过程中,确实遇到了坑,从默认切换自定义消息,不过好歹在下班半小时后成功搞完~~~
在此做个记录,顺便简单分享下~~~
希望会有更多的小伙伴源源不断加入分享大军~~~