首先进入友盟官网去建立添加一个应用,以获取应用对应的Appkey和Umeng Message Secret。java
而后进入开发者中心下载集成示例:android
解压后,能够看到demo文件,以android广播推送为例,咱们须要:api
应用的appkey和appMasterSecret,DeviceToken 设备标识,Ticker 通知栏提示文字,Title 标题以及点击后显示的文字Text。app
public void sendAndroidBroadcast() throws Exception { AndroidBroadcast broadcast = new AndroidBroadcast(appkey,appMasterSecret); broadcast.setTicker( "Android broadcast ticker"); broadcast.setTitle( "中文的title"); broadcast.setText( "Android broadcast text"); broadcast.goAppAfterOpen(); broadcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION); // TODO Set 'production_mode' to 'false' if it's a test device. // For how to register a test device, please see the developer doc. broadcast.setProductionMode(); client.send(broadcast); }
自定义接收类UmengResultpost
@Getter @Setter public class UmengResult { private String ret; private JSONObject data; }
demo中,sendAndroidBroadcast()测试
public void sendAndroidBroadcast() throws Exception { AndroidBroadcast broadcast = new AndroidBroadcast(appkey,appMasterSecret); broadcast.setTicker( "Android broadcast ticker"); broadcast.setTitle( "中文的title"); broadcast.setText( "Android broadcast text"); broadcast.goAppAfterOpen();//默认点击消息拉活app broadcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION); broadcast.setProductionMode();//生产模式,一开始改为测试避免手滑哦 //能够使用setCustomField()给客户端推送附加数据 JSONObject extraData = new JSONObject(); extraData.put("img","imgUrl"); extraData.put("source",new source()); broadcast.setCustomField(extraData); //设置推送的有效期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.add(Calendar.MINUTE, 1); broadcast.setStartTime(sdf.format(c1.getTime())); // 友盟推送的有效期延迟一天 c2.add(Calendar.DAY_OF_MONTH, 1); broadcast.setExpireTime(sdf.format(c2.getTime())); String result = client.send(broadcast); //获取推送消息的任务id UmengResult umengResult = JSON.parseObject(status.toString(), UmengResult.class); String taskid = umengResult.getData().get("task_id").toString(); }
查阅api文档,能够看到获取任务状态的api为 '/api/status',须要如下参数url
{ "appkey":"xx", // 必填, 应用惟一标识 "timestamp":"xx", // 必填, 时间戳,10位或者13位都可,时间戳有效期为10分钟 "task_id":"xx" // 必填, 消息发送时, 从返回消息中获取的task_id }
打开pushClient.java,自定义咱们获取状态的方法,代码以下:spa
protected static final String statusPath = "/api/status"; public String getPushStatus(String appkey,String task_id,String appMasterSecret) throws Exception { JSONObject getStatus = new JSONObject(); getStatus.put("appkey", appkey); String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000)); getStatus.put("timestamp", timestamp); getStatus.put("task_id",task_id); String url = host + statusPath; String postBody = getStatus.toString(); String sign = DigestUtils.md5Hex(("POST" + url + postBody + appMasterSecret).getBytes(StandardCharsets.UTF_8)); url = url + "?sign=" + sign; HttpPost post = new HttpPost(url); post.setHeader("User-Agent", USER_AGENT); StringEntity se = new StringEntity(postBody, "UTF-8"); post.setEntity(se); // Send the post request and get the response HttpResponse response = client.execute(post); System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); } return result.toString(); }
示例接口code
@RequestMapping(value = "/getStatus") public CommonResult GetStatus(@RequestBody MessageInfo model) throws Exception { PushClient pushClient = new PushClient(); String s = pushClient.getPushStatus(model.getAppId(), model.getUmengTaskId(), model.getSecret()); UmengResult umengResult = JSON.parseObject(s, UmengResult.class); //推送接收统计数目 model.setSendCount((Integer) umengResult.getData().get("sent_count")); //推送打开统计数目 model.setOpenCount((Integer) umengResult.getData().get("open_count")); //推送被忽略统计数目 model.setDismissCount((Integer) umengResult.getData().get("dismiss_count")); messageInfoService.update(model); return processSuccess("更新成功"); }
至此,U-Push的推送和获取后续状态的实例就完成了,单播,组播均可以用相似写法。orm