Я пишу систему push-уведомлений в 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 (и открыл для них билет здесь ).
Я сохранил все, что получил от службы обратной связи 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))
Я не вижу ничего особенного , которое делает java-apns или что я могу делать неправильно в Ruby. Я не возражаю против использования Clojure для этой системы, но теперь у меня есть все, но Feedback уже написана и работает в Ruby на MRI = /