一、 服务端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