2012-05-02 39 views
6

używam tego kodu Ruby otrzymywać błędy z APN na nieudanych pchnięć:Podłączenie do prod APN z rozwojem cert

if IO.select([ssl], nil, nil, 5) 
    read_buffer = ssl.read(6) 
    process_error_response(read_buffer) 
end 

zauważyłem dziwną sytuację, w której IO.select nie jest zerowa, ale read_buffer zwraca pusta struna. Po pewnym debugowaniu zdałem sobie sprawę, że dzieje się tak, gdy łączysz się z gateway.push.apple.com certyfikatem APN rozwoju i to samo dzieje się, jeśli łączysz się z gateway.sandbox.push.apple.com z certyfikatem produkcyjnym.

Czy istnieje sposób, aby programowo wykryć, że tak jest, np. jeśli otrzymałeś certyfikat wypychania od użytkownika i powiedziałeś, że jest to produkcja/programowanie, ale nie możesz zweryfikować tego faktu w witrynie dla programistów Apple? Myślałbym, że połączenie zostanie odrzucone, ale zamiast tego wydaje się być stworzone, ale w stanie częściowo złamanym.

Odpowiedz

0

Cóż, nie jest to sposób sprawdzenia, czy certyfikat jest ważny dla APNS, ale można go sprawdzić, jeśli chce się wykryć, czy jest to wersja rozwojowa czy produkcyjna. W rozwoju będzie napis "Developer", podczas gdy produkcja będzie miała ciąg "Production".

0

Jednym ze sposobów jest otwarcie certyfikatu i sprawdź przedmiot, przykład:

require 'openssl' 
def production?(cert_path) 
    certificate = ::OpenSSL::X509::Certificate.new(File.read(cert_path)) 
    !certificate.subject.to_s.include?('Development') 
end 

przypadku certyfikatów produkcyjnych przedmiotem wygląda następująco:

"Apple Production IOS Push Services: com.mybundle.app..." 

przypadku certyfikatów rozwoju wygląda następująco:

"Apple Development IOS Push Services: com.mybundle.app..." 
Powiązane problemy