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

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

Alterações de conteúdo de push para APNS

Tipo de push APNS

Agora, a Apple exige que os desenvolvedores identifiquem notificações como um alerta ou notificações de segundo plano por meio do novo apns-push-type cabeçalho na API do APNS. De acordo com a Documentação da Apple: "o valor desse cabeçalho deve refletir com precisão o conteúdo da carga da notificação. Se houver uma incompatibilidade ou se o cabeçalho estiver ausente nos sistemas necessários, o APNs poderá retornar um erro, atrasar a entrega da notificação ou abandoná-la completamente."

Os desenvolvedores agora devem definir esse cabeçalho em aplicativos que enviam notificações por meio dos Hubs de Notificação do Azure. Devido a uma limitação técnica, os clientes devem usar a autenticação baseada em token para credenciais de APNS com solicitações que incluem esse atributo. Se você estiver usando a autenticação baseada em certificado para suas credenciais do APNs, precisará alternar para o uso da autenticação baseada em token.

Os exemplos de código a seguir mostram como definir esse atributo de cabeçalho em solicitações de notificação enviadas por meio dos Hubs de Notificação do Azure.

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

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

Para te ajudar durante essa transição, quando os Hubs de Notificação do Azure detectam uma notificação que não tem o conjunto apns-push-type, o serviço infere o tipo de push da solicitação de notificação e define o valor automaticamente. Lembre-se de que você deve configurar os hubs de notificação do Azure para usar a autenticação baseada em token para definir o cabeçalho necessário; para obter mais informações, consulte Autenticação baseada em token (HTTP/2) para APNS.

Prioridade de APNS

Outra alteração secundária, mas uma que requer uma alteração no aplicativo de back-end que envia notificações, é o requisito de notificações em segundo plano em que o apns-priority cabeçalho agora deve ser definido como 5. Muitos aplicativos definem o apns-priority cabeçalho como 10 (indicando entrega imediata) ou não os definem e obtêm o valor padrão (que também é 10).

Definir esse valor como 10 não é mais permitido para notificações em segundo plano e você deve definir o valor para cada solicitação. A Apple não fornecerá notificações em segundo plano se esse valor estiver ausente. 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 SDK

Durante anos, os desenvolvedores do iOS usaram o description atributo dos deviceToken dados enviados ao token de push delegado para extrair o token de push usado por um aplicativo de back-end para enviar notificações ao dispositivo. Com o Xcode 11, esse description atributo foi alterado para um formato diferente. O código existente que os desenvolvedores usavam para este atributo está descartado atualmente. Atualizamos o SDK dos Hubs de Notificação do Azure para acomodar essa alteração. portanto, atualize o SDK usado por seus aplicativos para a versão 2.0.4 ou mais recente do SDK do iOS dos Hubs de Notificação do Azure.