2012-05-02 152 views
6

我使用这个Ruby代码从上不成功推的APN接收错误:连接与发展督促的APN证书

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

我注意到一个奇怪的情况IO.select是非零但的read_buffer返回空字符串。经过一些调试后,我意识到,如果您使用开发APNs证书连接到gateway.push.apple.com,会发生这种情况,如果您使用生产证书连接到gateway.sandbox.push.apple.com,则显然会发生同样的情况。

有没有什么办法可以通过编程方式检测到这种情况,例如,如果您获得用户的推送证书并告知其生产/开发,但无法真正在Apple开发人员网站上验证此事实?我原以为连接会被拒绝,但它似乎是被创造出来的,但却处于部分破裂的状态。

回答

0

嗯,它不是检查证书是否APNS有效的方法,但是如果要检测它是开发版还是生产版,可以检查它。该开发将在其中具有“开发人员”字符串,而生产将具有“生产”字符串。

0

一种方法是打开证书,检查对象,例如:

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

对于生产证书的主题是这样的:

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

对于开发证书的样子:

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