我正在使用notnoop APNS Java库发送APNS通知。由于我们拥有大量用户,因此我们需要批量发送APNS通知。根据notnoop API,以下方法似乎是最佳选择:
push(Collection<String> deviceTokens, String payload)
http://notnoop.github.com/java-apns/apidocs/com/notnoop/apns/ApnsService.html
此方法批量发送单个消息到多个设备。我们希望为每个设备发送不同的特定消息,但仍然批量发送所有通知。我没有在notnoop库中找到任何适当的方法来执行此操作。有没有人有这方面的经验?用notnoop库可以做到这一点吗? Apple APNS服务器是否支持这种推送?
提前致谢!
最佳, Ĵ
答案 0 :(得分:5)
您必须单独遍历您的设备,并为每个设备构建单独的有效负载。在此示例中,我们将不同的徽章计数传递给每个用户:
将ApnsService声明为线程池,以便快速推送
ApnsService service = null;
service = APNS.newService()
.withCert(certificatePath, certificatePassword)
.withProductionDestination()
.asPool(threadCount)
.build();
service.start();
在设备迭代之外构建有效负载基础
PayloadBuilder payloadBuilder = APNS.newPayload();
payloadBuilder = payloadBuilder
.alertBody("yourMessage")
.sound("default"));
遍历您的设备并添加自定义消息或参数
for (ApnsDevice apnsDevice : apnsDeviceList) {
try {
PayloadBuilder perDevicePayloadBuilder = payloadBuilder.copy()
.badge(apnsDevice.getBadgeCount()+1);
// check if the message is too long (it won't be sent if it is)
//and trim it if it is.
if (perDevicePayloadBuilder.isTooLong()) {
logger.warn("Payload is too long, shrinking it");
perDevicePayloadBuilder = perDevicePayloadBuilder.shrinkBody();
}
String token = apnsDevice.getDeviceToken();
service.push(token, perDevicePayloadBuilder.build());
} catch (Exception ex) {
logger.error("Error while pushing apns alerts", ex);
}
}