Как я понял, у меня есть 2 способа отправки push-уведомлений в Apple APN: на основе сертификатов и на основе токенов.Я выбрал руководство по токенам
. В Apple говорится, что нам нужно создавать токен и обновлять его как минимум каждый час.Итак, я создал задание cron, которое обновляет этот токен каждый час и помещает его в файл на моем сервере.Другое задание cron читает этот токен для отправки новых ожидающих push-уведомлений каждую секунду.
Проблема возникает в задании refresh_token, которое я запускаю каждый час.Я использую это библиотека для создания JWT: https://web -token.spomky-labs.com / v / v2.x / components / signature-tokens-jws / jws-creation
Вот мой код (я только что следовал руководству, которое я только что дал как ссылку):
$algorithmManager = AlgorithmManager::create([
new ES256()
]);
// Our key.
$jwk = new JWK([
'kty' => 'EC', // *** PROBLEM HERE ***
'k' => $keyFile
]);
// The JSON Converter.
$jsonConverter = new StandardConverter();
// We instantiate our JWS Builder.
$jwsBuilder = new JWSBuilder(
$jsonConverter,
$algorithmManager
);
// The payload we want to sign. The payload MUST be a string hence we use our JSON Converter.
$payload = $jsonConverter->encode([
'iat' => time(),
'nbf' => time(),
'exp' => time() + 3600,
'iss' => APPLE_TEAM_ID
]);
$jws = $jwsBuilder
->create()
->withPayload($payload)
->addSignature($jwk, /* with header: */['kid' => APPLE_KEY_NAME, 'alg' => 'ES256'])
->build();
Этот код вызывает исключение при -> build ();функция, в конце.Это говорит о том, что параметры x, y и crv не указаны в ключе.Эти параметры, кажется, связаны с алгоритмом (ES256), потому что, когда я выбираю alg, предоставленный в руководстве JWT, они не спрашивают меня об этих параметрах.
Хотя Apple не предоставила никакой информации о ключе, который они дали мне на своем веб-сайте.Вот их руководство: https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns