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

Posted

技术标签:

【中文标题】Apple 推送通知服务 (APNS):反馈服务响应缺少字节?【英文标题】:Apple Push Notifications Service ( APNS ): Feedback Service Response has missing byte? 【发布时间】:2011-12-15 14:15:07 【问题描述】:

我正在用 Ruby 编写一个推送通知系统。使用增强界面发送通知工作正常,从反馈服务消费根本不起作用。

我自己编写了从套接字读取的代码,如下所示:

      context      = OpenSSL::SSL::SSLContext.new
      context.cert = OpenSSL::X509::Certificate.new(File.read(pem_path))
      context.key  = OpenSSL::PKey::RSA.new(File.read(rsa_path))
      @socket = TCPSocket.new(host, port)
      @ssl    = OpenSSL::SSL::SSLSocket.new(@socket, context)
      @ssl.connect
      @socket.gets #read(38) has the same effect FWIW

但是 APNS 反馈服务只返回 37 个字节而不是预期的 38 个字节,并且正如预期的那样,包是一团糟。

我可以使用 Ruby APNS gem 复制错误(并为他们打开了一张票 here)。

我已将我从 APNS 反馈服务收到的所有内容保存到一个文件中,这是我在尝试检查字节时得到的结果:

ruby-1.9.2-p290 :035 > while b = f.readbyte
ruby-1.9.2-p290 :036?>   puts b
ruby-1.9.2-p290 :037?>   end
21
3
1
0
32
23
35
236
232
217
53
172
143
54
130
39
157
247
205
233
231
245
140
111
104
199
214
159
60
107
169
175
42
172
57
31
160

如你所见,数组减一,应该是这样的:

任何人有类似的问题或可以看到我做错了什么?

谢谢

编辑 @ 19/2011:

这似乎是 Ruby 套接字的问题。使用java-apns lib,以下 Clojure 核心返回相同应用程序、证书等的预期结果。

(def tokens (. (.. (APNS/newService) 
                   (withCert "/Users/pcalcado/blah.p12" "blah") 
                   withProductionDestination 
                   build) 
               getInactiveDevices))

我看不到任何特别的being done by java-apns 或者我在 Ruby 中可能做错了什么。我不介意在这个系统上使用 Clojure,但现在我已经拥有了除了反馈之外的所有内容,并且已经在 Ruby on MRI 上编写和运行了 =/

【问题讨论】:

【参考方案1】:

我问自己......我们是否有可能必须从@ssl 而不是@socket 读取? 抱歉,我对 Ruby 编程有点不理解 :)

编辑: 我向您确认问题是您需要从 SSL 套接字读取 看看这个提交:https://github.com/muccy/APNS/commit/4d62a3f33c4b31f7f81a0020aa70871232f46781

【讨论】:

正确。当我第一次看到您的评论时,我改为从 SSL 阅读,但没有时间在圣诞节前将其实际输出,现在尝试并且它有效。谢谢,伙计。【参考方案2】:

看看 Josh Priddle 的 APND gem。我成功地使用了它,并相信它的核心功能,包括从 Apple 检索反馈,可以正常工作。如果没有别的,这是另一个代码示例——在 Ruby 中——供你检查。

【讨论】:

以上是关于Apple 推送通知服务 (APNS):反馈服务响应缺少字节?的主要内容,如果未能解决你的问题,请参考以下文章

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

Apple 反馈服务和推送通知错误

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

使用 PHP 的 Apple 推送通知反馈服务 - 套接字错误

使用 Apple 的推送通知服务 (APNS) 避免重复

APNS Apple 推送通知服务未收到来自 Apple 的成功消息