【问题标题】:How to use Javapns to Support Apple's Enhanced Notification Format如何使用 Javapns 支持 Apple 的增强通知格式
【发布时间】:2016-03-22 20:06:43
【问题描述】:

您好,

我正在创建一个基于 Java 的服务器来为 Apple 的 iOS APNs 服务创建推送通知。我在谷歌代码上发现了 Javapns,它似乎提供了一个简单的基本框架来与 APNs 通信,并且似乎被广泛使用。

http://code.google.com/p/javapns/

但是,阅读 Apple 的文档,通知有一种“增强格式”,它支持“过期”,即设置一个时间(嗯,以秒为单位),如果通知尚未发送,则通知过期。我看不到任何使用 Javapns 设置它的方法,如果您没有明确设置它,我不确定 APNs 服务如何处理通知到期。所以,

  1. 有谁知道如何支持 APNs 的增强通知格式,具体如何设置过期时间?
  2. 有谁知道如果没有明确设置,Apple 如何处理通知到期?
  3. 有没有人有任何建议不需要我从头开始,因为服务器目前可以正常运行?

提前致谢。

安德鲁

【问题讨论】:

    标签: java ios apple-push-notifications


    【解决方案1】:

    我最近对 ​​JavaPNS 项目做出了重大贡献,这导致了几天前 JavaPNS 2.0 的发布。该版本完全支持增强的通知格式,包括设置您自己的到期时间。

    西尔万

    【讨论】:

      【解决方案2】:

      很高兴您找到了 java 库……可惜您没有阅读那里的文档。

      我将在下面发布一些亮点:


      现有代码使用不会返回错误的“简单通知格式”。

      请参阅以下文档: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html

      我已尝试更新到应该返回错误的“增强型通知格式”,但我无法从 APNS 返回任何错误。 (也在上面的链接中)

      使用增强格式,发送数据后连接不会立即断开,但我的 socket.getInputSocket.read() 调用没有返回任何内容。

      在我有更多时间进行故障排除之前,必须提交此问题。

      (其他人评论) 非常感谢您调查它。 我得到了和你一样的结果。也许它与Apple Gateway有关。


      所以...你可以: 1)建立自己的 2) 帮助改进现有库 3) 尝试另一个库,例如:https://github.com/notnoop/java-apns 4) 什么都不做

      【讨论】:

      • Javapns 文档中的什么地方提到了增强格式?我当然没有看到。您提供链接的文档是 Apple 的,而不是 Javapns。有一个错误请求支持它,但是当我提交这个问题时,它还没有被接受或启动。显然,我知道他们目前不支持它,否则我不会发布这个问题。那条蛇又是怎么回事?
      • 不再阅读,我决定尝试使用 Java-APNS。有效,会过期,而且作者比javapns更有帮助。至少根据我的经验。
      【解决方案3】:

      增强的 ios 推送here。 要发送通知,您可以分三个步骤进行:

      设置连接

      ApnsService service =
          APNS.newService()
          .withCert("/path/to/certificate.p12", "MyCertPassword")
          .withSandboxDestination()
          .build();
      

      创建并发送消息

      String payload = APNS.newPayload().alertBody("Can't be simpler than this!").build();
      String token = "fedfbcfb....";
      service.push(token, payload);
      

      查询非活动设备的反馈服务:

      Map<String, Date> inactiveDevices = service.getInactiveDevices();
      for (String deviceToken : inactiveDevices.keySet()) {
          Date inactiveAsOf = inactiveDevices.get(deviceToken);
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        相关资源
        最近更新 更多