> 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而且不会显示在通知栏,所以,我们只能通过接收到消息的方式后,手动设置提示通知栏。
文末尾
东西虽少,但是实际操作过程中,确实遇到了坑,从默认切换自定义消息,不过好歹在下班半小时后成功搞完~~~
在此做个记录,顺便简单分享下~~~
希望会有更多的小伙伴源源不断加入分享大军~~~
随时随地看视频