| | |
| | | @Component |
| | | public class IOSPushUtil { |
| | | |
| | | private static IOSPushUtil iosPushUtil; |
| | | private static IOSPushUtil iosPushUtil; |
| | | |
| | | @Autowired |
| | | private BusinessSystemService businessSystemService; |
| | | @Autowired |
| | | private BusinessSystemService businessSystemService; |
| | | |
| | | @PostConstruct |
| | | public void init() { |
| | | iosPushUtil = this; |
| | | iosPushUtil.businessSystemService = this.businessSystemService; |
| | | } |
| | | @PostConstruct |
| | | public void init() { |
| | | iosPushUtil = this; |
| | | iosPushUtil.businessSystemService = this.businessSystemService; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * 方法说明: IOS 多推 |
| | | * |
| | | * @author mawurui createTime 2018年5月8日 上午10:19:57 |
| | | * @param deviceToken |
| | | * @param packages |
| | | * @param alert |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String allPushIOS(List<String> deviceTokenList, MessageInfo info, String url, int type) |
| | | throws Exception { |
| | | /** |
| | | * 方法说明: IOS 多推 |
| | | * |
| | | * @return |
| | | * @throws Exception |
| | | * @author mawurui createTime 2018年5月8日 上午10:19:57 |
| | | */ |
| | | public static String allPushIOS(List<String> deviceTokenList, MessageInfo info, String url, int type, String pwd) |
| | | throws Exception { |
| | | |
| | | // if (Constant.IS_TEST) |
| | | // return null; |
| | | // if (Constant.IS_TEST) |
| | | // return null; |
| | | |
| | | Gson gson = new Gson(); |
| | | PushLogHelper.iosInfo("IOS推送设备数为:" + deviceTokenList.size()); |
| | | PushLogHelper.iosInfo("IOS推送的内容为:" + gson.toJson(info)); |
| | | List<String> tokenList = new ArrayList<String>(); |
| | | for (String deviceToken : deviceTokenList) { |
| | | tokenList.add(deviceToken); |
| | | } |
| | | // json自定义传值 |
| | | Gson gson = new Gson(); |
| | | PushLogHelper.iosInfo("IOS推送设备数为:" + deviceTokenList.size()); |
| | | PushLogHelper.iosInfo("IOS推送的内容为:" + gson.toJson(info)); |
| | | List<String> tokenList = new ArrayList<String>(); |
| | | for (String deviceToken : deviceTokenList) { |
| | | tokenList.add(deviceToken); |
| | | } |
| | | // json自定义传值 |
| | | |
| | | JSONObject json = null; |
| | | if (type == PushTypeEnum.goodsdetail.getCode()) { |
| | | Long auctionId = null; |
| | | if (url.contains("id=")) { |
| | | String[] sts = url.split("\\?")[1].split("&"); |
| | | for (String st : sts) { |
| | | if (st.contains("id=")) { |
| | | auctionId = Long.parseLong(st.replace("id=", "").trim()); |
| | | } |
| | | } |
| | | } |
| | | if (auctionId == null) |
| | | throw new Exception("淘宝商品ID提取出错"); |
| | | json = IOSPushFactory.createGoodsPush(auctionId, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.url.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createURLPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.ZNX.getCode()) { |
| | | json = IOSPushFactory.createZNXPush(info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.weex.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createWEEXPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.baichuan.getCode()) { |
| | | String shortUrl = url; |
| | | // HttpUtil.getShortLink(url); |
| | | // if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | // throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createBaiChuanPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.welfare.getCode()) { |
| | | json = IOSPushFactory.createWelfarePush(info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.signin.getCode()) { |
| | | json = IOSPushFactory.createUserSignInPush(info.getTitle(), info.getContent()); |
| | | } |
| | | JSONObject json = null; |
| | | if (type == PushTypeEnum.goodsdetail.getCode()) { |
| | | String auctionId = null; |
| | | if (url.contains("id=")) { |
| | | String[] sts = url.split("\\?")[1].split("&"); |
| | | for (String st : sts) { |
| | | if (st.contains("id=")) { |
| | | auctionId = (st.replace("id=", "").trim()); |
| | | } |
| | | } |
| | | } |
| | | if (auctionId == null) |
| | | throw new Exception("淘宝商品ID提取出错"); |
| | | json = IOSPushFactory.createGoodsPush(auctionId, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.url.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createURLPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.ZNX.getCode()) { |
| | | json = IOSPushFactory.createZNXPush(info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.weex.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createWEEXPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.baichuan.getCode()) { |
| | | String shortUrl = url; |
| | | // HttpUtil.getShortLink(url); |
| | | // if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | // throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createBaiChuanPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.welfare.getCode()) { |
| | | json = IOSPushFactory.createWelfarePush(info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.signin.getCode()) { |
| | | json = IOSPushFactory.createUserSignInPush(info.getTitle(), info.getContent()); |
| | | } |
| | | |
| | | // 分组推送 每50个设备为一组 |
| | | // 分组推送 每50个设备为一组 |
| | | |
| | | InputStream certificate = IOSPushUtil.class.getClassLoader() |
| | | .getResourceAsStream("certificate/pushCertificate.p12"); // 读取.p12文件 |
| | | String certificatePassword = Constant.systemCommonConfig.getIosPushCertificatePwd(); |
| | | if (tokenList != null && tokenList.size() > 0) { |
| | | int pageSize = 50; |
| | | int page = tokenList.size() % pageSize == 0 ? tokenList.size() / pageSize : tokenList.size() / pageSize + 1; |
| | | for (int i = 0; i < page; i++) { |
| | | int start = i * pageSize; |
| | | int end = start + pageSize; |
| | | if (end > tokenList.size()) |
| | | end = tokenList.size(); |
| | | pushIOS(tokenList.subList(start, end), json, certificate, certificatePassword); |
| | | } |
| | | InputStream certificate = IOSPushUtil.class.getClassLoader() |
| | | .getResourceAsStream("certificate/pushCertificate.p12"); // 读取.p12文件 |
| | | String certificatePassword = pwd; |
| | | if (tokenList != null && tokenList.size() > 0) { |
| | | int pageSize = 50; |
| | | int page = tokenList.size() % pageSize == 0 ? tokenList.size() / pageSize : tokenList.size() / pageSize + 1; |
| | | for (int i = 0; i < page; i++) { |
| | | int start = i * pageSize; |
| | | int end = start + pageSize; |
| | | if (end > tokenList.size()) |
| | | end = tokenList.size(); |
| | | pushIOS(tokenList.subList(start, end), json, certificate, certificatePassword); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static String pushIOS(List<String> deviceTokenList, JSONObject json, InputStream certificate, |
| | | String certificatePWD) throws Exception { |
| | | List<String> tokenList = new ArrayList<String>(); |
| | | for (String deviceToken : deviceTokenList) { |
| | | tokenList.add(deviceToken); |
| | | } |
| | | while (json.toString().getBytes().length > 256) { |
| | | // 首先削减内容,然后削减标题 |
| | | String title = json.optJSONObject("aps").optJSONObject("alert").optString("title"); |
| | | String body = json.optJSONObject("aps").optJSONObject("alert").optString("body"); |
| | | if (StringUtil.isNullOrEmpty(body) || body.length() < 4) { |
| | | // 削减标题 |
| | | if (!StringUtil.isNullOrEmpty(title) && body.length() > 6) { |
| | | json.optJSONObject("aps").optJSONObject("alert").put("title", |
| | | title.substring(0, title.length() - 1)); |
| | | continue; |
| | | } |
| | | } else { |
| | | json.optJSONObject("aps").optJSONObject("alert").put("body", body.substring(0, body.length() - 1)); |
| | | continue; |
| | | } |
| | | } |
| | | public static String pushIOS(List<String> deviceTokenList, JSONObject json, InputStream certificate, |
| | | String certificatePWD) throws Exception { |
| | | List<String> tokenList = new ArrayList<String>(); |
| | | for (String deviceToken : deviceTokenList) { |
| | | tokenList.add(deviceToken); |
| | | } |
| | | while (json.toString().getBytes().length > 256) { |
| | | // 首先削减内容,然后削减标题 |
| | | String title = json.optJSONObject("aps").optJSONObject("alert").optString("title"); |
| | | String body = json.optJSONObject("aps").optJSONObject("alert").optString("body"); |
| | | if (StringUtil.isNullOrEmpty(body) || body.length() < 4) { |
| | | // 削减标题 |
| | | if (!StringUtil.isNullOrEmpty(title) && body.length() > 6) { |
| | | json.optJSONObject("aps").optJSONObject("alert").put("title", |
| | | title.substring(0, title.length() - 1)); |
| | | continue; |
| | | } |
| | | } else { |
| | | json.optJSONObject("aps").optJSONObject("alert").put("body", body.substring(0, body.length() - 1)); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | LogHelper.test("IOS推送的字节数" + json.toString().getBytes().length); |
| | | PushNotificationPayload payLoad = new PushNotificationPayload(); |
| | | payLoad = PushNotificationPayload.fromJSON(json.toString()); |
| | | LogHelper.test("IOS推送的字节数" + json.toString().getBytes().length); |
| | | PushNotificationPayload payLoad = new PushNotificationPayload(); |
| | | payLoad = PushNotificationPayload.fromJSON(json.toString()); |
| | | |
| | | PushNotificationManager pushManager = new PushNotificationManager(); |
| | | // true:表示的是产品线上发布推送服务 false:表示的是产品测试推送服务 |
| | | if (Constant.IS_TEST) |
| | | pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificate, certificatePWD, false)); |
| | | else |
| | | pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificate, certificatePWD, true)); |
| | | PushNotificationManager pushManager = new PushNotificationManager(); |
| | | // true:表示的是产品线上发布推送服务 false:表示的是产品测试推送服务 |
| | | if (Constant.IS_TEST) |
| | | pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificate, certificatePWD, false)); |
| | | else |
| | | pushManager.initializeConnection(new AppleNotificationServerBasicImpl(certificate, certificatePWD, true)); |
| | | |
| | | List<Device> deviceList = new ArrayList<Device>(); |
| | | for (String token : tokenList) { |
| | | if (!StringUtil.isNullOrEmpty(token)) |
| | | deviceList.add(new BasicDevice(token)); |
| | | } |
| | | // 开始推送 |
| | | List<PushedNotification> notificationList = pushManager.sendNotifications(payLoad, deviceList); |
| | | Gson gson = new Gson(); |
| | | if (notificationList != null) |
| | | for (PushedNotification notification : notificationList) { |
| | | PushLogHelper.iosInfo(gson.toJson(notification)); |
| | | } |
| | | pushManager.stopConnection(); |
| | | return null; |
| | | } |
| | | List<Device> deviceList = new ArrayList<Device>(); |
| | | for (String token : tokenList) { |
| | | if (!StringUtil.isNullOrEmpty(token)) |
| | | deviceList.add(new BasicDevice(token)); |
| | | } |
| | | // 开始推送 |
| | | List<PushedNotification> notificationList = pushManager.sendNotifications(payLoad, deviceList); |
| | | Gson gson = new Gson(); |
| | | if (notificationList != null) |
| | | for (PushedNotification notification : notificationList) { |
| | | PushLogHelper.iosInfo(gson.toJson(notification)); |
| | | } |
| | | pushManager.stopConnection(); |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @author mawurui createTime 2018年5月8日 下午12:12:19 |
| | | * @param info |
| | | * @param json |
| | | * @param pushRecord |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static int allFanLiQuanDevice(System b_IOS, List<String> deviceTokenList, String PACKAGES, String title, |
| | | String content, String url, PushRecord pushRecord, int type) throws Exception { |
| | | /** |
| | | * @param pushRecord |
| | | * @return |
| | | * @throws Exception |
| | | * @author mawurui createTime 2018年5月8日 下午12:12:19 |
| | | */ |
| | | public static int allFanLiQuanDevice(System b_IOS, List<String> deviceTokenList, String PACKAGES, String title, |
| | | String content, String url, PushRecord pushRecord, int type,String pwd) throws Exception { |
| | | |
| | | return pushApp(deviceTokenList, PACKAGES, title, content, b_IOS, url, pushRecord, type); |
| | | } |
| | | return pushApp(deviceTokenList, PACKAGES, title, content, b_IOS, url, pushRecord, type,pwd); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param info |
| | | * @param params |
| | | * @param pushRecord |
| | | * @return 1:都成功 2:仅android 成功 3.仅IOS成功 4.都失败 |
| | | * @throws Exception |
| | | */ |
| | | private static int pushApp(List<String> deviceTokenList, String PACKAGES, String title, String content, |
| | | System b_IOS, String url, PushRecord pushRecord, int type) throws Exception { |
| | | MessageInfo info = new MessageInfo(); |
| | | info.setTitle(title); |
| | | info.setContent(content); |
| | | String IOS = allPushIOS(deviceTokenList, info, url, type); |
| | | LogHelper.userInfo("IOS的推送日志:" + IOS); |
| | | pushRecord.setIosPushId(IOS); |
| | | if (IOS != null) { |
| | | return 1; |
| | | } else { |
| | | return 4; |
| | | } |
| | | } |
| | | /** |
| | | * @param pushRecord |
| | | * @return 1:都成功 2:仅android 成功 3.仅IOS成功 4.都失败 |
| | | * @throws Exception |
| | | */ |
| | | private static int pushApp(List<String> deviceTokenList, String PACKAGES, String title, String content, |
| | | System b_IOS, String url, PushRecord pushRecord, int type, String pwd) throws Exception { |
| | | MessageInfo info = new MessageInfo(); |
| | | info.setTitle(title); |
| | | info.setContent(content); |
| | | String IOS = allPushIOS(deviceTokenList, info, url, type, pwd); |
| | | LogHelper.userInfo("IOS的推送日志:" + IOS); |
| | | pushRecord.setIosPushId(IOS); |
| | | if (IOS != null) { |
| | | return 1; |
| | | } else { |
| | | return 4; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 执行推送 |
| | | * |
| | | * @param tokenList |
| | | * @param json |
| | | * @throws Exception |
| | | */ |
| | | public static void executePushIOS(List<String> tokenList, JSONObject json) throws Exception { |
| | | InputStream certificate = IOSPushUtil.class.getClassLoader() |
| | | .getResourceAsStream("certificate/pushCertificate.p12"); // 读取.p12文件 |
| | | String certificatePassword = Constant.systemCommonConfig.getIosPushCertificatePwd(); |
| | | pushIOS(tokenList, json, certificate, certificatePassword); |
| | | } |
| | | /** |
| | | * 执行推送 |
| | | * |
| | | * @param tokenList |
| | | * @param json |
| | | * @throws Exception |
| | | */ |
| | | public static void executePushIOS(List<String> tokenList, JSONObject json, String pwd) throws Exception { |
| | | InputStream certificate = IOSPushUtil.class.getClassLoader() |
| | | .getResourceAsStream("certificate/push_certification_2025216.p12"); // 读取.p12文件 |
| | | String certificatePassword = pwd; |
| | | pushIOS(tokenList, json, certificate, certificatePassword); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * 方法说明: IOS 多推 |
| | | * |
| | | * @author mawurui createTime 2018年5月8日 上午10:19:57 |
| | | * @param deviceToken |
| | | * @param packages |
| | | * @param alert |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static JSONObject getJSONObject(MessageInfo info, String url, int type) throws Exception { |
| | | /** |
| | | * 方法说明: IOS 多推 |
| | | * |
| | | * @return |
| | | * @throws Exception |
| | | * @author mawurui createTime 2018年5月8日 上午10:19:57 |
| | | */ |
| | | public static JSONObject getJSONObject(MessageInfo info, String url, int type) throws Exception { |
| | | |
| | | // json自定义传值 |
| | | JSONObject json = null; |
| | | if (type == PushTypeEnum.goodsdetail.getCode()) { |
| | | Long auctionId = null; |
| | | if (url.contains("id=")) { |
| | | String[] sts = url.split("\\?")[1].split("&"); |
| | | for (String st : sts) { |
| | | if (st.contains("id=")) { |
| | | auctionId = Long.parseLong(st.replace("id=", "").trim()); |
| | | } |
| | | } |
| | | } |
| | | if (auctionId == null) |
| | | throw new Exception("淘宝商品ID提取出错"); |
| | | json = IOSPushFactory.createGoodsPush(auctionId, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.url.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createURLPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.ZNX.getCode()) { |
| | | json = IOSPushFactory.createZNXPush(info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.weex.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | shortUrl = url; |
| | | json = IOSPushFactory.createWEEXPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.baichuan.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | shortUrl = url; |
| | | json = IOSPushFactory.createBaiChuanPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.signin.getCode()) { |
| | | json = IOSPushFactory.createUserSignInPush(info.getTitle(), info.getContent()); |
| | | } |
| | | // json自定义传值 |
| | | JSONObject json = null; |
| | | if (type == PushTypeEnum.goodsdetail.getCode()) { |
| | | String auctionId = null; |
| | | if (url.contains("id=")) { |
| | | String[] sts = url.split("\\?")[1].split("&"); |
| | | for (String st : sts) { |
| | | if (st.contains("id=")) { |
| | | auctionId = (st.replace("id=", "").trim()); |
| | | } |
| | | } |
| | | } |
| | | if (auctionId == null) |
| | | throw new Exception("淘宝商品ID提取出错"); |
| | | json = IOSPushFactory.createGoodsPush(auctionId, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.url.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | throw new Exception("获取短链出错"); |
| | | json = IOSPushFactory.createURLPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.ZNX.getCode()) { |
| | | json = IOSPushFactory.createZNXPush(info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.weex.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | shortUrl = url; |
| | | json = IOSPushFactory.createWEEXPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.baichuan.getCode()) { |
| | | String shortUrl = HttpUtil.getShortLink(url); |
| | | if (StringUtil.isNullOrEmpty(shortUrl)) |
| | | shortUrl = url; |
| | | json = IOSPushFactory.createBaiChuanPush(shortUrl, info.getTitle(), info.getContent()); |
| | | } else if (type == PushTypeEnum.signin.getCode()) { |
| | | json = IOSPushFactory.createUserSignInPush(info.getTitle(), info.getContent()); |
| | | } |
| | | |
| | | return json; |
| | | } |
| | | return json; |
| | | } |
| | | } |