java - 苹果推送通知服务(APNS): Feedback Service Response has missing byte?

标签 java ruby sockets apple-push-notifications push-notification

我正在用 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

如您所见,数组相差一,应该如下所示: APNS Feedback Format

有人遇到过类似的问题或者可以看到我做错了什么吗?

谢谢

编辑@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,但现在除了反馈之外,我已经拥有了所有内容,并且已经在 MRI 上用 Ruby 编写并运行了 =/

最佳答案

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

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

关于java - 苹果推送通知服务(APNS): Feedback Service Response has missing byte?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521453/

相关文章:

javascript - 从 Firefox 插件打开 TCP 套接字

java - Android - 密码转换(将 * 转换为文本)

java - 通过可分割的槽 Activity 获取特定领域

ruby-on-rails - 使用 authlogic 更改密码 - 验证未捕获空白输入

Ruby 正则表达式不匹配

Linux:操作系统对非特权进程间总线的支持

python - 如何在Python中从另一个线程下拉出套接字?

java - Android 内存不足错误?

Java 访问修饰符关键字(私有(private)、默认、 protected 、公共(public)或最终、静态等..)在 Eclipse 中自动隐藏,但在源文件中显示

ruby - 如何用 block 实例化对象?