提示:demo为信鸽推送单个账号推送,记得修改XINGEPUSH_APPID和XINGEPUSH_SECRETKEY!!
XingePush 工具类:
package com.bee.push.xinge;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import org.json.JSONException;
import org.json.JSONObject;
import jvc.util.StringUtils;
import jvc.util.security.SimpleCrypt;
/**
* TODO 信鸽推送-单个账号推送,V3版本
*
* @see 使用V3版本进行单个账号的信鸽推送。
* @date 2018年10月29日15:42:34
* @author liucl
*
*/
public class XingePush {
/**
* TODO 是否推送到开发区
*/
private boolean isDev = false;
/**
* TODO 推送设备类型:android 安卓;ios 苹果
*
* @see 请使用PLATFORM_ANDROID和PLATFORM_IOS
*/
private String platform = "";
private String subtitle = "";
private String title = "";
private String content = "";
private String resMsg = "";
private ArrayList<String> accountList = new ArrayList<String>();
public void setDev(boolean isDev) {
this.isDev = isDev;
}
public boolean isDev() {
return isDev;
}
public String getPlatform() {
return platform;
}
/**
* TODO 推送设备类型:android 安卓;ios 苹果
*
* @see 请使用PLATFORM_ANDROID和PLATFORM_IOS
* @param platform
*/
public void setPlatform(String platform) {
this.platform = platform.toLowerCase();
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public ArrayList<String> getAccountList() {
return accountList;
}
public void setAccount(String account) {
accountList.add(account);
}
public String pushSingleAccount() {
try {
JSONObject object = new JSONObject();
object.put("audience_type", "account");
object.put("platform", platform);
object.put("message_type", "notify");
object.put("badge_type", "-2");
object.put("multi_pkg", true);
object.put("account_list", accountList);
if (isDev)
object.put("environment", "dev");
if ("ios".equals(platform))
object.put("message", makeMessage(title, content, subtitle));
else
object.put("message", makeMessage(title, content));
System.out.println("-----------------[Push Start]------------------------");
System.out.println(object);
resMsg = postJsonDataToServer(address, object.toString());
System.out.println(resMsg);
System.out.println("-----------------[Push End]------------------------");
} catch (JSONException e) {
e.printStackTrace();
}
return resMsg;
}
public boolean pushSingleAccountBln() {
try {
JSONObject object = new JSONObject(pushSingleAccount());
if (object != null && object.getInt("ret_code") == 0)
return true;
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
public void pushSingleAccountAll() {
// 推送安卓:
this.platform = XingePush.PLATFORM_ANDROID;
boolean bln1 = pushSingleAccountBln();
String res1 = resMsg;
// 推送苹果:
this.platform = XingePush.PLATFORM_IOS;
boolean bln2 = pushSingleAccountBln();
String res2 = resMsg;
if (!bln1 && !bln2) {
System.out.println("信鸽推送两次失败,可能有问题:" + res1 + res2);
}
}
// ---------------------------------------------------------------------------
// -------------------【内部的业务逻辑 start】----------------------------------
// ---------------------------------------------------------------------------
/**
* TODO 推送设备类型:android 安卓
*
* @param platform
*/
public static final String PLATFORM_ANDROID = "android";
/**
* TODO 推送设备类型:ios 苹果
*
* @param platform
*/
public static final String PLATFORM_IOS = "ios";
private static final String XINGEPUSH_APPID = "xxx";// appId,从信鸽后台查看,可以存数据库。
private static final String XINGEPUSH_SECRETKEY = "xxx";// secretKey,从信鸽后台查看,可以存数据库。
private static final String address = "https://openapi.xg.qq.com/v3/push/app";// v3版本链接
private static String MQTTPUSH_HEADER_BASIC;
static {
if (StringUtils.isBlank(MQTTPUSH_HEADER_BASIC)) {
try {
MQTTPUSH_HEADER_BASIC = getHeader(XINGEPUSH_APPID + ":" + XINGEPUSH_SECRETKEY);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static String getHeader(String auth) throws Exception {
return new String(SimpleCrypt.encodeByte(auth.getBytes("UTF-8")));
}
private static String postJsonDataToServer(String address, String jsonData) {
return postJsonDataToServer(address, jsonData, "UTF-8");
}
private static String postJsonDataToServer(String address, String jsonData, String encode) {
URL url = null;
try {
// 创建连接
url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");// POST
conn.setRequestProperty("Content-type", "application/json");
conn.setRequestProperty("Accept-Charset", encode);
conn.setRequestProperty("Authorization", "Basic " + MQTTPUSH_HEADER_BASIC);// HTTP
// Basic认证,信鸽账号密码。
conn.connect();
// Json参数
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.write(jsonData.getBytes(encode));
out.flush();
out.close();
// 获取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), encode));
String lines;
StringBuffer sb = new StringBuffer();
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(encode), encode);
lines = URLDecoder.decode(URLDecoder.decode(lines, encode), encode);
sb.append(lines);
}
reader.close();
// 关闭连接
conn.disconnect();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return "";
} finally {
}
}
private static JSONObject makeMessage(String title, String content, String subtitle) throws JSONException {
JSONObject message = new JSONObject();
message.put("title", title);
message.put("content", content);
if (subtitle != null)
message.put("ios", new JSONObject().put("aps",
new JSONObject().put("alert", new JSONObject().put("subtitle", subtitle))));
return message;
}
private JSONObject makeMessage(String title, String content) throws JSONException {
return makeMessage(title, content, null);
}
}
Main方法测试:
public static void main(String[] args) {
XingePush xingePush = new XingePush();
xingePush.setDev(true);
xingePush.setTitle("大标题");
xingePush.setContent("正文......");
xingePush.setAccount("这是与客户端商定的账号");
xingePush.setSubtitle("小标题,IOS专用。");
// 推送全部(安卓+苹果):
xingePush.pushSingleAccountAll();
// 推送安卓:
xingePush.setPlatform(XingePush.PLATFORM_ANDROID);
xingePush.pushSingleAccountBln();
// 推送苹果:
xingePush.setPlatform(XingePush.PLATFORM_IOS);
xingePush.pushSingleAccountBln();
}