Aktualizacje usługi Azure Notification Hubs dla systemu iOS 13

Apple niedawno dokonało pewnych zmian w swojej publicznej usłudze wypychania; zmiany są w większości zgodne z wersjami systemów iOS 13 i Xcode. W tym artykule opisano wpływ tych zmian na usługę Azure Notification Hubs.

Zmiany ładunku wypychania usługi APNS

Typ wypychania USŁUGI APNS

Firma Apple wymaga teraz, aby deweloperzy identyfikowali powiadomienia jako alerty lub powiadomienia w tle za pośrednictwem nowego apns-push-type nagłówka w interfejsie API usługi APNS. Zgodnie z dokumentacją firmy Apple: "Wartość tego nagłówka musi dokładnie odzwierciedlać zawartość ładunku powiadomienia. Jeśli występuje niezgodność lub brakuje nagłówka w wymaganych systemach, usługa APNs może zwrócić błąd, opóźnić dostarczenie powiadomienia lub całkowicie ją usunąć".

Deweloperzy muszą teraz ustawić ten nagłówek w aplikacjach, które wysyłają powiadomienia za pośrednictwem usługi Azure Notification Hubs. Ze względu na ograniczenie techniczne klienci muszą używać uwierzytelniania opartego na tokenach dla poświadczeń usługi APNS z żądaniami, które zawierają ten atrybut. Jeśli używasz uwierzytelniania opartego na certyfikatach dla poświadczeń usługi APNS, musisz przełączyć się na używanie uwierzytelniania opartego na tokenach.

Poniższe przykłady kodu pokazują, jak ustawić ten atrybut nagłówka w żądaniach powiadomień wysyłanych za pośrednictwem usługi Azure Notification Hubs.

Powiadomienia o szablonach — zestaw SDK platformy .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);

Powiadomienia natywne — zestaw SDK platformy .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);

Bezpośrednie wywołania 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");

Aby ułatwić ci przejście, gdy usługa Azure Notification Hubs wykryje powiadomienie, które nie ma ustawionego apns-push-type ustawienia, usługa wywnioskuje typ wypychania z żądania powiadomień i automatycznie ustawia wartość. Pamiętaj, że musisz skonfigurować usługę Azure Notification Hubs do używania uwierzytelniania opartego na tokenach w celu ustawienia wymaganego nagłówka; Aby uzyskać więcej informacji, zobacz Token-based (HTTP/2) Authentication for APNS (Uwierzytelnianie oparte na tokenach (HTTP/2) dla usługi APNS.

Priorytet usługi APNS

Kolejna drobna zmiana, ale wymaga zmiany w aplikacji zaplecza, która wysyła powiadomienia, jest wymaganiem, że w przypadku powiadomień apns-priority w tle nagłówek musi być teraz ustawiony na 5. Wiele aplikacji ustawia apns-priority nagłówek na wartość 10 (wskazującą natychmiastowe dostarczanie) lub nie ustawia go i pobiera wartość domyślną (która również wynosi 10).

Ustawienie tej wartości na 10 nie jest już dozwolone dla powiadomień w tle i należy ustawić wartość dla każdego żądania. Firma Apple nie będzie dostarczać powiadomień w tle, jeśli brakuje tej wartości. Przykład:

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);

Zmiany zestawu SDK

Przez lata deweloperzy systemu iOS używali description atrybutu danych wysyłanych deviceToken do delegata tokenu wypychania w celu wyodrębnienia tokenu wypychania używanego przez aplikację zaplecza do wysyłania powiadomień do urządzenia. W środowisku Xcode 11 ten description atrybut został zmieniony na inny format. Istniejący kod używany przez deweloperów dla tego atrybutu jest teraz uszkodzony. Zaktualizowaliśmy zestaw SDK usługi Azure Notification Hubs, aby uwzględnić tę zmianę, dlatego zaktualizuj zestaw SDK używany przez aplikacje do wersji 2.0.4 lub nowszej zestawu SDK usługi Azure Notification Hubs dla systemu iOS.