Push-уведомления iOS не работают для распространения

Я попробовал push-уведомление для своего приложения для разработки, и оно работает нормально. Когда я создаю файл .p12 производства (распространения), он создается. После развертывания файла .pem на сервере он выдает ошибку.

OpenSSL::SSL::SSLError (SSL_connect return=1 errno=0 state=SSLv3 прочитанный билет сеанса сервера A: сертификат оповещения sslv3 неизвестен):"

Сервер: RoR(Ruby on Rails) Любая помощь будет очень ценной.

Примечание: Для разработки .p12 все работает нормально. Проблема в том, что я развертываю дистрибутив .p12. Пожалуйста, предложите, что я могу упустить.

Спасибо и с уважением


person Akshay    schedule 29.03.2012    source источник


Ответы (5)


@Ученик

Если все остальные параметры не работают, вам следует проверить, как вы экспортируете файл p12. Вы должны экспортировать файл p12, который связан с сертификатом производства Apple, я надеюсь, что он будет работать ... как это сработало для меня !!!

person nisha vishwakarma    schedule 10.04.2012

проверьте это в своем коде сервера

gateway.push.apple.com, порт 2195 для раздачи

gateway.sandbox.push.apple.com, порт 2195

  1. Войдите на портал программы для разработчиков iPhone.
  2. Выберите идентификаторы приложений в меню справа.
  3. Создайте идентификатор приложения без подстановочного знака.
  4. Нажмите ссылку «Настроить» рядом с этим идентификатором приложения, а затем нажмите кнопку, чтобы запустить мастер для создания нового сертификата SSL для разработки. для разработки (или) для создания нового SSL-сертификата Production Push для распространения.
  5. Загрузите этот сертификат и дважды щелкните файл aps_developer_identity.cer, чтобы импортировать его в свою связку ключей.
  6. Запустите Keychain Assistant и нажмите «Мои сертификаты» слева. Разверните «Apple Development Push Services» и выберите «Apple Development Push Services».
  7. Щелкните правой кнопкой мыши и выберите «Экспортировать 1 элемент...» и сохраните его как apns-cert.p12. И ваш закрытый ключ в той же расширенной области. Щелкните правой кнопкой мыши и выберите «Экспортировать 1 элемент...» и сохраните как apns-key.p12.

8. Откройте Терминал и измените каталог на местоположение, используемое для сохранения .p12, и преобразуйте пакет сертификатов PKCS12 в формат PEM с помощью этой команды.

я). openssl pkcs12 -clcerts -nokeys -out apns-cert.pem -in apns-cert.p12 ii). openssl pkcs12 -nocerts -out apns-key.pem -in apns-key.p12 здесь вам нужно указать ключ для доступа к php-коду.

Удалить кодовую фразу

III). openssl rsa -in apns-key.pem -out apns-key-noenc.pem здесь вы должны указать тот же ключ для удаления парольной фразы.

наконец IV). cat apns-cert.pem apns-key-noenc.pem › apns-dev.pem.

Теперь вы можете использовать этот файл PEM в качестве сертификата в ApnsPHP!

person Senthilkumar    schedule 06.04.2012

Если вы хотите пропустить проверку, вы можете использовать это.

   require 'net/http'
    require 'openssl'

    class Net::HTTP   alias_method :origConnect, :connect
        def connect
          @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
          origConnect
        end
    end

источник: Как избавиться от OpenSSL::SSL::SSLError

Но так как мы хотим быть в безопасности, вы должны использовать следующий

ENV['SSL_CERT_DIR'] = '/usr/share/ca-certificates/'

Дополнительные решения на странице OmniAuth и Facebook: ошибка проверки сертификата

person Sairam    schedule 05.04.2012

Я решил это. Это была ошибка файла .p12. Я не создавал .p12, который должен был использовать.

Спасибо !!

person Akshay    schedule 10.04.2012

Я использовал gem 'rpush', который брал pem-файл из папки учетных данных и сохранял его в базе данных. Мое решение состояло в том, чтобы удалить все старые записи Rpush::Apns::App из базы данных и регенерированные записи после обновления файла pem в моей папке учетных данных.

app = Rpush::Apns::App.new
app.name = "ios_app"
app.certificate = File.read("/path/to/sandbox.pem")
app.environment = "sandbox" # APNs environment.
app.password = "certificate password"
app.connections = 1
app.save!

n = Rpush::Apns::Notification.new
n.app = Rpush::Apns::App.find_by_name("ios_app")
n.device_token = "..." # 64-character hex string
n.alert = "hi mom!"
n.data = { foo: :bar }
n.save!
person Dave    schedule 14.06.2016