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. Den här artikeln beskriver effekten av dessa ändringar på Azure Notification Hubs.

Ändringar av APNS-push-nyttolast

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 ditt meddelandes nyttolast. Om det finns ett matchningsfel eller om rubriken saknas i de system som krävs 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 kunderna 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 att använda tokenbaserad autentisering.

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

Mallaviseringar – .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 för att använda tokenbaserad autentisering för att ange det nödvändiga huvudet. Mer information finns i Tokenbaserad (HTTP/2) autentisering för APNS.

APNS-prioritet

En annan mindre ändring, men en som kräver en ändring av serverdelsprogrammet som skickar meddelanden, är kravet att huvudet nu måste anges till 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).

Att ange det här värdet till 10 tillåts inte längre för bakgrundsmeddelanden, och du måste ange värdet för varje begäran. Apple kommer inte att leverera bakgrundsmeddelanden om det här värdet saknas. Ett 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 har nu brutits. Vi har uppdaterat Azure Notification Hubs SDK för att hantera den här ändringen, så uppdatera SDK:t som används av dina program till version 2.0.4 eller senare av Azure Notification Hubs iOS SDK.