我正在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
正如您所看到的,数组是一个一个,应该是这样的:
任何人都有类似的问题,或者可以看到我做错了什么?
由于
EDIT @ 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上编写并运行了Ruby = /
答案 0 :(得分:2)
我问自己......我们是否有可能从@ssl而不是@socket中读取? 对不起,我对Ruby编程有点n00b:)
修改强>: 我确认你的问题是你需要从SSL套接字读取 看看这个提交:https://github.com/muccy/APNS/commit/4d62a3f33c4b31f7f81a0020aa70871232f46781
答案 1 :(得分:0)
看看Josh Priddle的APND gem。我成功地使用了它,并且相信它的核心功能,包括从Apple检索反馈,可以正常工作。如果没有别的,这是另一个代码示例 - 在Ruby中 - 供你检查。