JAVA个推----将信息推送至手机端

个推功能简介:

将信息推送至手机端,手机端人员可以看到收到的信息。 个推功能需要借助第三方平台的接口(需要申请账号),单独开发很难完成,这里就是用到了第三方接口。

完成个推需要完成三步:
  1. 获取token,调用个推接口需要获取用于验证的token
  2. 获取taskId(任务ID)
  3. 通过获取的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() {
        //获取token
        String 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.推送消息

    @Test
    void test1() {
        //获取token
        String token = getToken();
        //获取taskId
        String 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过期时间

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值