1

レール: 3.0.5 ルビー: 1.9.2 apn_on_rails: 0.5.1

突然、apn_on_rails gem から Exception: "sslv3 alert certificate revoked" を受け取り始めました。ただし、通知は引き続きデバイスに送信され、証明書は 2013 年まで有効です。

再現するには:

  1. レールコンソール。
  2. 既存のデバイスの 1 つに通知を作成します。

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

  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」があり、2つのconfigatron変数で定義されたiPhoneおよびiPadアプリ用に2つの異なる証明書も追加しています。そのため、証明書が取り消される問題が発生し、通知がデバイスに送信されました。

これを修正するには:development.rbファイルとproduction.rbファイルで新しい証明書を指すように「configatron.apn.cert」を定義します

于 2012-04-15T10:23:12.267 に答える