package com.ks.push.controller;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ks.push.dto.mq.InvalidDeviceTokenInfo;
|
import com.ks.push.manager.BPushPlatformAppInfoManager;
|
import com.ks.push.manager.rabbitmq.RabbitmqManager;
|
import com.ks.push.pojo.DO.PushPlatform;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.wx.WXUtil;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
|
/**
|
* @author Administrator
|
* @title: PushCallbackController
|
* @description: 各大手机推送平台的消息回执
|
* @date 2021/9/15 12:17
|
*/
|
@Controller
|
@RequestMapping("callback")
|
public class PushCallbackController {
|
Logger logger = LoggerFactory.getLogger(PushCallbackController.class);
|
|
@Resource
|
private BPushPlatformAppInfoManager bPushPlatformAppInfoManager;
|
|
@Resource
|
private RabbitmqManager rabbitmqManager;
|
|
|
//回调接口详情:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/msg-receipt-guide-0000001050040176#ZH-CN_TOPIC_0000001087208860__p121151147184318
|
@ResponseBody
|
@RequestMapping("hw")
|
public String hw(HttpServletRequest request) {
|
String content = WXUtil.getContent(request);
|
if (StringUtil.isNullOrEmpty(content)) {
|
return "";
|
}
|
JSONObject json = JSONObject.parseObject(content);
|
JSONArray statuses = json.getJSONArray("statuses");
|
for (int i = 0; i < statuses.size(); i++) {
|
JSONObject statuse = statuses.getJSONObject(i);
|
String appId = statuse.getString("appid");
|
String bigTag = statuse.getString("biTag");
|
String token = statuse.getString("token");
|
String appCode = bPushPlatformAppInfoManager.selectAppCode(appId, PushPlatform.hw);
|
//0-成功
|
//2-应用未安装
|
//5-指定的Token在当前Android终端用户下不存在
|
//6-通知栏消息不展示
|
//10-非活跃设备消息,设备为非活跃设备(终端设备未接入网络达30天),消息不进行下发。
|
//15-离线用户消息覆盖
|
//27-在终端设备上目标应用进程不存在导致透传消息被缓存
|
//102-消息频控丢弃
|
//144-profileId不存在
|
//201-消息发送管控
|
int status = statuse.getInteger("status");
|
if (status == 0) {
|
logger.debug("华为消息回执-推送成功:bigTag-{} token-{}", bigTag, token);
|
} else {
|
logger.debug("华为消息回执-推送失败:bigTag-{} token-{} status-{}", bigTag, token, status);
|
if (status == 2 || status == 5 || status == 10) {
|
//删除无效设备
|
rabbitmqManager.addInvalidDevieToken(new InvalidDeviceTokenInfo(appCode, PushPlatform.hw, token));
|
}
|
}
|
}
|
|
|
JSONObject data = new JSONObject();
|
data.put("code", 0);
|
data.put("message", "success");
|
return data.toJSONString();
|
}
|
|
|
//回执消息的格式:https://dev.mi.com/console/doc/detail?pId=1278#_3_6
|
@ResponseBody
|
@RequestMapping("xm")
|
public String xm(HttpServletRequest request) {
|
String content = WXUtil.getContent(request);
|
logger.debug("小米消息回执-{}", content);
|
JSONObject json = JSONObject.parseObject(content);
|
|
for (String msgId : json.keySet()) {
|
JSONObject data = json.getJSONObject(msgId);
|
String appId = data.getString("param");
|
String appCode = bPushPlatformAppInfoManager.selectAppCode(appId, PushPlatform.xm);
|
int type = data.getInteger("type");
|
switch (type) {
|
//送达
|
case 1:
|
break;
|
//点击
|
case 2:
|
break;
|
//无法找到目标设备
|
case 16:
|
String regIdStr = data.getString("targets");
|
String[] regIds = regIdStr.split(",");
|
for (String rid : regIds) {
|
//删除无效设备
|
rabbitmqManager.addInvalidDevieToken(new InvalidDeviceTokenInfo(appCode, PushPlatform.xm, rid));
|
}
|
break;
|
}
|
}
|
|
|
JSONObject data = new JSONObject();
|
data.put("code", 0);
|
data.put("message", "success");
|
return "";
|
}
|
|
|
@ResponseBody
|
@RequestMapping("oppo")
|
public String oppo(HttpServletRequest request) {
|
String content = WXUtil.getContent(request);
|
logger.debug("oppo消息回执-{}", content);
|
JSONObject data = new JSONObject();
|
data.put("code", 0);
|
data.put("message", "success");
|
return "";
|
}
|
|
}
|