report API 获取出来的JSON和文档说的完全不一样!
为了确保每一条消息都必须送达,用的是JPUSH report API:
2017-05-09 13:58:07,593 INFO JPush:112 - response::[{"msg_id":5338055840}]
2017-05-09 13:58:07,968 INFO JPush:112 - response::[{"msg_id":6546821212}]
2017-05-09 13:58:08,315 INFO JPush:112 - response::[{"msg_id":5338132435}]
2017-05-09 13:58:08,655 INFO JPush:112 - response::[{"msg_id":6144684059}]
2017-05-09 13:58:08,976 INFO JPush:112 - response::[{"msg_id":5338055842}]
2017-05-09 13:58:09,317 INFO JPush:112 - response::[{"msg_id":7258439934}]
2017-05-09 13:58:09,643 INFO JPush:112 - response::[{"android_received":null,"ios_msg_received":null,"ios_apns_sent":null,"wp_mpns_sent":null,"msg_id":7887418864}]
2017-05-09 13:58:10,012 INFO JPush:112 - response::[{"msg_id":7887403644}]
2017-05-09 13:58:10,363 INFO JPush:112 - response::[{"msg_id":5338057628}]
返回的不是:
[{"android_received":null,"ios_msg_received":null,"ios_apns_sent":null,"wp_mpns_sent":null,"msg_id":7887418864}]
而是这种:
[{"msg_id":7258439934}]
为了确保每一条消息到达,采用了如下的逻辑:
while (retry > 0) {
PushResult result = this.jpushClient.sendPush(builder.build());
HttpResponse response = HttpRequest.get("https://report.jpush.cn/v3/received?msg_ids=" + result.msg_id)
.header("Authorization", Base64.encodeToString(this.appKey + ":" + this.masterSecret)).send();
String body = response.bodyText();
logger.info("response::" + body);
try {
JsonNode node = mapper.readTree(body).get(0);
if (node.get(0).get("ios_apns_sent") != null && node.has("ios_apns_sent")) {
String text = node.get(0).get("ios_apns_sent").asText();
if (!StringUtils.isEmpty(text) && text.trim().equals("1")) {
retry = 0;
return;
}
} else if (node.get("msg_id") != null) {
retry = 0;
return;
}
} catch (Exception e) {
e.printStackTrace();
}
retry--;
}
}
结果返回的是如上面所示。