如何使用 java 编写 APNS 反馈服务?

Posted

技术标签:

【中文标题】如何使用 java 编写 APNS 反馈服务?【英文标题】:How to write APNS FeedBack Service using java? 【发布时间】:2014-09-11 05:10:03 【问题描述】:

我正在使用 Java 向 Apple 设备发送推送通知。为此,我正在使用 JavaPNS-2.1.1 库。我已成功将推送通知发送到苹果设备。但是当我调用 APNS 反馈服务时,它不会返回任何内容。 为了测试 APNS 反馈服务,我首先从设备中删除了该应用程序,然后向该设备发送了一些通知。在发送推送通知时,我每次发送推送通知时都会调用反馈服务。但每次它不返回任何东西。反馈服务的代码如下,

List<Device> devices = new Vector<Device>();
FeedbackServiceManager feedbackManager = new FeedbackServiceManager();
feedbackManager.setProxy(host,port);
AppleFeedbackServer server = new AppleFeedbackServerBasicImpl(keystore, password, false);
devices.addAll(feedbackManager.getDevices(server));
return devices;

谁能帮我解决我哪里弄错了?关于 *** 中的几个问题,我读到它仅在 SandBox 环境中工作,是真的吗?因为我也在沙盒上工作。 反馈服务提供的确切响应是什么?它会给我所有通知失败吗?或者只有它没有向其发送通知的设备令牌?假设我只向一台设备发送了 3 个通知,那么它会给我所有 3 个故障实例或该设备的设备令牌以及上次故障的时间戳吗? 我应该何时致电反馈服务?意味着当 APNS 无法传递推送通知时我调用它的确切时间?

【问题讨论】:

【参考方案1】:

我对沙盒反馈服务的体验是,它仅在您的设备上有两个不同的启用沙盒推送的应用时才有效。当您卸载其中一个时,您会在反馈服务中看到一些内容,说明该令牌不再有效。这是几年前我测试的时候,所以我不知道它是否仍然适用。

【讨论】:

好的。它没有为我返回任何东西。在设备上有多个支持推送通知的应用程序,但我只有一个设备令牌要测试。我需要多个设备来测试这个东西吗?它还会返回所有失败的通知,并带有设备的时间戳,还是仅返回带有时间戳的设备令牌以表示上次失败的尝试? 我错过了您回答中非常重要的一点,应该有两个“启用沙盒推送的应用程序”。我有多个实时应用程序。我也将我的 jar 从 2.1.1 更改为 2.2,现在它工作正常。唯一需要担心的是它在第二天返回的 deviceTokens。 我现在在同一天获得设备令牌..!!如果有人使用 JavaPNS 遇到这个问题,我建议请使用 2.2 库和文档进行编码。当您在沙盒中测试它时,请确保您在卸载原始应用时手机上应该有另一个启用沙盒推送的应用。

以上是关于如何使用 java 编写 APNS 反馈服务?的主要内容,如果未能解决你的问题,请参考以下文章

Apple 推送通知服务 (APNS):反馈服务响应缺少字节?

PHP如何解压Apple APNS反馈数据

APNS 奇怪的反馈

查询 APNs 反馈服务器的 PHP 技术

通知 APNS 反馈服务有关停用通知的设备?

应用程序删除和 APNS