Aggiornamenti di Hub di notifica di Azure per iOS 13

Apple ha recentemente apportato alcune modifiche al servizio di push pubblico; le modifiche sono principalmente allineate alle versioni di iOS 13 e Xcode. Questo articolo descrive l'impatto di queste modifiche su Hub di notifica di Azure.

Modifiche al payload push APNS

Tipo di push APNS

Apple ora richiede che gli sviluppatori identifichino le notifiche come avvisi o notifiche in background tramite la nuova apns-push-type intestazione nell'API APNS. Secondo la documentazione di Apple: "Il valore di questa intestazione deve riflettere accuratamente il contenuto del payload della notifica. Se si verifica una mancata corrispondenza o se l'intestazione non è presente nei sistemi necessari, gli APN possono restituire un errore, ritardare il recapito della notifica o eliminarla completamente".

Gli sviluppatori devono ora impostare questa intestazione nelle applicazioni che inviano notifiche tramite Hub di notifica di Azure. A causa di una limitazione tecnica, i clienti devono usare l'autenticazione basata su token per le credenziali APNS con richieste che includono questo attributo. Se si usa l'autenticazione basata su certificati per le credenziali del servizio APN, è necessario passare all'autenticazione basata su token.

Gli esempi di codice seguenti illustrano come impostare questo attributo di intestazione nelle richieste di notifica inviate tramite Hub di notifica di Azure.

Notifiche dei modelli - .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);

Notifiche native - .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);

Chiamate REST dirette

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

Per facilitare la transizione, quando Hub di notifica di Azure rileva una notifica che non ha il apns-push-type set, il servizio deduce il tipo di push dalla richiesta di notifica e imposta automaticamente il valore. Tenere presente che è necessario configurare Hub di notifica di Azure per usare l'autenticazione basata su token per impostare l'intestazione richiesta; per altre informazioni, vedere Autenticazione basata su token (HTTP/2) per APNS.

Priorità APNS

Un'altra modifica secondaria, ma che richiede una modifica all'applicazione back-end che invia notifiche, è il requisito che per le notifiche in background l'intestazione apns-priority deve ora essere impostata su 5. Molte applicazioni impostano l'intestazione apns-priority su 10 (che indica il recapito immediato) o non lo impostano e ottengono il valore predefinito (che è anche 10).

L'impostazione di questo valore su 10 non è più consentita per le notifiche in background ed è necessario impostare il valore per ogni richiesta. Apple non recapita le notifiche in background se questo valore non è presente. Ad esempio:

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

Modifiche dell'SDK

Per anni, gli sviluppatori iOS hanno usato l'attributo description dei deviceToken dati inviati al delegato del token push per estrarre il token push usato da un'applicazione back-end per inviare notifiche al dispositivo. Con Xcode 11, l'attributo description è cambiato in un formato diverso. Il codice esistente usato per questo attributo è ora interrotto. L'SDK di Hub di notifica di Azure è stato aggiornato per soddisfare questa modifica, quindi aggiornare l'SDK usato dalle applicazioni alla versione 2.0.4 o successiva di Azure Notification Hubs iOS SDK.