1

导轨:3.0.5 红宝石:1.9.2 apn_on_rails:0.5.1

突然开始收到异常:来自 apn_on_rails gem 的“sslv3 alert certificate revoked”。但是,通知仍会发送到设备,并且证书有效期至 2013 年。

重现:

  1. 导轨控制台。
  2. 为现有设备之一创建通知。

    not1 = APN::Notification.create(:device_id => devices[0].id, :sound => true, :badge => 1, :alert => "测试")

  3. 执行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'
4

1 回答 1

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 文件中的新证书

于 2012-04-15T10:23:12.267 回答