2012-10-31 271 views
6

我正在用Java App引擎和JDO为iOS应用程序开发服务器端,我刚刚意识到GAE不支持Apple推送通知服务,而且我非常沮丧。Google App Engine APNS

我已经看到很多像Urban Airship,xtify等解决方案;但如果我的用户数量很多,它太贵了。

此外,我一直在调查Javapns和类似者,但GAE不支持BouncyCastle。

我想知道是否有免费或低成本的解决方案来支持我的GAE服务器中的APNS,因为我无法每月支付200美元。 如果我的问题没有解决方案,是否有可能只为使用javapns进行Apple推送通知而构建另一台服务器,并且我的GAE会与它进行交谈?

回答

0

有一个线程讨论这个here,你可以注册套接字beta here

我不知道这是否会让你做你想做的事,但后面的线程的人似乎认为它会。

+0

谢谢,但它仍处于测试阶段,我需要很短的时间。我已经注册了,但我没有任何希望。 –

+0

如果您拥有大量用户,那么GAE提供的免费配额不可能在任何情况下都足够。是的,当然,您可以构建另一个GAE会谈的服务器。 –

+0

当然,但我不想只为Apple的通知构建一台服务器。我正在寻找一种方法来制作GAE中的APNS,但我不知道Urban Airship对于少量用户是免费的,还是我的服务器会通过太多通知获得大量用户(我正在建立聊天,所以如果我写了一条消息,通知必须发送给其他人)。不管怎么说,还是要谢谢你。 –

0

由于您需要聊天,试图从客户端本身发布内部推送通知(当您的服务器提供您的朋友的推送令牌时)。它可以很好地适合你的聊天建议。

1

AppEngine现在支持套接字,因此您现在应该可以稍微修改一下javapns。我已经成功地获得了PyAPN在AppEngine(python)上的工作,它使用1.7.7中的新Socket函数。

如果你有兴趣看到我的python AppEngine项目,它做APNS,让我知道,我会编辑我的答案与它的链接。每次我在这里发布链接时,主持人都会因为某种原因删除我的答案

3

我使用第三方库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);