OPPO推送服务端 Java SDK集成

SDK提供Sender类封装了OPPO Push推送服务的各类服务接口。因此,使用SDK推送消息或调用其他服务,首先要创建Sender对象。

OPPO推送服务端 Java SDK集成

接入准备

运行环境

SDK使用Java编写,接入前需确认是否安装Java环境并且版本为1.7及以上

获取SDK

1)开发者需要登录推送运营平台获取应用的AppKey, MasterSecret
2)下载SDK相关包:OPush_JAVA_SDK.zip

导入SDK

1)解压已下载的SDK包
2)将文件夹下所有jar文件放入项目工程的libs目录
3)刷新工程,确保文件出现在libs目录下。如果没有的话请手动添加

SDK类定义说明

类名使用说明
Sender发送消息工具类,可以发送单推、批量单推、广播消息
Environment枚举类
Environment.CHINA_PRODUCTION 中国
Environment.INTERNATIONAL 海外
Notification通知栏消息
Target推送目标类,包含推送目标类型、推送目标
TargetType推送目标类型,支持registration_id推送类型
Result服务器返回的结果
ReturnCode返回的状态码,根据这个状态可以自检请求参数的是否合法
ReturnCode.ErrorCode平台返回的状态码枚举类

详情见SDK javadoc

接入SDK示范

创建sender对象

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 ...

编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/11074/

部分内容来自网络投稿,如有侵权联系立删

(0)
上一篇 2022年11月18日 下午2:44
下一篇 2022年11月18日 下午2:47

相关推荐