Getui
一、浏览个推官方文档,注册个推账号
1. http://docs.getui.com/getui/server/java/start/
2. 第一步: 创建个推开发者帐号
访问个推开发者平台http://dev.getui.com, 注册个推开发者帐号,如下图所示:
3. 第二步: 获取访问凭证
创建账号成功并登录后,可以在应用列表中看到自动生成的【个推App Demo】,然后点击【创建推送】,如下图所示:
然后点击左侧菜单栏【配置管理】--> 【应用配置】,就能看到关于此app的配置信息,这些配置信息就是第五步使用SDK发送消息需要的AppID,AppKey,MasterSecret,如下图所示:
4. 第三步: 安装Demo应用到手机
在应用【个推App Demo】点击【下载应用】,下载后安装到手机上,用来接受推送消息:
二、安装个推Java SDK
注:JDK要求
个推Java SDK需要JDK1.6以及之上版本。 可以到后面的网址去下载最新版的JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html
1. Maven方式安装
将下边的依赖放到maven项目的 pom.xml 中:
2. Jar包安装方式
(1) 下载工具包
下载服务端SDK开发工具包,下载地址为:http://www.getui.com/download/docs/getui/server/GETUI_JAVA_SDK_4.0.1.17.zip
(2) 导入依赖jar包
你的工程需要依赖“...\GETUI_SERVER_SDK\资源文件”目录下的所有jar包,如果使用Eclipse的话,导入jar包后,如下图所示:
(3) 占位
三、在eclipse中新建一个测试工程
1. New--project--JavaProject --Next--输入project Name--finish
四、测试消息发送,检测软件环境是否安装无误
下面以app推送接口为例来发送消息:
新建类name为AppPush,将以下代码复制到类中,运行后手机App可以收到一条消息推送,如图显示:
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class AppPush {
//定义常量, appId、appKey、masterSecret 采用本文档 "第二步 获取访问凭证 "中获得的应用配置
private static String appId = "";
private static String appKey = "";
private static String masterSecret = "";
private static String url = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws IOException {
IGtPush push = new IGtPush(url, appKey, masterSecret);
// 定义"点击链接打开通知模板",并设置标题、内容、链接
LinkTemplate template = new LinkTemplate();
template.setAppId(appId);
template.setAppkey(appKey);
template.setTitle("欢迎使用个推!");
template.setText("这是一条推送消息~");
template.setUrl("http://getui.com");
List<String> appIds = new ArrayList<String>();
appIds.add(appId);
// 定义"AppMessage"类型消息对象,设置消息内容模板、发送的目标App列表、是否支持离线发送、以及离线消息有效期(单位毫秒)
AppMessage message = new AppMessage();
message.setData(template);
message.setAppIdList(appIds);
message.setOffline(true);
message.setOfflineExpireTime(1000 * 600);
IPushResult ret = push.pushMessageToApp(message);
System.out.println(ret.getResponse().toString());
}
}
五、对单个用户推送消息
向单个clientid或别名用户推送消息。
注:个推使用clientid来标识每个独立的用户,每一台终端上每一个app拥有一个独立的clientid。
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.exceptions.RequestException;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.style.Style0;
public class PushtoSingle {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
private static String appId = "";
private static String appKey = "";
private static String masterSecret = "";
static String CID = "";
//别名推送方式,需进行绑定操作
// static String Alias = "";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception {
IGtPush push = new IGtPush(host, appKey, masterSecret);
LinkTemplate template = linkTemplateDemo();
SingleMessage message = new SingleMessage();
message.setOffline(true);
// 离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 3600 * 1000);
message.setData(template);
// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
message.setPushNetWorkType(0);
Target target = new Target();
target.setAppId(appId);
target.setClientId(CID);
//target.setAlias(Alias);
IPushResult ret = null;
try {
ret = push.pushMessageToSingle(message, target);
} catch (RequestException e) {
e.printStackTrace();
ret = push.pushMessageToSingle(message, target, e.getRequestId());
}
if (ret != null) {
System.out.println(ret.getResponse().toString());
} else {
System.out.println("服务器响应异常");
}
}
public static LinkTemplate linkTemplateDemo() {
LinkTemplate template = new LinkTemplate();
// 设置APPID与APPKEY
template.setAppId(appId);
template.setAppkey(appKey);
Style0 style = new Style0();
// 设置通知栏标题与内容
style.setTitle("中圣环境");
style.setText("测试推送");
// 配置通知栏图标
style.setLogo("icon.png");
// 配置通知栏网络图标
style.setLogoUrl("");
// 设置通知是否响铃,震动,或者可清除
style.setRing(true);
style.setVibrate(true);
style.setClearable(true);
template.setStyle(style);
// 设置打开的网址地址
template.setUrl("http://39.106.164.173:8080");
return template;
}
}
六、对指定列表用户推送消息
上传clientid或别名列表,对列表中所有clientid或别名用户进行消息推送,如果仅对单个用户推送务必使用单推接口,否则会严重影响推送性能,如果对少量甚至几个用户推送同样的消息,建议使用单推实现,性能会更高。
注:个推使用clientid来标识每个独立的用户,每一台终端上每一个app拥有一个独立的clientid。
import java.util.ArrayList;
import java.util.List;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.ListMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.NotificationTemplate;
public class PushList {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
private static String appId = "";
private static String appKey = "";
private static String masterSecret = "";
static String CID1 = "";
static String CID2 = "";
//别名推送方式
// static String Alias1 = "";
// static String Alias2 = "";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception {
// 配置返回每个用户返回用户状态,可选
System.setProperty("gexin_pushList_needDetails", "true");
// 配置返回每个别名及其对应cid的用户状态,可选
// System.setProperty("gexin_pushList_needAliasDetails", "true");
IGtPush push = new IGtPush(host, appKey, masterSecret);
// 通知透传模板
NotificationTemplate template = notificationTemplateDemo();
ListMessage message = new ListMessage();
message.setData(template);
// 设置消息离线,并设置离线时间
message.setOffline(true);
// 离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 1000 * 3600);
// 配置推送目标
List targets = new ArrayList();
Target target1 = new Target();
Target target2 = new Target();
target1.setAppId(appId);
target1.setClientId(CID1);
// target1.setAlias(Alias1);
target2.setAppId(appId);
target2.setClientId(CID2);
// target2.setAlias(Alias2);
targets.add(target1);
targets.add(target2);
// taskId用于在推送时去查找对应的message
String taskId = push.getContentId(message);
IPushResult ret = push.pushMessageToList(taskId, targets);
System.out.println(ret.getResponse().toString());
}
public static NotificationTemplate notificationTemplateDemo() {
NotificationTemplate template = new NotificationTemplate();
// 设置APPID与APPKEY
template.setAppId(appId);
template.setAppkey(appKey);
Style0 style = new Style0();
// 设置通知栏标题与内容
style.setTitle("请输入通知栏标题");
style.setText("请输入通知栏内容");
// 配置通知栏图标
style.setLogo("icon.png");
// 配置通知栏网络图标
style.setLogoUrl("");
// 设置通知是否响铃,震动,或者可清除
style.setRing(true);
style.setVibrate(true);
style.setClearable(true);
template.setStyle(style);
// 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动
template.setTransmissionType(2);
template.setTransmissionContent("请输入您要透传的内容");
return template;
}
}
七、对指定应用群推消息
对单个或多个指定应用的所有用户群发推送消息。
注:个推使用AppID来标识每个独立的应用。
public class PushtoAPP {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
private static String appId = "";
private static String appKey = "";
private static String masterSecret = "";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception {
IGtPush push = new IGtPush(host, appKey, masterSecret);
LinkTemplate template = linkTemplateDemo();
AppMessage message = new AppMessage();
message.setData(template);
message.setOffline(true);
//离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 1000 * 3600);
//推送给App的目标用户需要满足的条件
AppConditions cdt = new AppConditions();
List<String> appIdList = new ArrayList<String>();
appIdList.add(appId);
message.setAppIdList(appIdList);
//手机类型
List<String> phoneTypeList = new ArrayList<String>();
//省份
List<String> provinceList = new ArrayList<String>();
//自定义tag
List<String> tagList = new ArrayList<String>();
cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
cdt.addCondition(AppConditions.REGION, provinceList);
cdt.addCondition(AppConditions.TAG,tagList);
message.setConditions(cdt);
IPushResult ret = push.pushMessageToApp(message,"任务别名_toApp");
System.out.println(ret.getResponse().toString());
}
public static LinkTemplate linkTemplateDemo() throws Exception {
LinkTemplate template = new LinkTemplate();
template.setAppId(appId);
template.setAppkey(appKey);
Style0 style = new Style0();
// 设置通知栏标题与内容
style.setTitle("请输入通知栏标题");
style.setText("请输入通知栏内容");
// 配置通知栏图标
style.setLogo("icon.png");
// 配置通知栏网络图标
style.setLogoUrl("");
// 设置通知是否响铃,震动,或者可清除
style.setRing(true);
style.setVibrate(true);
style.setClearable(true);
template.setStyle(style);
template.setUrl("http://www.baidu.com");
return template;
}
}
八、定时对指定应用群推消息
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.style.Style0;
public class PushtoAPP {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
private static String appId = "";
private static String appKey = "";
private static String masterSecret = "";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception {
IGtPush push = new IGtPush(host, appKey, masterSecret);
LinkTemplate template = linkTemplateDemo();
AppMessage message = new AppMessage();
message.setData(template);
message.setOffline(true);
//离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 1000 * 3600);
//设置推送时间
message.setPushTime("201710261050");
//推送给App的目标用户需要满足的条件
AppConditions cdt = new AppConditions();
List<String> appIdList = new ArrayList<String>();
appIdList.add(appId);
message.setAppIdList(appIdList);
//手机类型
List<String> phoneTypeList = new ArrayList<String>();
//省份
List<String> provinceList = new ArrayList<String>();
//自定义tag
List<String> tagList = new ArrayList<String>();
cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
cdt.addCondition(AppConditions.REGION, provinceList);
cdt.addCondition(AppConditions.TAG, tagList);
message.setConditions(cdt);
IPushResult ret = push.pushMessageToApp(message, "任务别名_toApp");
System.out.println(ret.getResponse().toString());
}
public static LinkTemplate linkTemplateDemo() throws Exception {
LinkTemplate template = new LinkTemplate();
template.setAppId(appId);
template.setAppkey(appKey);
Style0 style = new Style0();
// 设置通知栏标题与内容
style.setTitle("请输入通知栏标题");
style.setText("请输入通知栏内容");
// 配置通知栏图标
style.setLogo("icon.png");
// 配置通知栏网络图标
style.setLogoUrl("");
// 设置通知是否响铃,震动,或者可清除
style.setRing(true);
style.setVibrate(true);
style.setClearable(true);
template.setStyle(style);
template.setUrl("http://www.baidu.com");
return template;
}
}
九、别名推送
个推使用clientid来标识每个独立的用户,但clientid不等于开发者应用上的用户名,如果希望将消息发给应用上指定用户名的用户,则需要将用户名指定一个用户别名。
为一个或者一批clientid用户定义一个用户别名,通过这个用户别名对一个或一批用户进行推送。目前一个别名最多允许绑定10个clientid。
别名规则说明:
1. 有效的别名组成:字母(区分大小写)、数字、下划线、汉字
2. 任务别名长度限制为 40 字节。( UTF-8 )
3. 一个别名最多允许绑定10个clientid。
4. 一个clientid只能绑定一个别名。
1. 为别名绑定单个CID
import com.gexin.rp.sdk.base.IAliasResult;
import com.gexin.rp.sdk.http.IGtPush;
public class AliasFunction {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
static String appId = "nSJtifqVSI7HkPrKHlxhD6";
static String appkey = "WlZGdJlcUB8ds32Y2Thn91";
static String mastersecret = "5vjiwMEaij5VvYf7VhlGM4";
static String CID = "3e170b169630706f82baf94c8a2b8923";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
static String Alias = "aliastest";
public static void main(String[] args) throws Exception {
IGtPush push = new IGtPush(host, appkey, mastersecret);
IAliasResult bindSCid = push.bindAlias(appId, Alias, CID);
System.out.println("绑定结果:" + bindSCid.getResult() + "错误码:" + bindSCid.getErrorMsg());
}
}
2. 为别名绑定多个CID
import java.util.ArrayList;
import java.util.List;
import com.gexin.rp.sdk.base.IAliasResult;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.http.IGtPush;
public class AliasFunction1 {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
static String appId = "nSJtifqVSI7HkPrKHlxhD6";
static String appkey = "WlZGdJlcUB8ds32Y2Thn91";
static String mastersecret = "5vjiwMEaij5VvYf7VhlGM4";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) {
List<Target> Lcids = new ArrayList<Target>();
Target target1 = new Target();
Target target2 = new Target();
target1.setClientId("3e170b169630706f82baf94c8a2b8923");
target1.setAlias("个推1");
target2.setClientId("23170b169630706f82baf94c8a2b8923");
target2.setAlias("个推2");
Lcids.add(target1);
Lcids.add(target2);
IGtPush push = new IGtPush(host, appkey, mastersecret);
IAliasResult bindLCid = push.bindAlias(appId, Lcids);
System.out.println(bindLCid.getResult());
System.out.println(bindLCid.getErrorMsg());
}
}
// 注:只要有一个cid绑定成功,getResult返回结果就为true
3. queryClientId-根据别名获取clientid信息
import com.gexin.rp.sdk.base.IAliasResult;
import com.gexin.rp.sdk.http.IGtPush;
public class AliasFunction2 {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
static String appId = "nSJtifqVSI7HkPrKHlxhD6";
static String appkey = "WlZGdJlcUB8ds32Y2Thn91";
static String mastersecret = "5vjiwMEaij5VvYf7VhlGM4";
static String Alias = "个推";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception {
IGtPush push = new IGtPush(host, appkey, mastersecret);
IAliasResult queryClient = push.queryClientId(appId, Alias);
System.out.println("根据别名获取的CID:" + queryClient.getClientIdList());
}
}
4. queryAlias-通过clientid获取别名信息
import com.gexin.rp.sdk.base.IAliasResult;
import com.gexin.rp.sdk.http.IGtPush;
public class AliasFunction3 {
//采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
static String appId = "nSJtifqVSI7HkPrKHlxhD6";
static String appkey = "WlZGdJlcUB8ds32Y2Thn91";
static String mastersecret = "5vjiwMEaij5VvYf7VhlGM4";
static String CID = "548e1e5a08ce0380d31faba6256e9eb7";
static String host = "http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception {
IGtPush push = new IGtPush(host, appkey, mastersecret);
IAliasResult queryAlias = push.queryAlias(appId, CID);
System.out.println("根据CID获取的别名:" + queryAlias.getAlias());
}
}