サードパーティのライブラリnotnoop/java-apnsを使用しています。使いやすいです。唯一の問題は、以下の Java 例外のようなGAE のスレッド制限です。
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
この問題は、maven centralのバージョン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);