Итак, я завершил весь процесс подписания и сжатия для проходов Apple и смог подключить проход к моему серверу для обновления. Единственная проблема, которую мне осталось решить, - это реализация push-уведомлений.
Я пытался уже пару дней, но просто не могу справиться, и я думаю, что мне не хватает чего-то действительно простого. Я не слишком разбираюсь в сетевых технологиях, поэтому был бы очень признателен за помощь.
Это журнал, который я получил от жрать изо всех сил.
- Пробуем 17.188.136.150:443 ... * TCP_NODELAY set * Подключен к api.push.apple.com (17.188.136.150) порт 443 (# 0) * ALPN, предлагает h2 * ALPN, предлагает http / 1.1 * успешно установить проверку сертификата расположение: * CAfile: /usr/local/etc/openssl/cert.pem CApath: /usr/local/etc/[email protected]/certs * SSL-соединение с использованием TLSv1.2 / ECDHE-RSA-CHACHA20-POLY1305 * ALPN, сервер принято использовать h2 * Сертификат сервера: * subject: CN = api.push.apple.com; OU = управление: idms.group.533599; O = Apple Inc .; ST = Калифорния; C = US * Дата начала: 14 марта, 17:50:10 2019 GMT * Дата истечения: 12 апреля 17:50:10 2021 GMT * subjectAltName: host "api.push.apple.com" соответствует api.push.apple сертификата .com "* эмитент: CN = Apple IST CA 2 - G1; OU = Центр сертификации; O = Apple Inc .; C = US * Подтверждение сертификата SSL в порядке. * Используя HTTP2, сервер поддерживает многоразовое использование * Состояние подключения изменено (HTTP / 2 подтверждено) * Копирование данных HTTP / 2 из буфера потока в буфер подключения после обновления: len = 0 * Ошибка отправки HTTP-запроса POST * Подключение # 0 к хосту api .push.apple.com оставлен без изменений
Я использую тот же сертификат, что и для прохода, который пытаюсь обновить, и отправляю токен устройства, полученный при регистрации прохода. Это мой код php.
$client = new Client();
try {
$result = $client->post('https://api.push.apple.com:443', [
'headers' => ['apns-id' => <pass_type_id> , ':path' => '/3/device/<device_id_received_upon_registration>'],
'json' => ['apns'=>''],
'debug'=>true,
'version'=>2.0,
'ssl_key' => [<path_to_key>, <key_password>],
'cert' => [<path_to_certificate (same one used for signing pass)>, <certificate_password>]]);
}
catch (GuzzleHttp\Exception\ClientException $e) {
dd($e);
}
Я действительно потерялся с этим. Пожалуйста, помогите мне. Я также попытался подключиться к порту 1295 с другим кодом, который я скопировал и вставил, но он работал не так, как должен, и с отладкой еще больше сложностей, поскольку я более знаком с портом 443.