首先文档链接:开发者中心
上代码:
列播:package com.cqjd.message.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.cqjd.message.constant.AppPushFilterKeyConstant;
import com.cqjd.message.enums.MessageActionEnum;
import com.cqjd.message.pojo.po.StaffUserDeviceTokenPO;
import com.cqjd.message.pojo.query.AppPayload;
import com.cqjd.message.pojo.query.AppPushBody;
import com.cqjd.message.pojo.query.AppPushFilterQuery;
import com.cqjd.message.pojo.query.AppPushQuery;
import com.cqjd.message.service.IAppPushService;
import com.cqjd.message.service.IStaffUserDeviceTokenService;
import com.cqjd.message.test.Test;
import com.cqjd.mq.dto.MessageDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.batik.gvt.CompositeGraphicsNode;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@Slf4j
public class IAppPushServiceImpl implements IAppPushService {
@Resource
private IStaffUserDeviceTokenService staffUserDeviceTokenService;
@Value("${appPush.appKey}")
private String appKey;
@Value("${appPush.masterKey}")
private String masterKey;
@Value("${appPush.url}")
private String appPushUrl;
public static final String PUSH_TYPE_LIST = "listcast";
public static final String PUSH_TYPE_GROUP = "groupcast";
public void sendList(String deviceTokens, String title, String content){
AppPushBody body = new AppPushBody();
body.setText(title);
body.setTitle(content);
AppPayload payload = new AppPayload();
payload.setBody(body);
AppPushQuery query = new AppPushQuery();
query.setAppKey(appKey);
query.setType(PUSH_TYPE_LIST);
query.setPayload(payload);
String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
query.setTimestamp(timestamp);
query.setDeviceTokens(deviceTokens);
String postBody = JSONObject.toJSonString(query, SerializerFeature.WriteMapNullValue);
send(postBody);
}
public void send(String postBody) {
String sign = null;
sign = DigestUtils.md5Hex(("POST" + appPushUrl + postBody + masterKey).getBytes(StandardCharsets.UTF_8));
String url = appPushUrl + "?sign=" + sign;
log.info("start url:{} body:{}", url, postBody);
String result = HttpRequest.post(url)
.header(Header.CONTENT_TYPE, "application/json")
.body(postBody)
.execute().body();
log.info("result:{}", result);
}
@Override
public void sendMessage(Long userId, String title, String content) {
StaffUserDeviceTokenPO po = staffUserDeviceTokenService.selectById(userId);
if(ObjectUtil.isNull(po)){
log.info("用户userId:{}未绑定设备token,推送失败", userId);
}
sendList(po.getDeviceToken(), title, content);
}
}
组播:
@Override
public void sendMessageByProject(Long projectId, String title, String content) {
List
一些相关的类
@Data
public class AppPushBody {
@JSonField(name = "title")
private String title;
@JSonField(name = "text")
private String text;
@JSonField(name = "after_open")
private String afterOpen = "go_activity";
@JSonField(name = "activity")
private String activity = "com.hzx.azq_my.ui.activity.msg.MsgCenterActivity";
}
@Data
public class AppPayload {
@JSonField(name = "display_type")
private String displayType = "notification";
@JSonField(name = "body")
private AppPushBody body;
}
@Data
public class AppPushQuery {
@JSonField(name = "appKey")
private String appKey;
@JSonField(name = "timestamp")
private String timestamp;
@JSonField(name = "type")
private String type;
@JSonField(name = "device_tokens")
private String deviceTokens;
@JSonField(name = "payload")
private AppPayload payload;
@JSonField(name = "mipush")
private String miPush = "true";
@JSonField(name = "mi_activity")
private String miActivity = "com.hzx.azq_my.ui.activity.msg.MsgCenterActivity";
@JSonField(name = "filter")
private AppPushFilterQuery filter;
}
@Data
public class AppPushFilterQuery {
@JSonField(name = "and")
private List



