Rails:3.0.5 Ruby:1.9.2 apn_on_rails:0.5.1
突然开始收到异常:“从apn_on_rails gem中撤消了”sslv3警告证书。但是,通知仍然会发送到设备,证书有效期至2013年。
重现:
为其中一个现有设备创建通知。
not1 = APN :: Notification.create(:device_id => devices [0] .id,:sound => true,:badge => 1,:alert =>“Testing”)
执行APN::App.send_notifications
。 (注意:APN :: Notification.send_notifications根本不发送任何通知,反过来调用APN :: App.send_notifications)
预期输出:要发送到设备的通知。没有抛出异常。
实际输出:发送到设备的通知。抛出异常。下面的完整堆栈异常:
ruby-1.9.2-p0 > APN::App.send_notifications
SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert certificate revoked
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert certificate revoked
from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/libs/connection.rb:59:in `connect'
from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/libs/connection.rb:59:in `open'
from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/libs/connection.rb:23:in `open_for_delivery'
from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/app/models/apn/app.rb:48:in `send_notifications_for_cert'
from /gems/apn_on_rails-0.5.1/lib/apn_on_rails/app/models/apn/app.rb:36:in `send_notifications'
答案 0 :(得分:1)
如堆栈跟踪所示 - 问题出在/gems/apn_on_rails-0.5.1/lib/apn_on_rails/app/models/apn/app.rb
在App.rb中,方法self.send_notifications方法:
def self.send_notifications
apps = APN::App.all
apps.each do |app|
app.send_notifications
end
if !configatron.apn.cert.blank?
global_cert = File.read(configatron.apn.cert)
send_notifications_for_cert(global_cert, nil)
end
end
注意:(if !configatron.apn.cert.blank?
)代码检查全局证书,无论您是否已定义,它将检查“config / apple_push_develpment_certification.pem”并发送带有此证书的通知。
在我的情况下,我有这个文件“ config / apple_push_develpment_certification.pem ”,我还为我的iPhone和iPad应用程序添加了两个不同的证书,由两个configatron变量定义。因此,我遇到了证书撤销问题,我的通知也被发送到设备。
解决这个问题: 定义“configatron.apn.cert”以指向development.rb和production.rb文件中的新证书