欢迎使用个推PUSH SDK For Java。
个推PUSH SDK For Java
的主要目标是提升开发者在服务端集成个推推送服务的开发效率。
开发者不需要进行复杂编程即可使用个推推送服务的各项常用功能,SDK可以自动帮您满足调用过程中所需的鉴权、组装参数、发送HTTP请求等非功能性要求。
下面向您介绍个推PUSH SDK For Java
的使用方法。
-
需要配合
JDK 1.8
或其以上版本。
通过Maven来管理项目依赖
推荐通过Maven来管理项目依赖,您只需在项目的pom.xml
文件中声明如下依赖
<dependency>
<groupId>com.getui.push</groupId>
<artifactId>restful-sdk</artifactId>
<version>1.0.6.0</version>
</dependency>
下列代码示例向您展示了使用个推Push SDK For Java
调用一个API的3个主要步骤:
- 设置参数,创建API。
- 发起API调用。
- 处理响应。
public class TestCreatApi {
public void test() {
// 设置httpClient最大连接数,当并发较大时建议调大此参数。或者启动参数加上 -Dhttp.maxConnections=200
System.setProperty("http.maxConnections", "200");
GtApiConfiguration apiConfiguration = new GtApiConfiguration();
//填写应用配置
apiConfiguration.setAppId("xxx");
apiConfiguration.setAppKey("xxx");
apiConfiguration.setMasterSecret("xxx");
// 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀
apiConfiguration.setDomain("https://restapi.getui.com/v2/");
// 实例化ApiHelper对象,用于创建接口对象
ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
// 创建对象,建议复用。目前有PushApi、StatisticApi、UserApi
PushApi pushApi = apiHelper.creatApi(PushApi.class);
}
}
通过代码修改 | 启动项 | 默认值 | 说明 |
---|---|---|---|
gtApiConfiguration.setSoTimeout(30000); | -Dgt.socket.timeout=30000 | 30000 | 修改全局的套接字读超时时间,默认30s,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.singleCidUri, 3000); | -D/push/single/cid= | 默认为gt.socket.timeout的值 | cid单推接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.singleAliasUri, 3000); | -D/push/single/alias= | 默认为gt.socket.timeout的值 | 别名单推接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.singleBatchCidUri, 6000); | -D/push/single/batch/cid= | 默认为gt.socket.timeout的值 | cid批量单推接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.singleBatchAliasUri, 6000); | -D/push/single/batch/alias= | 默认为gt.socket.timeout的值 | 别名批量单推接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.pushListMessageUri, 3000); | -D/push/list/message= | 默认为gt.socket.timeout的值 | 保存列表推消息体接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.pushListCidUri, 6000); | -D/push/list/cid= | 默认为gt.socket.timeout的值 | cid列表推接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setCustomSocketTimeout(PushApi.pushListAliasUri, 6000); | -D/push/list/alias= | 默认为gt.socket.timeout的值 | 别名列表推接口设置套接字读取超时时间,单位ms |
gtApiConfiguration.setConnectTimeout(10000); | -Dgt.connect.timeout=10000 | 10000 | 修改连接超时时间,默认10s,单位ms |
gtApiConfiguration.setMaxHttpTryTime(1); | -Dgt.max.http.try.times=1 | 1 | 设置重试次数; 上述配置项设为1时,如果请求失败(超时或其他异常),sdk内部会重试1次,重试可能造成消息重复,建议客户配合消息幂等使用,详见文档:消息覆盖https://docs.getui.com/getui/server/rest_v2/advanced/; 用户不接受重试的,可将此值改为0 |
gtApiConfiguration.setOpenAnalyseStableDomainSwitch(true); | -Dgt.analyse.stable.domain.switch=true | true | 是否开启稳定域名检测 |
gtApiConfiguration.setMaxFailedNum(10); | -Dgt.max.failed.num=10 | 10 | 开启稳定域名检测时生效,单位时间内失败总次数阈值,达到阈值会切换域名 |
gtApiConfiguration.setCheckMaxFailedNumInterval(3000); | -Dgt.check.max.failed.num.interval=3000 | 3000 | 开启稳定域名检测时生效,修改上述阈值的单位时间,单位ms |
gtApiConfiguration.setContinuousFailedNum(3); | -Dgt.continuous.failed.num=3 | 3 | 开启稳定域名检测时生效,连续失败次数达到阈值会切换域名 |
public class TestPushApi {
//pushApi的创建见上述使用示例:创建API
public PushApi pushApi;
public void test() {
//根据cid进行单推
PushDTO<Audience> pushDTO = new PushDTO<Audience>();
// 设置推送参数
pushDTO.setRequestId(System.currentTimeMillis() + "");
/**** 设置个推通道参数 *****/
PushMessage pushMessage = new PushMessage();
pushDTO.setPushMessage(pushMessage);
GTNotification notification = new GTNotification();
pushMessage.setNotification(notification);
notification.setTitle("个title");
notification.setBody("个body");
notification.setClickType("url");
notification.setUrl("https://www.getui.com");
/**** 设置个推通道参数,更多参数请查看文档或对象源码 *****/
/**** 设置厂商相关参数 ****/
PushChannel pushChannel = new PushChannel();
pushDTO.setPushChannel(pushChannel);
/*配置安卓厂商参数*/
AndroidDTO androidDTO = new AndroidDTO();
pushChannel.setAndroid(androidDTO);
Ups ups = new Ups();
androidDTO.setUps(ups);
ThirdNotification thirdNotification = new ThirdNotification();
ups.setNotification(thirdNotification);
thirdNotification.setTitle("厂商title");
thirdNotification.setBody("厂商body");
thirdNotification.setClickType("url");
thirdNotification.setUrl("https://www.getui.com");
// 两条消息的notify_id相同,新的消息会覆盖老的消息,取值范围:0-2147483647
// thirdNotification.setNotifyId("11177");
/*配置安卓厂商参数结束,更多参数请查看文档或对象源码*/
/*设置ios厂商参数*/
IosDTO iosDTO = new IosDTO();
pushChannel.setIos(iosDTO);
// 相同的collapseId会覆盖之前的消息
iosDTO.setApnsCollapseId("xxx");
Aps aps = new Aps();
iosDTO.setAps(aps);
Alert alert = new Alert();
aps.setAlert(alert);
alert.setTitle("ios title");
alert.setBody("ios body");
/*设置ios厂商参数结束,更多参数请查看文档或对象源码*/
/*配置鸿蒙厂商参数*/
HarmonyDTO harmonyDTO = new HarmonyDTO();
pushChannel.setHarmony(harmonyDTO);
HarmonyNotification harmonyNotification = new HarmonyNotification();
harmonyDTO.setNotification(harmonyNotification);
harmonyNotification.setTitle("鸿蒙厂商title");
harmonyNotification.setBody("鸿蒙厂商body");
harmonyNotification.setCategory("MARKETING");
harmonyNotification.setClickType("want");
harmonyNotification.setWant("{\"deviceId\":\"\",\"bundleName\":\"com.getui.push\",\"abilityName\":\"TestAbility\",\"uri\":\"https://www.test.com:8080/push/test\",\"action\":\"com.test.action\",\"parameters\":{\"name\":\"Getui\",\"age\":12}}");
/*配置鸿蒙厂商参数结束,更多参数请查看文档或对象源码*/
/*设置接收人信息*/
Audience audience = new Audience();
pushDTO.setAudience(audience);
audience.addCid("xxx");
/*设置接收人信息结束*/
/**** 设置厂商相关参数,更多参数请查看文档或对象源码 ****/
// 进行cid单推
ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
if (apiResult.isSuccess()) {
// success
System.out.println(apiResult.getData());
} else {
// failed
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
}
public class TestStatisticApi {
//StatisticApi的创建见上述使用示例:创建API
public StatisticApi statisticApi;
public void test() {
// 获取单日推送数据
Set<String> taskIds = new HashSet<String>();
taskIds.add("xxx");
ApiResult<Map<String, Map<String, StatisticDTO>>> apiResult = statisticApi.queryPushResultByTaskIds(taskIds);
if (apiResult.isSuccess()) {
// success
System.out.println(apiResult.getData());
} else {
// failed
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
}
public class TestUserApi {
//UserApi的创建见上述使用示例:创建API
public UserApi userApi;
public void test() {
Set<String> cids = new HashSet<String>();
cids.add("xxx");
// 查询用户状态
ApiResult<Map<String, CidStatusDTO>> apiResult = userApi.queryUserStatus(cids);
if (apiResult.isSuccess()) {
// success
System.out.println(apiResult.getData());
} else {
// failed
System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
}
}
}
其余推送功能可参考该链接
当需要使用代理进行http访问时,可以参考如下设置
GtApiConfiguration apiConfiguration = new GtApiConfiguration();
//设置代理对象,参数依次为host、端口、鉴权账户、鉴权密码。其中鉴权账户密码可选
GtHttpProxyConfig proxyConfig = new GtHttpProxyConfig("xxx",xxx,"xxx","xxx");
apiConfiguration.setProxyConfig(proxyConfig);
ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
PushApi pushApi = apiHelper.creatApi(PushApi.class);
以下是消息推送功能与推送API的对应关系
API类别 | 功能 | 调用的API名称 |
---|---|---|
鉴权API | 鉴权 | com.getui.push.v2.sdk.api.AuthApi.auth |
鉴权API | 删除鉴权 | com.getui.push.v2.sdk.api.AuthApi.close |
推送API | cid单推 | com.getui.push.v2.sdk.api.PushApi.pushToSingleByCid |
推送API | 别名单推 | com.getui.push.v2.sdk.api.PushApi.pushToSingleByAlias |
推送API | cid批量单推 | com.getui.push.v2.sdk.api.PushApi.pushBatchByCid |
推送API | 别名批量单推 | com.getui.push.v2.sdk.api.PushApi.pushBatchByAlias |
推送API | tolist创建消息 | com.getui.push.v2.sdk.api.PushApi.createMsg |
推送API | cid批量推 | com.getui.push.v2.sdk.api.PushApi.pushListByCid |
推送API | 别名批量推 | com.getui.push.v2.sdk.api.PushApi.pushListByAlias |
推送API | 群推 | com.getui.push.v2.sdk.api.PushApi.pushAll |
推送API | 条件筛选用户推送 | com.getui.push.v2.sdk.api.PushApi.pushByTag |
推送API | 标签快速推送 | com.getui.push.v2.sdk.api.PushApi.pushByFastCustomTag |
推送API | 停止任务 | com.getui.push.v2.sdk.api.PushApi.stopPush |
推送API | 查询定时任务 | com.getui.push.v2.sdk.api.PushApi.queryScheduleTask |
推送API | 删除定时任务 | com.getui.push.v2.sdk.api.PushApi.deleteScheduleTask |
统计API | 获取推送结果 | com.getui.push.v2.sdk.api.StatisticApi.queryPushResultByTaskIds |
统计API | 任务组名查报表 | com.getui.push.v2.sdk.api.StatisticApi.queryPushResultByGroupName |
统计API | 单日推送数据 | com.getui.push.v2.sdk.api.StatisticApi.queryPushResultByDate |
统计API | 单日用户数据接口 | com.getui.push.v2.sdk.api.StatisticApi.queryUserDataByDate |
统计API | 24小时在线用户数 | com.getui.push.v2.sdk.api.StatisticApi.queryOnlineUserData |
用户API | 绑定别名 | com.getui.push.v2.sdk.api.UserApi.bindAlias |
用户API | 根据cid查询别名 | com.getui.push.v2.sdk.api.UserApi.queryAliasByCid |
用户API | 根据别名查询cid | com.getui.push.v2.sdk.api.UserApi.queryCidByAlias |
用户API | 批量解绑别名 | com.getui.push.v2.sdk.api.UserApi.batchUnbindAlias |
用户API | 解绑所有别名 | com.getui.push.v2.sdk.api.UserApi.unbindAllAlias |
用户API | 一个用户绑定一批标签 | com.getui.push.v2.sdk.api.UserApi.userBindTags |
用户API | 一批用户绑定一个标签 | com.getui.push.v2.sdk.api.UserApi.usersBindTag |
用户API | 一批用户解绑一个标签 | com.getui.push.v2.sdk.api.UserApi.deleteUsersTag |
用户API | 查询标签 | com.getui.push.v2.sdk.api.UserApi.queryUserTags |
用户API | 添加黑名单用户 | com.getui.push.v2.sdk.api.UserApi.addBlackUser |
用户API | 移除黑名单用户 | com.getui.push.v2.sdk.api.UserApi.removeBlackUser |
用户API | 查询用户状态 | com.getui.push.v2.sdk.api.UserApi.queryUserStatus |
用户API | 设置角标(仅支持IOS) | com.getui.push.v2.sdk.api.UserApi.setBadge |
用户API | 查询用户总量 | com.getui.push.v2.sdk.api.UserApi.queryUser |
注:更多API持续更新中,敬请期待。
-
新建api接口类,使用类注解
com.getui.push.v2.sdk.anno.GtApi
标记为个推接口类 -
接口,使用
com.getui.push.v2.sdk.anno.method
包下的方法注解GtGet
/GtPost
/GtPut
/GtDelete
标记请求方式,分别代表GET
、POST
、PUT
、DELETE
四种HTTP请求方式 -
参数,使用
com.getui.push.v2.sdk.anno.param
包下的参数注解GtPathParam
/GtHeaderParam
/GtQueryParam
/GtBodyParam
标记参数类型,分别表示HTTP请求中的四种参数: 路径参数/header参数/query参数/body参数