通过APNS批量发送自定义消息到设备

时间:2011-11-29 04:00:43

标签: java ios apple-push-notifications

我正在使用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服务器是否支持这种推送?

提前致谢!

最佳, Ĵ

1 个答案:

答案 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);
            }
        }