2012-05-02 11 views
6

estoy usando el código Ruby a recibir errores de APN sobre empuja sin éxito:conexión a prod APN con el desarrollo cert

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

me di cuenta de una situación extraña donde IO.select no es nula, pero devuelve un read_buffer cuerda vacía. Después de algunas depuraciones, me di cuenta de que esto sucede si te conectas a gateway.push.apple.com con un certificado APNs de desarrollo, y lo mismo ocurre al parecer si te conectas a gateway.sandbox.push.apple.com con un certificado de producción.

¿Hay alguna forma de detectar mediante programación que este es el caso, p. si un usuario le da un certificado push y le dice que es producción/desarrollo, pero en realidad no puede verificar ese hecho en el sitio del desarrollador de Apple. Hubiera pensado que la conexión sería rechazada, pero parece que se creó pero en un estado parcialmente roto.

Respuesta

0

Bueno, no es una forma de verificar si el certificado es APNS válido, pero puede inspeccionarlo si quiere detectar si es de desarrollo o de producción. El desarrollo tendrá la cadena "Desarrollador" en él, mientras que la producción tendrá la cadena "Producción".

0

Una forma es abrir el certificado y comprobar el sujeto, ejemplo:

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

Para los certificados de producción el tema es así:

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

Para los certificados de desarrollo se ve como:

"Apple Development IOS Push Services: com.mybundle.app..." 
Cuestiones relacionadas