For MPS receipt configuration, see Configure Receipt Address.
Common methods
All vendor callback handlers in this document share the following utility methods:
extractRequestBody: reads the raw request body as a stringextractParameterFromRequest: parses form-encoded parameters into a mapoutData: writes a JSON response-
createResult: builds a standardized result objectprivate String extractRequestBody(HttpServletRequest request,String channel) { StringBuilder builder = new StringBuilder(); BufferedReader reader = null; try { reader = request.getReader(); char[] charBuffer = new char[128]; int bytesRead; while ((bytesRead = reader.read(charBuffer)) != -1) { builder.append(charBuffer, 0, bytesRead); } } catch (IOException e) { LoggerUtil.error(LOGGER, e, "["+channel+"]extractParameterFromRequest error!"); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { LoggerUtil.error(LOGGER, e, "["+channel+"]extractParameterFromRequest close reader error!"); } } } return builder.toString(); } public static Map<String, String> extractParameterFromRequest(HttpServletRequest request) { Map<String, String> paramsMap = new HashMap<String, String>(); Map<String, String[]> parameterMap = request.getParameterMap(); Iterator var3 = parameterMap.entrySet().iterator(); while(var3.hasNext()) { Map.Entry<String, String[]> paramEntry = (Map.Entry)var3.next(); String[] value = (String[])paramEntry.getValue(); if (value.length > 0) { paramsMap.put(paramEntry.getKey(), value[0]); } } return paramsMap; } public static void outData(HttpServletResponse httpServletResponse, String resJsonString) { PrintWriter writer = null; try { httpServletResponse.setContentType("application/json"); httpServletResponse.setCharacterEncoding("utf-8"); writer = httpServletResponse.getWriter(); writer.print(resJsonString); writer.flush(); } catch (Exception e) { LoggerUtil.error(LOGGER, e, "outData error"); } finally { if (writer != null) { writer.close(); } } } private Result createResult(PushResultEnum resultEnum) { Result bindResult = new Result(); bindResult.setReturnCode(resultEnum.getCode()); bindResult.setReturnReason(resultEnum.getReason()); return bindResult; }
HUAWEI
Reference: HUAWEI Documentation Center
The callback reads the request body and returns a JSON object with code and message fields to acknowledge receipt.
@ResponseBody
@RequestMapping(value = "/hms", produces = "application/json")
public JSONObject hmsCallback(HttpServletRequest httpServletRequest) {
String requestBody = extractRequestBody(httpServletRequest,"hms");
LoggerUtil.info(LOGGER,"hmsCallback content: {}", requestBody);
......
JSONObject data = new JSONObject();
data.put("code", "0");
data.put("message", "success");
return data;
}
Input parameter sample
{
"statuses": [{
"clientId": "103961659",
"biTag": "0#5#1.1#console_1730792931023&b89351344a8e1f3b",
"requestId": "173079293285270303027401",
"appid": "103961659",
"status": 0,
"timestamp": 1730792933696,
"token": "IQAAAACy0f7tAABvr6XzidO61rECNx-l-eog1VNUSyZcIo-lPc9ehqnEfIyuIsxxx"
}]
}
HONOR
Reference: HONOR Documentation Center
The callback reads the request body and returns a JSON object with code and message fields to acknowledge receipt.
@ResponseBody
@RequestMapping(value = "/honor", produces = "application/json")
public JSONObject honorCallback(HttpServletRequest httpServletRequest) {
String requestBody = extractRequestBody(httpServletRequest,"honor");
LoggerUtil.info(LOGGER,"honorCallback content: {}", requestBody);
......
JSONObject data = new JSONObject();
data.put("code", "0");
data.put("message", "success");
return data;
}
Input parameter sample
{
"statuses": [{
"appid": "104420205",
"biTag": "0#9#1.1#console_1730794397675&61db03efcf7fc862",
"requestId": "104420205-4fe376129032981e38b60cf15ea77154",
"status": 40000002,
"timestamp": 1730794400089,
"token": "BAEAAAAAB.jlTbS5YDOdhYQKfqri56O6iN7CbY5xxx"
}]
}
HarmonyOS
Reference: HarmonyOS Documentation Center
The callback reads the request body and returns a JSON object with code and message fields to acknowledge receipt.
@ResponseBody
@RequestMapping(value = "/harmonyos", produces = "application/json")
public JSONObject harmonyosCallback(HttpServletRequest httpServletRequest) {
String requestBody = extractRequestBody(httpServletRequest,"harmonyos");
LoggerUtil.info(LOGGER,"harmonyosCallback content: {}", requestBody);
......
JSONObject data = new JSONObject();
data.put("code", "0");
data.put("message", "success");
return data;
}
Input parameter sample
{
"statuses": [{
"biTag": "0#11#null#console_1730776169529&6e8afeebfc8a45a0",
"requestId": "173077617124367218031101",
"appPackageName": "com.alipay.demo",
"deliveryStatus": {
"result": 5,
"timestamp": 1730776171647
},
"pushType": 0,
"token": "MAMzLgIkEUIGTtUAstOIywAAAGQAAAAAAAHmQeccAFJF5u8WsIrXbQOuxxxxxx"
}]
}
Xiaomi
Reference: Xiaomi Surge OS Developer Platform
The callback accepts form-encoded data, extracts parameters into a map, and writes a success response using outData.
@RequestMapping(value = "/miui", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public void miuiCallback(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, String> parameterMap = extractParameterFromRequest(httpServletRequest);
LoggerUtil.info(LOGGER, "miuiCallback content: {}", parameterMap);
......
outData(httpServletResponse, PushResultEnum.SUCCESS.getReason());
}
Input parameter sample
{
"data": {
"smm67747730775367865gS": {
"param": "0#4#1.1#console_1730775366036&671135c53a89dde2",
"barStatus": "Enable",
"type": 1,
"targets": "oUU0LhUv9qgw2HEtgtWmxEqX9ldkWesBHQxxx",
"timestamp": 1730775368258
}
}
}
OPPO
Reference: OPPO Open Platform - OPPO Developer Service Center
The callback reads the request body and returns a Result object built from PushResultEnum.SUCCESS.
@ResponseBody
@RequestMapping(value = "/oppo", produces = "application/json")
public Result oppoCallback(HttpServletRequest httpServletRequest) {
String requestBody = extractRequestBody(httpServletRequest,"oppo");
LoggerUtil.info(LOGGER,"oppoCallback content: {}", requestBody);
......
return createResult(PushResultEnum.SUCCESS);
}
Input parameter sample
[{
"appId": "30186722",
"eventTime": "1730776852465",
"eventType": "push_arrive",
"messageId": "30186722-1-1-67298eb8f8686b014e6d1a83",
"param": "0#7#1.1#console_1730776758644&282216e3998ff0d0",
"registrationIds": "OPPO_CN_5e33c42e910xxx"
}]
vivo
Reference: vivo Open Platform
The callback reads the request body and returns a Result object built from PushResultEnum.SUCCESS.
@ResponseBody
@RequestMapping(value = "/vivo", produces = "application/json")
public Result vivoCallback(HttpServletRequest httpServletRequest) {
String requestBody = extractRequestBody(httpServletRequest,"vivo");
LoggerUtil.info(LOGGER,"vivoCallback content: {}", requestBody);
......
return createResult(PushResultEnum.SUCCESS);
}
Input parameter sample
{
"1303318675076815015": {
"param": "0#8#1.1#console_1730776984809&8903e8823304c0bf",
"targets": "v2-CRi5wSCKrfIr7yWs_BKTpim6RbPAnEMVah6xxx",
"ackTime": 1730776986789,
"ackType": "0"
}
}