我正在为使用Google App Engine和JDO in Java的iOS应用开发服务器端,我刚刚意识到GAE不支持Apple推送通知服务,我非常沮丧。
我看到过像Urban Airship,xtify等解决方案;但是如果我有足够数量的用户,那就太贵了。
此外,我一直在调查Javapns和类似物,但GAE也不支持BouncyCastle。
我想知道在我的GAE服务器中是否有支持APNS的免费或低成本解决方案,因为我不能每月支付200美元。 如果没有我的问题的解决方案,是否可以构建另一个服务器只用于使用javapns进行Apple推送通知,并且我的GAE会与它进行对话?
答案 0 :(得分:3)
我使用第三方库notnoop/java-apns。它很容易使用。您可以遇到的唯一问题是 GAE上的线程限制,如下面的java异常:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
该问题已在maven中心版本1.0.0.Beta3中解决。详细解决方案在此拉取请求#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);
答案 1 :(得分:1)
AppEngine现在支持套接字,因此您现在应该可以使用稍微修改过的javapns版本。我已经成功地让PyAPNs在AppEngine(python)上运行,它使用1.7.7中的新Socket功能。
如果您有兴趣看到我的python AppEngine项目进行APNS,请告诉我,我将使用链接编辑我的答案。每次我在这里发布链接时,主持人都会因某种原因删除我的答案
答案 2 :(得分:0)
答案 3 :(得分:0)
由于您需要进行聊天,因此尝试在客户端内部发布推送通知(同时您的服务器提供朋友的推送令牌)。它可以很好地适合你的聊天建议。
答案 4 :(得分:0)
Appengine现在支持1.7.7中的套接字,因此您可以使用APNS。 java运行时可以使用java-apns lib进行微小修改。 Here is a blogpost on the modifications needed
答案 5 :(得分:0)
答案 6 :(得分:0)
Google正式支持iOs推送通知。您可以查看以下示例代码:ios-push-notification-sample-backend-java和Google的帖子:Google app engine takes pain out of sending ios push notifications
答案 7 :(得分:0)
您可以查看java-apns-gae
。
这是专为在Google App Engine上工作(和使用)而设计的open-source Java APNS library。