本人開發的開發者技術變現資源聚集地,大家支持下,下面是網址
https://www.baiydu.com
一、 服務端DEMO下載及運行。
登錄友盟后,瀏覽器直接輸入下面這個URL,直接進入文檔開發和DEMO下載頁面:http://dev.umeng.com/push/ios/integration(下面截圖)
1、下載DEMO
2、執行上面步驟后將下載下來的JAVA DEMO導入到Ecplise中,運行
這里我使用的是java控制台方式來運行DEMO案例,上面的截圖右鍵點擊Demo.java運行,默認是執行android的單個手機推送方法,這里我們可以修改,
因為我測試的是IOS的推送,所以這里在main方法里將運行方法,修改成IOS的單個手機推送方法。下面截圖
下面是修改上面調用方法中的部分參數截圖
這樣修改之后,官方的DEMO你就可以直接 右鍵 DEMO.JAVA運行了。
返回結果:
記得友盟創建的對應APP的IP一定要修改成服務器的IP,否則會返回IP錯誤。
二、將推送功能集成到Servlet中
集成這個DEMO我是遇到了多處問題,首先一個自己封裝的HTTP請求方法執行就返回500錯誤,至於是為什么,昨天本想問他們客戶,但是由於周末沒上班,所以就沒管它了,之后使用了官方DEMO中集成的HTTP請求包之后這個問題解決了。
1、將官方的HTTP請求包增加到Servlet應用中.下面截圖
將上面圈中的.jar Copy到項目對應的Apatch-Tomcat 路徑下的lib文件夾內,
接着將下面這幾個類引入到對應的Servlet頁面中。
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
下面是執行代碼:
//友盟推送 JSONObject UmentPushIosPrameter=new JSONObject(); try { //對應APP key UmentPushIosPrameter.put("appkey", "568f2ccbe0f55a3e050017?"); //下面是將時間轉換為時間格式字符串 這里時間戳必須使用10位 UmentPushIosPrameter.put("timestamp", System.currentTimeMillis()/ 1000); //推送類型:單個設備 UmentPushIosPrameter.put("type", "unicast"); //測試設備TOKEN UmentPushIosPrameter.put("device_tokens", "4aecb635c2a43da05eeca57d7e97665df6d7c26f6bd00f6dcfd5c70477b0dd30"); UmentPushIosPrameter.put("production_mode", "false"); //production_mode JSONObject payloadFirstPrameter=new JSONObject(); //自定義鍵值對 payloadFirstPrameter.put("name", "阿薩德發射點發"); JSONObject apsFirstPrameter=new JSONObject(); //推送內容 String postContent= "阿萊克斯的法律框架"; apsFirstPrameter.put("alert", postContent); apsFirstPrameter.put("badge", "1"); apsFirstPrameter.put("sound", "default"); payloadFirstPrameter.put("aps", apsFirstPrameter); //增加到根節點 UmentPushIosPrameter.put("payload",payloadFirstPrameter); //增加到根節點 String GetEncryptStr="POST"+"http://msg.umeng.com/api/send"+UmentPushIosPrameter.toString() +"pa4nfw4hz3mprilryuo2yjdwjlipkv?";//對應的App Master Secret //加密 String Ok1 = DigestUtils.md5Hex(GetEncryptStr); String unicastParameter= UmentPushIosPrameter.toString(); StringEntity se = new StringEntity(unicastParameter.toString(), "UTF-8"); String url = "http://msg.umeng.com/api/send" + "?sign=" + Ok1; HttpPost post = new HttpPost(url); post.setHeader("User-Agent", USER_AGENT); post.setEntity(se); // Send the post request and get the response HttpResponse response1 = client.execute(post); int status = response1.getStatusLine().getStatusCode(); System.out.println("Response Code : " + status); BufferedReader rd = new BufferedReader(new InputStreamReader(response1.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); } System.out.println(result.toString()); if (status == 200) { System.out.println("Notification sent successfully."); } else { System.out.println("Failed to send the notification!"); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); }
當然推送方式還有很多種,包括Android的,這些直接去官方文檔看,增加對應參數就可以了。
這里我要說一個我遇到的問題, 拼接MD5加密字符串時遇到的,官方的DEMO是將 App Master Secret:這個拼接參數 .getBytes("utf8")轉成Byte類型了的,但是這里我使用相同的方法后,返回一個加密token錯誤,之后我不將這個參數轉換成Byte類型,就通過了。
String GetEncryptStr="POST"+"http://msg.umeng.com/api/send"+UmentPushIosPrameter.toString() +"pa4nfw4hz3mprilryuo2yjdwjlipkv?";//對應的App Master Secret
本人創業做的一款androidApp, 下載量已經有2000多萬,各種當前熱門的網絡手機獎勵紅包全部集成,另外還有熱門電影和淘寶高額優惠券!很適合各類型的用戶。