Поделиться через


Обновление Центров уведомлений Azure для iOS 13

Недавно корпорация Apple внесла некоторые изменения в общедоступную службу push-уведомлений. Эти изменения в основном связаны с выпусками iOS 13 и Xcode. В этой статье описано влияние этих изменений на работу Центров уведомлений Azure.

Изменения полезных данных push-уведомлений APNS

Тип push-уведомлений APNS

Согласно новым требованиям Apple, разработчики теперь должны обозначать уведомления в качестве оповещений или фоновых уведомлений с помощью нового заголовка apns-push-type в API APNS. В соответствии с документацией Apple, значение этого заголовка должно в точности отражать содержимое полезных данных уведомления. Если обнаружится несоответствие или отсутствие заголовка в требуемых системах, APNS может вернуть ошибку, задержать доставку уведомления или вообще удалить его.

Теперь разработчики должны задавать этот заголовок в приложениях, отправляющих уведомления через Центры уведомлений Azure. Из-за технических ограничений клиенты должны использовать проверку подлинности на основе маркеров для учетных данных APNS с запросами, включающими этот атрибут. Если для учетных данных APNS используется аутентификация на основе сертификатов, необходимо переключиться на использование аутентификации на основе маркеров.

В примерах кода ниже показано, как задать атрибут этого заголовка в запросах на уведомления, отправляемых через Центры уведомлений Azure.

Шаблоны уведомлений — пакет SDK для .NET

var hub = NotificationHubClient.CreateFromConnectionString(...);
var headers = new Dictionary<string, string> {{"apns-push-type", "alert"}};
var tempprop = new Dictionary<string, string> {{"message", "value"}};
var notification = new TemplateNotification(tempprop);
notification.Headers = headers;
await hub.SendNotificationAsync(notification);

Собственные уведомления — пакет SDK для .NET

var hub = NotificationHubClient.CreateFromConnectionString(...);
var headers = new Dictionary<string, string> {{"apns-push-type", "alert"}};
var notification = new AppleNotification("notification text", headers);
await hub.SendNotificationAsync(notification);

Прямые вызовы REST

var request = new HttpRequestMessage(method, $"<resourceUri>?api-version=2017-04");
request.Headers.Add("Authorization", createToken(resourceUri, KEY_NAME, KEY_VALUE));
request.Headers.Add("ServiceBusNotification-Format", "apple");
request.Headers.Add("apns-push-type", "alert");

Чтобы упростить переход, в ситуациях, когда Центры уведомлений Azure обнаруживают уведомление, где не установлен атрибут apns-push-type, служба определяет тип push-уведомления на основе запроса уведомления и автоматически устанавливает это значение соответствующим образом. Не забудьте, что для установки требуемого заголовка Центры уведомлений Azure необходимо настроить для проверки подлинности на основе маркеров. Дополнительные сведения см. в статье Проверка подлинности на основе токенов (HTTP/2) для APNS.

Приоритет APNS

Еще одним небольшим изменением, которое потребует изменения серверной части приложения, отправляющего уведомления, является новое требование для фоновых уведомлений, согласно которому заголовок apns-priority теперь должен иметь значение 5. Многие приложения устанавливают для заголовка apns-priority значение 10 (что обозначает немедленное доставку) или не задают его, вследствие чего используется значение по умолчанию (также 10).

Устанавливать для этого параметра значение 10 для фоновых уведомлений больше нельзя, и его необходимо задавать для каждого запроса. Apple не будет доставлять фоновые уведомления, если это значение отсутствует. Пример:

var hub = NotificationHubClient.CreateFromConnectionString(...);
var headers = new Dictionary<string, string> {{"apns-push-type", "background"}, { "apns-priority", "5" }};
var notification = new AppleNotification("notification text", headers);
await hub.SendNotificationAsync(notification);

Изменения в SDK

В течение долгого времени разработчики iOS использовали атрибут description данных deviceToken, отправляемых делегату токена push-уведомлений, для извлечения этого токена, используемого затем серверной частью приложения для отправки уведомлений на устройство. В Xcode 11 формат этого атрибута description был изменен. Существующий код, используемый для его обработки, теперь требует корректировки. Мы обновили пакет SDK для Центров уведомлений Azure с учетом этого изменения, поэтому просим вас обновить пакет SDK Центров уведомлений Azure для iOS до версии 2.0.4 или более новой.