6

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

我见过很多解决方案,例如 Urban Airship、xtify 等;但是如果我达到拥有大量用户的目的,那就太贵了。

此外,我一直在研究 Javapns 和类似的东西,但 GAE 也不支持 BouncyCastle。

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

4

8 回答 8

3

我使用第 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);
于 2014-07-23T02:17:05.260 回答
1

AppEngine 现在支持 Sockets,因此您现在应该可以使用稍作修改的 javapns 版本。我已经成功让 PyAPNs 在 AppEngine (python) 上工作,它使用 1.7.7 中的新 Socket 功能。

如果您有兴趣查看我的执行 APNS 的 python AppEngine 项目,请告诉我,我将编辑我的答案并附上指向它的链接。每次我在这里发布链接时,版主都会出于某种原因删除我的答案

于 2013-04-18T15:19:54.760 回答
0

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

于 2012-12-27T08:19:52.533 回答
0

确实是一个非常好的消息.... 官方支持现在在 beta 中不再可用

http://googlecloudplatform.blogspot.in/2013/07/google-app-engine-takes-pain-out-of-sending-ios-push-notifications.html

于 2013-07-03T19:53:57.657 回答
0

你可以签出java-apns-gae

它是一个开源 Java APNS 库,专为在 Google App Engine 上工作(和使用)而设计。

于 2014-08-27T10:25:04.907 回答
0

There is a thread discussing this here, and you can sign up for the sockets beta here.

I've no idea if that will let you do what you want to do, but the people on the latter thread seem to think it will.

于 2012-10-31T11:40:42.503 回答
0

Google 正式支持 iOS 推送通知。你可以看看这个示例代码:ios-push-notification-sample-backend-java和谷歌的帖子:谷歌应用引擎让发送 ios 推送通知很痛苦

于 2013-08-07T06:30:37.303 回答
0

Appengine 现在在 1.7.7 中支持套接字,因此您可以使用 APNS。java 运行时可以使用 java-apns 库,只需稍作修改。 这是一篇关于所需修改的博文

于 2013-04-28T19:19:52.333 回答