OPPO推送服务端 Java SDK集成
SDK使用Java编写,接入前需确认是否安装Java环境并且版本为1.7及以上
1)开发者需要登录推送运营平台获取应用的AppKey, MasterSecret
2)下载SDK相关包:OPush_JAVA_SDK.zip
1)解压已下载的SDK包
2)将文件夹下所有jar文件放入项目工程的libs目录
3)刷新工程,确保文件出现在libs目录下。如果没有的话请手动添加
类名 | 使用说明 |
---|
Sender | 发送消息工具类,可以发送单推、批量单推、广播消息 |
Environment | 枚举类 Environment.CHINA_PRODUCTION 中国 Environment.INTERNATIONAL 海外 |
Notification | 通知栏消息 |
Target | 推送目标类,包含推送目标类型、推送目标 |
TargetType | 推送目标类型,支持registration_id推送类型 |
Result | 服务器返回的结果 |
ReturnCode | 返回的状态码,根据这个状态可以自检请求参数的是否合法 |
ReturnCode.ErrorCode | 平台返回的状态码枚举类 |
详情见SDK javadoc。
SDK提供Sender类封装了OPPO Push推送服务的各类服务接口。因此,使用SDK推送消息或调用其他服务,首先要创建Sender对象。
// 使用appKey, masterSecret创建sender对象(每次发送消息都使用这个sender对象)
Sender sender = Sender.newBuilder()
.appKey("appKey") // 设置appKey
.masterSecret("masterSecret") // 设置masterSecret
.env(Environment.CHINA_PRODUCTION) // 中国
.httpMaxConnection(64) // 设置http最大连接数
.httpMaxRoute(64) // 设置最大http路由连接数
.httpConnectionTimeout(5000) // http连接超时时间
.httpConnectRequestTimeout(5000) // 等待连接超时时间
.httpSocketTimeout(5000) // socket超时时间
.build();
推送消息前,需要构造消息内容,SDK提供Notification类供开发者设置消息内容。
/**
* 这是构造一个通知栏消息体Notification对象的实例方法。
* 请注意,后续的例子会调用这个getNotification()方法
* */
private Notification getNotification() {
Notification notification = new Notification();
// 标题,内容是必填项
notification.setTitle("通知栏消息tile");
notification.setContent("通知栏内容");
/*
* 以下参数非必填项,参考OPPO push服务端api文档进行设置,本示例选取部分参数进行示范
*/
//通知栏样式 1. 标准样式 2. 长文本样式 3. 大图样式 【非必填,默认1-标准样式】
notification.setStyle(1);
// App开发者自定义消息Id,OPPO推送平台根据此ID做去重处理,对于广播推送相同appMessageId只会保存一次,对于单推相同appMessageId只会推送一次
notification.setAppMessageId(UUID.randomUUID().toString());
// 应用接收消息到达回执的回调URL,字数限制200以内,中英文均以一个计算
notification.setCallBackUrl("http://www.test.com");
// App开发者自定义回执参数,字数限制50以内,中英文均以一个计算
notification.setCallBackParameter("");
// 点击动作类型0,启动应用;1,打开应用内页(activity的intent action);2,打开网页;4,打开应用内页(activity);【非必填,默认值为0】;5,Intent scheme URL
notification.setClickActionType(4);
// 应用内页地址【click_action_type为1或4时必填,长度500】
notification.setClickActionActivity("com.coloros.push.demo.component.InternalActivity");
// 网页地址【click_action_type为2必填,长度500】
notification.setClickActionUrl("http://www.test.com");
// 动作参数,打开应用内页或网页时传递给应用或网页【JSON格式,非必填】,字符数不能超过4K,示例:{"key1":"value1","key2":"value2"}
notification.setActionParameters("{\"key1\":\"value1\",\"key2\":\"value2\"}");
// 展示类型 (0, “即时”),(1, “定时”)
notification.setShowTimeType(1);
// 定时展示开始时间(根据time_zone转换成当地时间),时间的毫秒数
notification.setShowStartTime(System.currentTimeMillis() + 1000 * 60 * 3);
// 定时展示结束时间(根据time_zone转换成当地时间),时间的毫秒数
notification.setShowEndTime(System.currentTimeMillis() + 1000 * 60 * 5);
// 是否进离线消息,【非必填,默认为True】
notification.setOffLine(true);
// 离线消息的存活时间(time_to_live) (单位:秒), 【off_line值为true时,必填,最长3天】
notification.setOffLineTtl(24 * 3600);
// 时区,默认值:(GMT+08:00)北京,香港,新加坡
notification.setTimeZone("GMT+08:00");
// 0:不限联网方式, 1:仅wifi推送
notification.setNetworkType(0);
return notification;
}
// 创建通知栏消息体
Notification notification = getNotification();
// 创建推送目标对象,传入注册ID
Target target = Target.build("CN_8fa0618f178145d8c2a44091a1326411");
// 调用单推接口,推送消息,获得调用结果
Result result = sender.unicastNotification(notification, target);
// 获取http请求状态码
result.getStatusCode();
// 获取平台返回码
result.getReturnCode();
// 获取平台返回的messageId
result.getMessageId();
// batch最大长度为1000,超出会导致请求失败
Map batch = new HashMap();
// 创建目标对象并加入到批量队列中
batch.put(Target.build("CN_ddfaa7db1e4ecf75014143bdbc3e53ea"), getNotification());
batch.put(Target.build("CN_8fa0618f178145d8c2a44091a1326411"), getNotification());
// 调用批量单推接口,推送消息,获得调用结果
Result result = sender.unicastBatchNotification(batch);
// 获取http请求状态码
result.getStatusCode();
// 获取平台返回码
result.getReturnCode();
// 获取对应批量单推结果
List batchResult = result.getUnicastBatchResults();
for (Result.UnicastBatchResult record : batchResult) {
record.getMessageId();
record.getErrorCode();
record.getErrorMessage();
record.getTargetValue();
}
/**
* 推送广播消息分为两步
* 首先调用保存消息体接口,保存广播消息内容,得到消息ID
* 使用消息ID调用广播推送接口,推送广播消息
* */
// 创建通知栏消息体
Notification broadNotification = getNotification();
// 发送保存消息体请求
Result saveResult = sender.saveNotification(broadNotification);
// 获取messageId
String messageId = saveResult.getMessageId();
// 获取http请求状态码
saveResult.getStatusCode();
// 获取平台返回码
saveResult.getReturnCode();
// 创建推送目标 广播目标接受多个注册ID,字符串中以英文分号';'分割
Target target = new Target();
target.setTargetValue("CN_ddfaa7db1e4ecf75014143bdbc3e53ea;CN_8fa0618f178145d8c2a44091a1326411");
// 发送广播消息
Result broadResult = sender.broadcastNotification(messageId, target);
// 获取广播taskId
broadResult.getTaskId();
List errorList = broadResult.getBroadcastErrorResults();
// 如果大小为0,代表所有目标发送成功
if (errorList != null && errorList.size() > 0) {
for (Result.BroadcastErrorResult error : errorList) {
// 错误码
error.getErrorCode();
// 目标
error.getTargetValue();
}
}
如果要推送带图片的消息,需要先上传图片。
注意:仅广播通知栏消息 支持图片推送功能。
// 指定图片文件
File bigPicture = new File("大图文件路径");
// 图片过期时间(单位秒),最长30天
int bigPictureTtl = 86400;
// 使用Sender调用上传大图接口
Result uploadBigPicResult = sender.uploadBigPicture(bigPictureTtl, bigPicture);
// 获取大图id,保存消息体填入
String bigPictureId = uploadBigPicResult.getBigPictureId();
// 创建消息体时选择图片推送消息类型(3表示图片推送),并传入图片ID
Notification notification = getNotification();
notification.setStyle(3);
notification.setBigPictureId(bigPictureId);
// 执行保存消息体,广播推送等后续操作
// save and send notification ...
// 指定图片文件
File smallPicture = new File("小图文件路径");
// 图片过期时间(单位秒),最长30天
int smallPictureTtl = 86400;
// 使用Sender对象调用上传小图接口
Result uploadSmallPicResult = sender.uploadSmallPicture(smallPictureTtl, smallPicture);
// 获取小图id,保存消息体
String smallPictureId = uploadSmallPicResult.getSmallPictureId();
// 创建消息体时选择图片推送消息类型(3表示图片推送),并传入图片ID
Notification notification = getNotification();
notification.setStyle(3);
notification.set(smallPictureId);
// 执行保存消息体,广播推送等后续操作
// save and send notification ...