Java版iPhone批量推送
#手機推送  #Java  #iPhone  #证书 


据網上版本進行更改

iPhone推送基本原理流程圖

iPhone Push

從上圖我們可以看到。

  1、首先是應用程序註冊推送。

  2、 IOS跟APNS Server要deviceToken。應用程序接受deviceToken。

  3、應用程序將deviceToken發送給PUSH服務端程序。

  4、服務端程序向APNS服務發送消息。

  5、APNS服務將消息發送給iPhone應用程序。

依賴包:

bcprov-jdk16-145-1.jar

commons-io-2.0.1.jar

commons-lang-2.5.jar

log4j-1.2.16.jar

javapns-jdk16-163.jar

java 代碼:

	/**
	 * 向iphone群組推送消息.(單個推送也可)
	 * @author Karl.luo at 2013-06-14
	 * @param deviceTokens
	 *            iphone手機獲取的token
	 * @param content
	 *            推送內容
	 * @param dict
	 * 			  需要添加的字典
	 */
	public static String mobilePushiPhone(List<String> deviceTokens,
			String content, String dict) {
		// apple service 此host為測試地址
		String host = "gateway.sandbox.push.apple.com"; 
		int port = 2195; // 端口
		// 文件地址,可以根據自己的實際情況拿到證書文件地址
		String filePos = (TipsDao.class.getResource("/") + "developer.p12")
				.substring(6); 
		log.debug(TipsDao.class.getResource("/"));
		// 證書文件密碼
		String fileCode = "111111"; 
		try {
			PayLoad payLoad = new PayLoad();
			payLoad.addAlert(content);// push的内容
			payLoad.addBadge(1);// 應用圖標上小紅圈的數值
			payLoad.addSound("default");// 鈴聲

			// 添加字典
			payLoad.addCustomDictionary("url", dict);
			PushNotificationManager pushManager = PushNotificationManager
					.getInstance();

			// 鏈接到APNs
			pushManager.initializeConnection(host, port, filePos, fileCode,
					SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);

			// 開始循環推送
			for (int i = 0; i < deviceTokens.size(); i++) {
				pushManager.addDevice("iphone" + i, deviceTokens.get(i));
				Device client = pushManager.getDevice("iphone" + i);
				pushManager.sendNotification(client, payLoad);
			}
			// 斷開鏈接
			pushManager.stopConnection();
			for (int i = 0; i < deviceTokens.size(); i++) {
				pushManager.removeDevice("iphone" + i);
			}
			log.info("iphone 推送消息成功");
			return "0000";
		} catch (Exception e) {
			log.error("(ESB-Exception)异常:iphone推送消息異常", e);
			return "9999";
		}
	}

Ps:最重要的就是一定要保證證書文件的正確性,此上方法即可適用單個推送,也可滿足群組推送

Published under (CC) BY-NC-SA