极光推送(JPush Android SDK)
Author:HarleyLast update:2018/5/17
1.接入前准备工作
1.1登录进入管理控制台,创建应用程序,得到Appkey
1.2设置应用包名
2.SDk自动集成步骤
2.1在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。
android {
defaultConfig {
applicationId "com.xxx.xxx" //JPush上注册的包名.
ndk {
//选择要添加的对应cpu类型的.so库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
]
}
}
dependencies {
compile 'cn.jiguang.sdk:jpush:3.1.1' // 此处以JPush 3.1.1 版本为例。
compile 'cn.jiguang.sdk:jcore:1.1.9' // 此处以JCore 1.1.9 版本为例。
}
注 : 如果在添加以上 abiFilter 配置之后android Studio出现以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin
则在 Project 根目录的gradle.properties文件中添加:
android.useDeprecatedNdk=true
2.2AndroidManifest 示例
package添加您的应用包名
package="您应用的包名">
添加权限:
3添加代码混淆规则
在应用工程的proguard-project.txt里添加以下代码混淆规则:
-dontoptimize
-dontpreverify
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }
4添加代码
4.1init初始化SDK
示例代码:
public class ExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
}}
4.2接收推送消息Receiver
public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "MyReceiver";
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();
Logger.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle));
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
Logger.d(TAG, "JPush用户注册成功");
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
Logger.d(TAG, "接受到推送下来的自定义消息");
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
Logger.d(TAG, "接受到推送下来的通知");
receivingNotification(context,bundle);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
Logger.d(TAG, "用户点击打开了通知");
openNotification(context,bundle);
} else {
Logger.d(TAG, "Unhandled intent - " + intent.getAction());
}
}
}
4.3Intent 参数说明
private void processCustomMessage(Context context, Bundle bundle) {
String title = bundle.getString(JPushInterface.EXTRA_TITLE);//推送下来的通知的标题。
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);//推送下来的通知内容。
if (StringUtils.isEmpty(title)) {
Logger.w(TAG, "Unexpected: empty title (friend). Give up");
return;
}
}
JPushInterface.EXTRA_NOTIFICATION_TITLE
保存服务器推送下来的通知的标题。
JPushInterface.EXTRA_ALERT
保存服务器推送下来的通知内容。
JPushInterface.EXTRA_EXTRA
保存服务器推送下来的附加字段。这是个 JSON 字符串。
对应 API 消息内容的 extras 字段。
JPushInterface.EXTRA_NOTIFICATION_ID
通知栏的Notification ID,可以用于清除Notification
JPushInterface.EXTRA_MSG_ID
唯一标识调整消息的 ID, 可用于上报统计等。
5.0通知 vs 自定义消息(两者的区别)
1.通知(Notification),指在手机的通知栏(状态栏)上会显示的一条通知信息。
通知主要用于提示用户。一条通知,简单的填写纯文本的通知内容即可。
2.自定义消息不是通知,默认不会被SDK展示到通知栏上,极光推送仅负责透传给SDK。其内容和展示形式完全由开发者自己定义。
自定义消息主要用于应用的内部业务逻辑和特殊展示需求。
6.0使用别名
为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。
调用此 API 来设置别名:
public static void setAlias(Context context, int sequence, String alias);
调用此 API 来查询别名:
public static void getAlias(Context context,int sequence);
调用此 API 来删除别名:
public static void deleteAlias(Context context,int sequence);
温馨提示:设置标签别名请注意处理call back结果。只有设置成功, 才可以向目标推送。否则服务器 API 会返回1011错误。
7.0使用标签
用于给某一群人推送消息。
标签类似于博客里为文章打上 tag ,即为某资源分类。
调用此 API 来新增标签:
public static void addTags(Context context, int sequence,Set tags);
调用此 API 来删除指定标签:
public static void deleteTags(Context context, int sequence,Set tags);
调用此 API 来清除所有标签:
public static void cleanTags(Context context, int sequence);
调用此 API 来查询所有标签:
public static void getAllTags(Context context, int sequence);
调用此 API 来查询指定tag与当前用户绑定的状态:
public static void checkTagBindState(Context context,int sequence,String tag);
8.0停止与恢复推送服务 API:
停止推送服务:
public static void stopPush(Context context);
恢复推送服务:
public static void resumePush(Context context);
注:用户登录成功时,设置推送别名和调用恢复推送服务API。退出时,设置别名为空和停止推送服务
示例代码:
JPushInterface.resumePush(mContext);//调用恢复推送服务API
JPushInterface.setAlias(mContext, userBean.getId(), new TagAliasCallback() {// 设置推送别名
@Override
public void gotResult(int i, String s, Set set) {
}
});
9.0自定义通知栏样式设计:
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
//通知栏显示内容
builder.setTicker(TextUtils.isEmpty(title) ? "自定义极光推送" : title);
//通知消息下拉是显示的文本内容
builder.setContentText(TextUtils.isEmpty(content) ? title : content);
//通知栏消息下拉时显示的标题
builder.setContentTitle(TextUtils.isEmpty(title) ? "自定义极光推送" : title);
//接收到通知时,按手机的默认设置进行处理,声音,震动,灯
builder.setDefaults(Notification.DEFAULT_ALL);
//通知栏显示图标
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setLargeIcon(BitmapUtil.decodeBitmap(context, R.mipmap.ic_launcher, 72, 72));//todo 内存溢出
builder.setContentIntent(pendingIntent);
Notification notification = builder.build();
//点击跳转后消失
notification.flags |= Notification.FLAG_AUTO_CANCEL;
int notifyId = (int) System.currentTimeMillis();
NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
manager.notify(notifyId, notification);
9.0 三分钟Demo
https://docs.jiguang.cn/jpush/client/Android/android_3m/