我使用第 3 方库notnoop/java-apns。它很容易使用。您可能遇到的唯一问题是GAE 上的线程限制,如下面的 java 异常:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
该问题在 Maven 中心的1.0.0.Beta3版本中得到解决。此拉取请求#162中解释了详细解决方案。
因此,准备并向 APNs 发送推送通知的示例代码片段如下所示,解决线程限制的关键是以下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);