АПС: пропущена тема

У меня есть приложение iOS, для которого требуется возможность Push, и для этого я создал необходимые SSL-сертификаты dev и Prod и загрузил их в поставщика уведомлений (node-apn);

Уведомления отлично работают в среде песочницы APN, однако при отправке уведомлений в производственной настройке провайдер получает сообщение об ошибке отсутствующих тем от шлюза APN.

При проверке сертификатов продукта я вижу три элемента, перечисленных в расширениях сертификата, как и ожидалось:

  1. app.bundle.id
  2. app.bundle.id.voip и
  3. app.bundle.id.complication

Журналы APSd на телефоне показывают, что соответствующая тема (app.bundle.id) была включена, когда приложение зарегистрировало свои настройки уведомлений в ОС. Итак, настройка выглядит нормально для меня на стороне приложения.

Согласно документации Apple, уведомление о публикации POST от провайдера ДОЛЖНО включать заголовок apn-topic, если и только если приложение поддерживает несколько тем.

Насколько я понимаю, узлы voip и усложнения добавляются автоматически в расширения сертификата и не обязательно означают отдельные темы.

Вопросы :

  1. Является ли заголовок apn-topic обязательным или необязательным?

  2. Рассматривается ли указанная выше установка как многотемная или как одна тема?

  3. Нужно ли каждому поставщику уведомлений знать идентификатор/тему пакета для каждого приложения, которое он поддерживает, и использовать это значение для отправки заголовка apn-topic в APN?

Добрый совет.


person Samuh    schedule 31.10.2016    source источник


Ответы (2)


у меня была аналогичная проблема между dev и prod, в моем случае проблема была в заголовках, связанных с документами, говорится:

Надлежащее кодирование для заголовков запроса apns-id, apns-expiration и apns-collapse-id различается в зависимости от того, является ли оно частью начальной или последующей операции POST, а именно: при первой отправке этих заголовков кодируйте их с помощью добавочной индексации, чтобы разрешить добавление имен заголовков в динамическую таблицу. Последующие разы, когда вы отправляете эти заголовки, кодируйте их как литеральные поля заголовков без индексации.

Запрос HTTP/2 к APN

поэтому в 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);

без имен и ключей.

Я надеюсь, что это поможет кому-то

person arcos.lwm    schedule 04.01.2017

С устаревшими сертификатами разработчики получали по одному сертификату для каждого типа возможностей, поддерживаемых их приложением: обычные PUSH-уведомления, VoIP и т. д. Каждое из них было настроено только для одной темы, и поэтому, когда поставщик уведомлений взаимодействовал со шлюзом APN с использованием устаревшего сертификата, спецификация темы был необязательным.

С новым интерфейсом http2 и введением универсальных сертификатов разработчики теперь могут получить один сертификат, который разрешает стандартные push-уведомления, push-уведомления VoIP и уведомления watchkit, если они того пожелают. Это означает, что один и тот же сертификат может иметь более одной темы (как в моем случае). Поэтому, когда поставщик уведомлений взаимодействовал со шлюзом APNs с использованием нового универсального сертификата, тема должна была быть указана в заголовке http, а тема должна была соответствовать теме, присутствующей в сертификате.

Заголовок темы больше не является необязательным.

person Samuh    schedule 15.02.2017