2012-05-02 7 views
6

Sto usando questo codice Ruby per ricevere gli errori da APN su spinte infruttuosi:Collegamento a prod APN con lo sviluppo cert

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

ho notato una strana situazione in cui IO.select non è pari a zero, ma restituisce un read_buffer stringa vuota. Dopo un po 'di debug mi sono reso conto che questo si verifica se ti colleghi a gateway.push.apple.com con un certificato APN di sviluppo, e la stessa cosa sembra accadere se ti connetti a gateway.sandbox.push.apple.com con un certificato di produzione.

C'è un modo per rilevare a livello di codice che questo è il caso, ad es. se ti è stato fornito un certificato push da un utente e hai detto che è produzione/sviluppo ma non puoi effettivamente verificarlo sul sito degli sviluppatori Apple? Avrei pensato che la connessione sarebbe stata respinta, ma invece sembra essere creata ma in uno stato parzialmente rotto.

risposta

0

Bene, non è un modo per verificare se il certificato è APNS valido, ma è possibile controllarlo se si desidera rilevare se si tratta di uno sviluppo o di produzione. Lo sviluppo avrà la stringa "Sviluppatore", mentre la produzione avrà la stringa "Produzione".

0

Un modo è quello di aprire il certificato e controllare il soggetto, ad esempio:

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

Per certificati di produzione del soggetto si presenta come:

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

Per i certificati di sviluppo si presenta come:

"Apple Development IOS Push Services: com.mybundle.app..." 
Problemi correlati