Partilhar via


Atualizações dos Hubs de Notificação do Azure para iOS 13

A Apple fez recentemente algumas alterações ao seu serviço de push público; as alterações estão alinhadas principalmente com as versões do iOS 13 e Xcode. Este artigo descreve o impacto destas alterações nos Hubs de Notificação do Azure.

Alterações ao payload push do APNS

Tipo de push do APNS

A Apple exige agora que os programadores identifiquem as notificações como um alerta ou notificações em segundo plano através do novo apns-push-type cabeçalho na API APNS. De acordo com a documentação da Apple: "O valor deste cabeçalho tem de refletir com precisão o conteúdo do payload da sua notificação. Se existir um erro de correspondência ou se o cabeçalho estiver em falta nos sistemas necessários, as APNs poderão devolver um erro, atrasar a entrega da notificação ou largue-a completamente."

Os programadores têm agora de definir este cabeçalho em aplicações que enviam notificações através dos Hubs de Notificação do Azure. Devido a uma limitação técnica, os clientes têm de utilizar a autenticação baseada em tokens para credenciais APNS com pedidos que incluam este atributo. Se estiver a utilizar a autenticação baseada em certificados para as credenciais do APNS, tem de mudar para a autenticação baseada em tokens.

Os exemplos de código seguintes mostram como definir este atributo de cabeçalho em pedidos de notificação enviados através dos Hubs de Notificação do Azure.

Notificações de modelo - SDK .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);

Notificações nativas - SDK .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);

Chamadas REST diretas

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

Para ajudá-lo durante esta transição, quando os Hubs de Notificação do Azure detetarem uma notificação que não tem o apns-push-type conjunto, o serviço infere o tipo push do pedido de notificação e define o valor automaticamente. Lembre-se de que tem de configurar os Notification Hubs do Azure para utilizar a autenticação baseada em tokens para definir o cabeçalho necessário; Para obter mais informações, veja Autenticação baseada em tokens (HTTP/2) para APNS.

Prioridade do APNS

Outra pequena alteração, mas que requer uma alteração à aplicação de back-end que envia notificações, é o requisito de que, para as notificações em segundo plano, o apns-priority cabeçalho tem agora de ser definido como 5. Muitas aplicações definem o apns-priority cabeçalho como 10 (indicando entrega imediata) ou não o definem e obtêm o valor predefinido (que também é 10).

A definição deste valor como 10 já não é permitida para notificações em segundo plano e tem de definir o valor para cada pedido. A Apple não entregará notificações em segundo plano se este valor estiver em falta. Por exemplo:

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

Alterações ao SDK

Durante anos, os programadores de iOS utilizaram o description atributo dos deviceToken dados enviados para o delegado do token push para extrair o token push que uma aplicação de back-end utiliza para enviar notificações para o dispositivo. Com o Xcode 11, esse description atributo foi alterado para um formato diferente. O código existente que os programadores utilizaram para este atributo está agora quebrado. Atualizámos o SDK dos Hubs de Notificação do Azure para acomodar esta alteração, por isso, atualize o SDK utilizado pelas suas aplicações para a versão 2.0.4 ou mais recente do SDK iOS dos Hubs de Notificação do Azure.