一、浏览个推官方文档,注册个推账号
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 StringappId ="";
private static StringappKey ="";
private static StringmasterSecret ="";
private static Stringurl ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args)throws IOException {
IGtPushpush =new IGtPush(url,appKey,masterSecret);
// 定义"点击链接打开通知模板",并设置标题、内容、链接
LinkTemplatetemplate =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列表、是否支持离线发送、以及离线消息有效期(单位毫秒)
AppMessagemessage =new AppMessage();
message.setData(template);
message.setAppIdList(appIds);
message.setOffline(true);
message.setOfflineExpireTime(1000 * 600);
IPushResultret =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 StringappId ="";
private static StringappKey ="";
private static StringmasterSecret ="";
static StringCID ="";
//别名推送方式,需进行绑定操作
// static String Alias = "";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args)throws Exception {
IGtPushpush =new IGtPush(host,appKey,masterSecret);
LinkTemplatetemplate =linkTemplateDemo();
SingleMessagemessage =new SingleMessage();
message.setOffline(true);
// 离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 3600 * 1000);
message.setData(template);
// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
message.setPushNetWorkType(0);
Targettarget =new Target();
target.setAppId(appId);
target.setClientId(CID);
//target.setAlias(Alias);
IPushResultret =null;
try {
ret =push.pushMessageToSingle(message,target);
}catch (RequestExceptione) {
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() {
LinkTemplatetemplate =new LinkTemplate();
// 设置APPID与APPKEY
template.setAppId(appId);
template.setAppkey(appKey);
Style0style =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 StringappId ="";
private static StringappKey ="";
private static StringmasterSecret ="";
static StringCID1 ="";
static StringCID2 ="";
//别名推送方式
// static String Alias1 = "";
// static String Alias2 = "";
static Stringhost ="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");
IGtPushpush =new IGtPush(host,appKey,masterSecret);
// 通知透传模板
NotificationTemplatetemplate =notificationTemplateDemo();
ListMessagemessage =new ListMessage();
message.setData(template);
// 设置消息离线,并设置离线时间
message.setOffline(true);
// 离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 1000 * 3600);
// 配置推送目标
List targets =new ArrayList();
Targettarget1 =new Target();
Targettarget2 =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
StringtaskId =push.getContentId(message);
IPushResultret =push.pushMessageToList(taskId,targets);
System.out.println(ret.getResponse().toString());
}
public static NotificationTemplate notificationTemplateDemo() {
NotificationTemplatetemplate =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 StringappId ="";
private static StringappKey ="";
private static StringmasterSecret ="";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args)throws Exception {
IGtPushpush =new IGtPush(host,appKey,masterSecret);
LinkTemplatetemplate =linkTemplateDemo();
AppMessagemessage =new AppMessage();
message.setData(template);
message.setOffline(true);
//离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24 * 1000 * 3600);
//推送给App的目标用户需要满足的条件
AppConditionscdt =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);
IPushResultret =push.pushMessageToApp(message,"任务别名_toApp");
System.out.println(ret.getResponse().toString());
}
public static LinkTemplate linkTemplateDemo()throws Exception {
LinkTemplatetemplate =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 StringappId ="";
private static StringappKey ="";
private static StringmasterSecret ="";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args)throws Exception {
IGtPushpush =new IGtPush(host,appKey,masterSecret);
LinkTemplatetemplate =linkTemplateDemo();
AppMessagemessage =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);
IPushResultret =push.pushMessageToApp(message,"任务别名_toApp");
System.out.println(ret.getResponse().toString());
}
public static LinkTemplate linkTemplateDemo()throws Exception {
LinkTemplatetemplate =new LinkTemplate();
template.setAppId(appId);
template.setAppkey(appKey);
Style0style =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 StringappId ="nSJtifqVSI7HkPrKHlxhD6";
static Stringappkey ="WlZGdJlcUB8ds32Y2Thn91";
static Stringmastersecret ="5vjiwMEaij5VvYf7VhlGM4";
static StringCID ="3e170b169630706f82baf94c8a2b8923";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
static StringAlias ="aliastest";
public static void main(String[]args)throws Exception {
IGtPushpush =new IGtPush(host,appkey,mastersecret);
IAliasResultbindSCid =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 StringappId ="nSJtifqVSI7HkPrKHlxhD6";
static Stringappkey ="WlZGdJlcUB8ds32Y2Thn91";
static Stringmastersecret ="5vjiwMEaij5VvYf7VhlGM4";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args) {
List<Target>Lcids =new ArrayList<Target>();
Targettarget1 =new Target();
Targettarget2 =new Target();
target1.setClientId("3e170b169630706f82baf94c8a2b8923");
target1.setAlias("个推1");
target2.setClientId("23170b169630706f82baf94c8a2b8923");
target2.setAlias("个推2");
Lcids.add(target1);
Lcids.add(target2);
IGtPushpush =new IGtPush(host,appkey,mastersecret);
IAliasResultbindLCid =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 StringappId ="nSJtifqVSI7HkPrKHlxhD6";
static Stringappkey ="WlZGdJlcUB8ds32Y2Thn91";
static Stringmastersecret ="5vjiwMEaij5VvYf7VhlGM4";
static StringAlias ="个推";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args)throws Exception {
IGtPushpush =new IGtPush(host,appkey,mastersecret);
IAliasResultqueryClient =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 StringappId ="nSJtifqVSI7HkPrKHlxhD6";
static Stringappkey ="WlZGdJlcUB8ds32Y2Thn91";
static Stringmastersecret ="5vjiwMEaij5VvYf7VhlGM4";
static StringCID ="548e1e5a08ce0380d31faba6256e9eb7";
static Stringhost ="http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[]args)throws Exception {
IGtPushpush =new IGtPush(host,appkey,mastersecret);
IAliasResultqueryAlias =push.queryAlias(appId,CID);
System.out.println("根据CID获取的别名:" +queryAlias.getAlias());
}
}