最近工程作完了,關於推送作個總結java
公司用的是umeng推送,關於umneg推送的介紹,請移步官方文檔。android
使用umeng推送步驟ios
1.添加jar包
json
公司使用的maven,因此將以下代碼添加到pom.xml文件中app
<dependency> <groupId>com.umeng.message</groupId> <artifactId>push</artifactId> <version>0.0.1</version> </dependency>
2.添加成功,以下圖maven
3.實現部分代碼以下測試
/** 程序名 SendPush.java 程序功 推送 做成者 xxx 做成日期 2015-11-25 ======================修改履歷====================== 項目名 狀態 做成者 做成日期 -------------------------------------------------- caren 新規 xxx 2015-11-25 ================================================= */ package com.cheqiren.caren.util; import net.sf.json.JSONObject; import com.cheqiren.caren.model.SendMsg; import push.android.AndroidBroadcast; import push.android.AndroidUnicast; import push.ios.IOSBroadcast; import push.ios.IOSUnicast; public class SendPush { private static final String iosAppKey = "56274627e0f55ad9f9002443"; private static final String iosAppMasterSecret = "lt63hy4kdmkshlxsr6mehyj1qnxftgbj"; private static final String androidAppKey = "5652a952e0f55a772c0003b3"; private static final String androidAppMasterSecret = "x3ae69jkhvi68mziobvcp2wtbr0cs97t"; /** * 方法名 androidBroadcast(SendMsg androidMsg) * 方法功能 android廣播 * @param androidMsg * @return */ public static boolean androidBroadcast(SendMsg androidMsg){ AndroidBroadcast broadcast = new AndroidBroadcast(); boolean result = false; broadcast.setAppMasterSecret(androidAppMasterSecret); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); try{ // 必填 應用惟一標識 broadcast.setPredefinedKeyValue("appkey", androidAppKey); // 必填 時間戳,10位或者13位都可,時間戳有效期爲10分鐘 broadcast.setPredefinedKeyValue("timestamp", timestamp); // 必填 消息發送類型 broadcast.setPredefinedKeyValue("type", "broadcast"); // 必填 消息類型 notification-通知,message-消息 broadcast.setPredefinedKeyValue("display_type", "notification"); // 必填 通知欄提示文字 broadcast.setPredefinedKeyValue("ticker", androidMsg.getTicker()); // 必填 通知標題 broadcast.setPredefinedKeyValue("title", androidMsg.getTitle()); // 必填 通知文字描述 broadcast.setPredefinedKeyValue("text", androidMsg.getSendMessage()); // 點擊"通知"的後續行爲 broadcast.setPredefinedKeyValue("after_open", "go_custom"); JSONObject jsonObject = JSONObject.fromObject(androidMsg); broadcast.setPredefinedKeyValue("custom", jsonObject.toString()); // 可選 發送消息描述,建議填寫。 broadcast.setPredefinedKeyValue("description", androidMsg.getDescription()); // 可選 正式/測試模式。測試模式下,廣播/組播只會將消息發給測試設備 broadcast.setPredefinedKeyValue("production_mode", "true"); result = broadcast.send(); }catch(Exception e){ e.printStackTrace(); } return result; } /** * 方法名 androidUnicast(SendPushInfo androidMsg,String deviceTokens) * 方法功能 android單播 * @param androidMsg * @param deviceTokens * @return */ public static boolean androidUnicast(SendMsg androidMsg,String deviceTokens){ AndroidUnicast unicast = new AndroidUnicast(); boolean result = false; unicast.setAppMasterSecret(androidAppMasterSecret); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); try{ // 必填 應用惟一標識 unicast.setPredefinedKeyValue("appkey", androidAppKey); // 必填 時間戳,10位或者13位都可,時間戳有效期爲10分鐘 unicast.setPredefinedKeyValue("timestamp", timestamp); // 必填 消息發送類型 unicast.setPredefinedKeyValue("type", "unicast"); // 必填 消息類型 notification-通知,message-消息 unicast.setPredefinedKeyValue("display_type", "notification"); // 必填 通知欄提示文字 unicast.setPredefinedKeyValue("ticker", androidMsg.getTicker()); // 必填 通知標題 unicast.setPredefinedKeyValue("title", androidMsg.getTitle()); // 必填 通知文字描述 unicast.setPredefinedKeyValue("text", androidMsg.getSendMessage()); //可選 設備惟一表示 unicast.setPredefinedKeyValue("device_tokens", deviceTokens); // 點擊"通知"的後續行爲 unicast.setPredefinedKeyValue("after_open", "go_custom"); JSONObject jsonObject = JSONObject.fromObject(androidMsg); unicast.setPredefinedKeyValue("custom", jsonObject.toString()); // 可選 發送消息描述,建議填寫。 unicast.setPredefinedKeyValue("description", androidMsg.getDescription()); // 可選 正式/測試模式。測試模式下,廣播/組播只會將消息發給測試設備 unicast.setPredefinedKeyValue("production_mode", "true"); result = unicast.send(); }catch(Exception e){ e.printStackTrace(); } return result; } /** * 方法名 androidListcast(SendMsg androidMsg,String deviceTokens) * 方法功能 android列播 * @param androidMsg * @param deviceTokens * @return */ public static boolean androidListcast(SendMsg androidMsg,String deviceTokens){ AndroidUnicast unicast = new AndroidUnicast(); boolean result = false; unicast.setAppMasterSecret(androidAppMasterSecret); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); try{ // 必填 應用惟一標識 unicast.setPredefinedKeyValue("appkey", androidAppKey); // 必填 時間戳,10位或者13位都可,時間戳有效期爲10分鐘 unicast.setPredefinedKeyValue("timestamp", timestamp); // 必填 消息發送類型 unicast.setPredefinedKeyValue("type", "listcast"); // 必填 消息類型 notification-通知,message-消息 unicast.setPredefinedKeyValue("display_type", "notification"); // 必填 通知欄提示文字 unicast.setPredefinedKeyValue("ticker", androidMsg.getTicker()); // 必填 通知標題 unicast.setPredefinedKeyValue("title", androidMsg.getTitle()); // 必填 通知文字描述 unicast.setPredefinedKeyValue("text", androidMsg.getSendMessage()); //可選 設備惟一表示 unicast.setPredefinedKeyValue("device_tokens", deviceTokens); // 點擊"通知"的後續行爲 unicast.setPredefinedKeyValue("after_open", "go_custom"); JSONObject jsonObject = JSONObject.fromObject(androidMsg); unicast.setPredefinedKeyValue("custom", jsonObject.toString()); // 可選 發送消息描述,建議填寫。 unicast.setPredefinedKeyValue("description", androidMsg.getDescription()); // 可選 正式/測試模式。測試模式下,廣播/組播只會將消息發給測試設備 unicast.setPredefinedKeyValue("production_mode", "true"); result = unicast.send(); }catch(Exception e){ e.printStackTrace(); } return result; } /** * 方法名 iosBroadcast(SendMsg iosMsg) * 方法功能 ios廣播 * @param iosMsg * @return */ public static boolean iosBroadcast(SendMsg iosMsg){ IOSBroadcast broadcast = new IOSBroadcast(); boolean result = false; broadcast.setAppMasterSecret(iosAppMasterSecret); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); try{ // 必填 應用惟一標識 broadcast.setPredefinedKeyValue("appkey", iosAppKey); // 必填 時間戳,10位或者13位都可,時間戳有效期爲10分鐘 broadcast.setPredefinedKeyValue("timestamp", timestamp); // 必填 消息發送類型 broadcast.setPredefinedKeyValue("type", "broadcast"); // 必填 broadcast.setPredefinedKeyValue("alert", iosMsg.getSendMessage()); broadcast.setPredefinedKeyValue("sound", "default"); // 可選 發送消息描述,建議填寫。 broadcast.setPredefinedKeyValue("description", iosMsg.getDescription()); // 可選 正式/測試模式。測試模式下,廣播/組播只會將消息發給測試設備 broadcast.setPredefinedKeyValue("production_mode", "true"); // 點擊"通知"的後續行爲 JSONObject jsonObject = JSONObject.fromObject(iosMsg); broadcast.setCustomizedField("custom", jsonObject.toString()); result = broadcast.send(); } catch(Exception e){ e.printStackTrace(); } return result; } /** * 方法名 iosUnicast(SendMsg iosMsg,String deviceTokens) * 方法功能 ios單播 * @param iosMsg * @param deviceTokens * @return */ public static boolean iosUnicast(SendMsg iosMsg,String deviceTokens){ IOSUnicast unicast = new IOSUnicast(); boolean result = false; unicast.setAppMasterSecret(iosAppMasterSecret); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); try{ // 必填 應用惟一標識 unicast.setPredefinedKeyValue("appkey", iosAppKey); // 必填 時間戳,10位或者13位都可,時間戳有效期爲10分鐘 unicast.setPredefinedKeyValue("timestamp", timestamp); // 必填 消息發送類型 unicast.setPredefinedKeyValue("type", "unicast"); // 必填 unicast.setPredefinedKeyValue("alert", iosMsg.getSendMessage()); unicast.setPredefinedKeyValue("sound", "default"); //可選 設備惟一表示 unicast.setPredefinedKeyValue("device_tokens", deviceTokens); // 可選 發送消息描述,建議填寫。 unicast.setPredefinedKeyValue("description", iosMsg.getDescription()); // 可選 正式/測試模式。測試模式下,廣播/組播只會將消息發給測試設備 unicast.setPredefinedKeyValue("production_mode", "true"); // 點擊"通知"的後續行爲 JSONObject jsonObject = JSONObject.fromObject(iosMsg); unicast.setCustomizedField("custom", jsonObject.toString()); result = unicast.send(); } catch(Exception e){ e.printStackTrace(); } return result; } /** * 方法名 iosGroupcast(SendMsg iosMsg,String deviceTokens) * 方法功能 ios組播 * @param iosMsg * @param deviceTokens * @return */ public static boolean iosListcast(SendMsg iosMsg,String deviceTokens){ IOSUnicast unicast = new IOSUnicast(); boolean result = false; unicast.setAppMasterSecret(iosAppMasterSecret); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); try{ // 必填 應用惟一標識 unicast.setPredefinedKeyValue("appkey", iosAppKey); // 必填 時間戳,10位或者13位都可,時間戳有效期爲10分鐘 unicast.setPredefinedKeyValue("timestamp", timestamp); // 必填 消息發送類型 unicast.setPredefinedKeyValue("type", "listcast"); // 必填 unicast.setPredefinedKeyValue("alert", iosMsg.getSendMessage()); unicast.setPredefinedKeyValue("sound", "default"); //可選 設備惟一表示 unicast.setPredefinedKeyValue("device_tokens", deviceTokens); // 可選 發送消息描述,建議填寫。 unicast.setPredefinedKeyValue("description", iosMsg.getDescription()); // 可選 正式/測試模式。測試模式下,廣播/組播只會將消息發給測試設備 unicast.setPredefinedKeyValue("production_mode", "true"); // 點擊"通知"的後續行爲 JSONObject jsonObject = JSONObject.fromObject(iosMsg); unicast.setCustomizedField("custom", jsonObject.toString()); result = unicast.send(); } catch(Exception e){ e.printStackTrace(); } return result; } }
4.調用部分代碼以下code
// 推送類型 單播 String deviceTokens = getDeviceTokens(receiveUserId); boolean sendFlagAndroid = SendPush.androidUnicast(record, deviceTokens); boolean sendFlagIOS = SendPush.iosUnicast(record, deviceTokens); if(!sendFlagAndroid && !sendFlagIOS){ // 發送失敗 resInt = 0; record.setSendResult(1); sendMsgMapper.updateByPrimaryKeySelective(record); }else{ // 發送成功 resInt = 1; record.setSendResult(0); sendMsgMapper.updateByPrimaryKeySelective(record); }