Sdílet prostřednictvím


Aktualizace služby Azure Notification Hubs pro iOS 13

Společnost Apple nedávno provedla některé změny ve své veřejné službě push; změny většinou odpovídají verzím iOS 13 a Xcode. Tento článek popisuje dopad těchto změn na Službu Notification Hubs.

Změny nabízených datových částí APNS

Typ nabízení APNS

Apple teď vyžaduje, aby vývojáři identifikovali oznámení jako upozornění nebo oznámení na pozadí prostřednictvím nové apns-push-type hlavičky v rozhraní API APNS. Podle dokumentace společnosti Apple: "Hodnota této hlavičky musí přesně odrážet obsah datové části vašeho oznámení. Pokud dojde k neshodě nebo v požadovaných systémech chybí hlavička, služba APNs může vrátit chybu, zpozdit doručení oznámení nebo ho úplně odstranit.

Vývojáři teď musí tuto hlavičku nastavit v aplikacích, které odesílají oznámení přes Azure Notification Hubs. Kvůli technickým omezením musí zákazníci používat ověřování pomocí tokenů pro přihlašovací údaje APNS s požadavky, které obsahují tento atribut. Pokud pro přihlašovací údaje APNS používáte ověřování na základě certifikátu, musíte přepnout na ověřování na základě tokenů.

Následující ukázky kódu ukazují, jak nastavit tento atribut hlavičky v požadavcích oznámení odesílaných přes Azure Notification Hubs.

Oznámení šablon – .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);

Nativní oznámení – .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);

Přímá volání 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 vám při tomto přechodu pomohla služba Azure Notification Hubs zjistit oznámení, které nemá apns-push-type nastavené oznámení, odvodí typ nabízení z žádosti o oznámení a nastaví hodnotu automaticky. Nezapomeňte, že k nastavení požadované hlavičky musíte nakonfigurovat službu Azure Notification Hubs tak, aby používala ověřování na základě tokenů. Další informace najdete v tématu Ověřování APNS na základě tokenů (HTTP/2).

Priorita APNS

Další menší změna, která ale vyžaduje změnu v back-endové aplikaci, která odesílá oznámení, je požadavek, že pro oznámení apns-priority na pozadí musí být hlavička nastavená na hodnotu 5. Mnoho aplikací nastaví hlavičku apns-priority na 10 (označuje okamžité doručení) nebo ji nenastaví a získá výchozí hodnotu (která je také 10).

Nastavení této hodnoty na 10 už není pro oznámení na pozadí povolené a musíte nastavit hodnotu pro každý požadavek. Apple nedoručí oznámení na pozadí, pokud tato hodnota chybí. Příklad:

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

Změny sady SDK

Vývojáři pro iOS roky používali description atribut deviceToken dat odeslaných delegátovi tokenu push k extrahování tokenu push, který back-endová aplikace používá k odesílání oznámení do zařízení. U Xcode 11 se description tento atribut změnil do jiného formátu. Existující kód, který vývojáři použili pro tento atribut, je nyní poškozen. Aktualizovali jsme sadu Azure Notification Hubs SDK, aby vyhovovala této změně, proto prosím aktualizujte sadu SDK používanou vašimi aplikacemi na verzi 2.0.4 nebo novější sady Azure Notification Hubs SDK pro iOS.