Java信鸽推送JDK之v3版本Demo

提示: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();
	}

 

包含客户端和服务端 代码 亿级并发,秒级触达 稳定的大规模接入集群,同时与数亿移动智能终端保持稳定的长连接,支持十亿级并发 秒级触达用户,每天可发送百亿级的通知/消息 最省电省流量方案 智能识别网络环境,根据不同环境定制通讯协议,以最低消耗维护长连接,做到极致省电省流量 通知及消息高度压缩,节省流量的同时加密保证安全性 丰富标签,精准定向 特定标签人群,团队测试用户,全量用户,单个用户等多种推送范围选择 及时稳定地将信息送达到最相关的用户,形成用户粘性,避免骚扰 开放API接口,灵活自定义推送 开放推送能力,提供多种语言API ,包括Java/PHP/Python/Node.js,业务自由集成 可视效果,实时监控 实时监控通知/消息的抵达用户量,点击转化量,点击转化率,推送效果一目了然 使用方法 登录后,创建应用,获取应用的唯一识别码AccessKey和密钥SecretKey; 下载对应平台的SDK,并参考开发文档完成SDK集成; 通过API调用或Web业务端方便快速地完成推送测试和实际发送,并实时查看推送效果。 使用场景 通知,定义为Android和iOS开发者指南中的Notifidoveion。服务器定向将信息实时送达手机,通过建立一条手机与服务器的连接链路,当有消息需要发送到手机时,通过此链路发送即可。通过推送一条用户可见的信息,引导用户进行有目的性的操作。通常用于产品信息知会、新闻推送和个性化消息等场景。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值