我使用第三方库notnoop/java-apns。它很容易使用。你能遇到的唯一问题是在GAE像下面的Java异常的线程限制:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
的问题解决在版本1.0.0.Beta3在Maven中央。详细解决方案在此拉动请求#162中进行了解释。
因此,示例代码片段准备和发送推送通知的APN就像下面,解决了线程的限制,关键是方法withErrorDetectionThreadFactory
如下
// Prepare ApnsService
ClassPathResource certificate = new ClassPathResource("aps_production.p12");
ApnsService service = null;
try {
service = APNS.newService()
.withErrorDetectionThreadFactory(ThreadManager.currentRequestThreadFactory()) // use GAE currentRequestThreadFactory
.withCert(certificate.getInputStream(), certificatePassword)
.withProductionDestination()
.build();
} catch (InvalidSSLConfig | IOException e) {
logger.warn("Fail to initialize APNs service");
}
// Send notification
String apnsPayload = APNS.newPayload()
.alertBody("test alert")
.badge(1)
.sound("default")
.customField("type", "general")
.build();
service.push(<your device id>, apnsPayload);
谢谢,但它仍处于测试阶段,我需要很短的时间。我已经注册了,但我没有任何希望。 –
如果您拥有大量用户,那么GAE提供的免费配额不可能在任何情况下都足够。是的,当然,您可以构建另一个GAE会谈的服务器。 –
当然,但我不想只为Apple的通知构建一台服务器。我正在寻找一种方法来制作GAE中的APNS,但我不知道Urban Airship对于少量用户是免费的,还是我的服务器会通过太多通知获得大量用户(我正在建立聊天,所以如果我写了一条消息,通知必须发送给其他人)。不管怎么说,还是要谢谢你。 –