JAVA个推----将信息推送至手机端
个推功能简介:
将信息推送至手机端,手机端人员可以看到收到的信息。 个推功能需要借助第三方平台的接口(需要申请账号),单独开发很难完成,这里就是用到了第三方接口。
完成个推需要完成三步:
- 获取token,调用个推接口需要获取用于验证的token
- 获取taskId(任务ID)
- 通过获取的token与taskId发送信息至手机端
代码中用到的接口地址与相关参数可以配置在yml文件中:

测试类的代码如下:
@Value("${getui.token-url}")private String tokenUrl;@Value("${getui.taskid-url}")private String taskIdUrl;@Value("${getui.push-cids-url}")private String pushCidsUrl;@Value("${getui.appkey}")private String appkey;@Value("${getui.masterSecret}")private String masterSecret;
1.获取token
private String getToken() {//获取token鉴权String timestamp = String.valueOf(new Date().getTime());String sign = CommonUtil.getSha256(appkey + timestamp + masterSecret);String token = redisTemplate.opsForValue().get(redisKeyPrefix + StaticConstant.PHONETOKEN + "PHONE_TOKEN");if (StrUtil.isEmpty(token)) {Map<String, Object> map = new HashMap<>();map.put("sign", sign);map.put("timestamp", timestamp);map.put("appkey", appkey);Map<String, Object> resultMap = restTemplate.postForObject(tokenUrl, map, Map.class);Map<String, String> dataMap = (Map<String, String>) resultMap.get("data");token = dataMap.get("token");redisTemplate.opsForValue().set(redisKeyPrefix + StaticConstant.PHONETOKEN + "PHONE_TOKEN",token, Long.parseLong(tokenTimeOut), TimeUnit.MILLISECONDS.MILLISECONDS);}return token;
}
2.获取taskId
private String getTaskId() {//获取tokenString token = getToken();Map<String, String> push_messageMap = new HashMap<>();push_messageMap.put("transmission", "个推程序测试,收到请在QQ回复OK!");Map<String, Object> params = new HashMap<>();params.put("push_message", push_messageMap);HttpHeaders headers = new HttpHeaders();headers.set("token", token);HttpEntity httpEntity = new HttpEntity(params, headers);Map<String, Object> resultMap = restTemplate.postForObject(taskIdUrl, httpEntity, Map.class);Map<String, String> dataMap = (Map<String, String>) resultMap.get("data");String taskid = dataMap.get("taskid");return taskid;}
3.推送消息
@Testvoid test1() {//获取tokenString token = getToken();//获取taskIdString taskId = getTaskId();Map<String, Object> audienceMap = new HashMap<>();String[] array = new String[]{"47c61f1eb4c49afc8a7d74307e86416f"};audienceMap.put("cid", array);Map<String, Object> params = new HashMap<>();params.put("audience", audienceMap);params.put("taskid", taskId);
// params.put("is_async",true);是否异步推送,true是异步,false同步。异步推送不会返回data详情HttpHeaders headers = new HttpHeaders();headers.set("token", token);HttpEntity httpEntity = new HttpEntity(params, headers);Map<String, Object> resultMap = restTemplate.postForObject(pushCidsUrl, httpEntity, Map.class);String code = resultMap.get("code").toString();log.info(code);}
注:本功能中应业务要求使用到了redis,用于保留设置token过期时间
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
