APS: пропущенная тема
У меня есть приложение для iOS, которое требует возможности Push, и для этого создал необходимые сертификаты dev и Prod SSL и загрузил их в провайдер уведомлений (node-apn);
Уведомления работают нормально в среде изолированной программной среды APN, однако при отправке уведомлений в производственной настройке поставщик получает сообщение об ошибке отсутствующих тем из шлюза APN.
После проверки сертификатов продукта, я вижу три элемента, перечисленных в расширениях сертификата, как и ожидалось:
- app.bundle.id
- app.bundle.id.voip и
- app.bundle.id.complication
APSd регистрирует на телефоне, показывает, что соответствующая тема (app.bundle.id) была включена, когда приложение зарегистрировало свои настройки уведомлений в ОС. Таким образом, установка выглядит хорошо для меня на стороне приложения.
Согласно документации Apple, уведомление о публикации POST от провайдера ДОЛЖНО включать apn-topic
Заголовок, если приложение поддерживает несколько тем.
Насколько я понимаю, что voip и узлы сложности автоматически добавляются в расширения сертификатов и не обязательно означают отдельные темы.
Вопросы:
Является ли заголовок apn-theme обязательным или необязательным?
Вышеуказанная настройка рассматривается как мульти-тема или отдельная тема?
Каждый провайдер уведомлений должен знать идентификатор пакета / тему для каждого приложения, которое он поддерживает, и использовать это значение для отправки заголовка apn-theme в APN?
Добрый совет.
2 ответа
С устаревшими сертификатами разработчики получили по одному сертификату для каждого типа возможностей, поддерживаемых их приложением: обычные PUSH-уведомления, VoIP и т. Д. Каждый из них был настроен только на одну тему, и поэтому, когда поставщик уведомлений взаимодействовал со шлюзом APN с использованием устаревшего сертификата, спецификация темы было необязательно.
С новым интерфейсом http2 и введением универсальных сертификатов разработчики теперь могут получить один сертификат, который позволяет при желании получать стандартные push-уведомления, push-уведомления VoIP и watchkit. Это означает, что один и тот же сертификат может иметь более одной темы (как и в моем случае). Поэтому, когда поставщик уведомлений взаимодействовал со шлюзом APN с помощью нового универсального сертификата, в заголовке http нужно было указывать тему, а тема должна совпадать с тем, который присутствует в сертификате.
Заголовок темы больше не является обязательным.
У меня была похожая проблема между dev и prod, в моем случае проблема, которая была в заголовках, связана с документами:
Соответствующая кодировка, используемая для заголовков запросов apns-id, apns-expiration и apns-collapse-id, отличается в зависимости от того, является ли она частью начальной или последующей операции POST, следующим образом: при первой отправке этих заголовков, закодируйте их с помощью инкрементной индексации, чтобы разрешить добавление имен заголовков в динамическую таблицу. При последующих отправках этих заголовков кодируйте их как буквенные поля заголовков без индексации.
поэтому в PHP заголовки запроса выглядят так:
$headers[] = 'content-length: ' . strlen($data);
$headers[] = 'apns-topic: ' . $message->topic;
$headers[] = 'apns-expiration: ' . ($message->time_to_live ? (int)$message->time_to_live + time() : 0);
без имен или ключей.
Я надеюсь, что это помогает кому-то