Azure Notification Hubs-uppdateringar för iOS 13

Apple har nyligen gjort vissa ändringar i sin offentliga push-tjänst; ändringarna överensstämmer främst med versionerna av iOS 13 och Xcode. I den här artikeln beskrivs effekten av dessa ändringar på Azure Notification Hubs.

Ändringar i APNS-push-nyttolasten

APNS-pushtyp

Apple kräver nu att utvecklare identifierar meddelanden som en avisering eller bakgrundsmeddelanden via det nya apns-push-type huvudet i APNS-API:et. Enligt Apples dokumentation: "Värdet för den här rubriken måste korrekt återspegla innehållet i meddelandets nyttolast. Om det finns ett matchningsfel, eller om huvudet saknas i nödvändiga system, kan APN returnera ett fel, fördröja leveransen av meddelandet eller släppa det helt och hållet."

Utvecklare måste nu ange det här huvudet i program som skickar meddelanden via Azure Notification Hubs. På grund av en teknisk begränsning måste kunder använda tokenbaserad autentisering för APNS-autentiseringsuppgifter med begäranden som innehåller det här attributet. Om du använder certifikatbaserad autentisering för dina APNS-autentiseringsuppgifter måste du växla till med tokenbaserad autentisering.

Följande kodexempel visar hur du anger det här rubrikattributet i meddelandebegäranden som skickas via Azure Notification Hubs.

Mallmeddelanden – .NET SDK

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

Interna meddelanden – .NET SDK

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

Direkta REST-anrop

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

För att hjälpa dig under den här övergången, när Azure Notification Hubs identifierar ett meddelande som inte har apns-push-type angetts, härleder tjänsten push-typen från meddelandebegäran och anger värdet automatiskt. Kom ihåg att du måste konfigurera Azure Notification Hubs att använda tokenbaserad autentisering för att ange det nödvändiga huvudet. Mer information finns i Tokenbaserad autentisering (HTTP/2) för APNS.

APNS-prioritet

En annan mindre ändring, men en som kräver en ändring i serverdelsprogrammet som skickar meddelanden, är kravet att huvudet nu måste vara inställt på 5 för bakgrundsmeddelanden apns-priority . Många program anger apns-priority huvudet till 10 (vilket indikerar omedelbar leverans) eller anger det inte och hämtar standardvärdet (som också är 10).

Det går inte längre att ange värdet till 10 för bakgrundsmeddelanden och du måste ange värdet för varje begäran. Apple levererar inte bakgrundsmeddelanden om det här värdet saknas. Exempel:

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-ändringar

I åratal använde description iOS-utvecklare attributet för de deviceToken data som skickades till push-tokendelegaten för att extrahera push-token som ett serverdelsprogram använder för att skicka meddelanden till enheten. Med Xcode 11 har attributet description ändrats till ett annat format. Befintlig kod som utvecklare använde för det här attributet är nu bruten. Vi har uppdaterat Azure Notification Hubs SDK för att hantera den här ändringen, så uppdatera SDK:n som används av dina program till version 2.0.4 eller senare av Azure Notification Hubs iOS SDK.