Partilhar via


Notificações por push no iOS

Importante

As informações nesta seção pertencem ao iOS 9 e anteriores, foi deixado aqui para suportar versões mais antigas do iOS. Para iOS 10 e posterior, consulte o guia da Estrutura de Notificação do Usuário para oferecer suporte à Notificação Local e Remota em um dispositivo iOS.

As notificações por push devem ser breves e conter apenas dados suficientes para notificar o aplicativo móvel de que ele deve entrar em contato com o aplicativo do servidor para obter uma atualização. Por exemplo, quando um novo e-mail chega, o aplicativo do servidor notifica apenas o aplicativo móvel de que um novo e-mail chegou. A notificação não conteria o novo e-mail em si. O aplicativo móvel recuperaria os novos e-mails do servidor quando fosse apropriado

No centro das notificações push no iOS está o Apple Push Notification Gateway Service (APNS). Este é um serviço fornecido pela Apple que é responsável por rotear notificações de um servidor de aplicativos para dispositivos iOS. A imagem a seguir ilustra a topologia de notificação por push para iOS: Esta imagem ilustra a topologia de notificação por push para iOS

As próprias notificações remotas são cadeias de caracteres formatadas em JSON que aderem ao formato e aos protocolos especificados na seção Carga de Notificação do Guia de Programação de Notificação Local e por Push na documentação do desenvolvedor do iOS.

A Apple mantém dois ambientes de APNS: um Sandbox e um ambiente de Produção . O ambiente Sandbox destina-se a testes durante a fase de desenvolvimento e pode ser encontrado na gateway.sandbox.push.apple.com porta TCP 2195. O ambiente de produção destina-se a ser usado em aplicativos que foram implantados e podem ser encontrados na gateway.push.apple.com porta TCP 2195.

Requisitos

A notificação por push deve observar as seguintes regras que são ditadas pela arquitetura do APNS:

  • Limite de mensagens de 256 bytes - O tamanho inteiro da mensagem da notificação não deve exceder 256 bytes.
  • Sem confirmação de recebimento - O APNS não fornece ao remetente nenhuma notificação de que uma mensagem foi enviada ao destinatário pretendido. Se o dispositivo estiver inacessível e várias notificações sequenciais forem enviadas, todas as notificações, exceto a mais recente, serão perdidas. Apenas a notificação mais recente será entregue ao dispositivo.
  • Cada aplicativo requer um certificado seguro - A comunicação com o APNS deve ser feita por SSL.

Criando e usando certificados

Cada um dos ambientes mencionados na seção anterior exigem seu próprio certificado. Esta seção abordará como criar um certificado, associá-lo a um perfil de provisionamento e, em seguida, obter um certificado de Troca de Informações Pessoais para uso com o PushSharp.

  1. Para criar um certificado, acesse o Portal de provisionamento do iOS no site da Apple, conforme mostrado na captura de tela a seguir (observe o item de menu IDs do aplicativo à esquerda):

    O Portal de provisionamento do iOS no site da Apple

  2. Em seguida, navegue até a seção ID do aplicativo e crie um novo ID do aplicativo, conforme mostrado na captura de tela a seguir:

    Navegue até a seção IDs do aplicativo e crie um novo ID do aplicativo

  3. Ao clicar no + botão, você poderá inserir a descrição e um Identificador de Pacote para o ID do aplicativo, conforme mostrado na próxima captura de tela:

    Insira a descrição e um identificador de pacote para o ID do aplicativo

  4. Certifique-se de selecionar ID de aplicativo explícito e que o identificador de pacote não termine com um * arquivo . Isso criará um identificador que é bom para vários aplicativos, e os certificados de notificação por push devem ser para um único aplicativo.

  5. Em Serviços de Aplicativo, selecione Notificações por Push:

    Selecione Notificações por push

  6. E pressione Enviar para confirmar o registro do novo ID do aplicativo:

    Confirmar o registro da nova ID do aplicativo

  7. Em seguida, você deve criar o certificado para a ID do aplicativo. Na navegação à esquerda, navegue até Certificados > Todos e selecione o + botão, conforme mostrado na captura de tela a seguir:

    Criar o certificado para a ID do aplicativo

  8. Selecione se você deseja usar um certificado de Desenvolvimento ou Produção:

    Selecione um certificado de Desenvolvimento ou Produção

  9. E, em seguida, selecione a nova ID do aplicativo que acabamos de criar:

    Selecione a nova ID do aplicativo recém-criada

  10. Isso exibirá instruções que o guiarão pelo processo de criação de uma Solicitação de Assinatura de Certificado usando o aplicativo Acesso às Chaves no Mac.

  11. Agora que o certificado foi criado, ele deve ser usado como parte do processo de compilação para assinar o aplicativo para que ele possa se registrar com APNs. Isso requer a criação e instalação de um perfil de provisionamento que use o certificado.

  12. Para criar um perfil de provisionamento de desenvolvimento, navegue até a seção Perfis de provisionamento e siga as etapas para criá-lo, usando a ID do aplicativo que acabamos de criar.

  13. Depois de criar o perfil de provisionamento, abra o Xcode Organizer e atualize-o. Se o perfil de provisionamento que você criou não aparecer, pode ser necessário baixá-lo do Portal de Provisionamento do iOS e importá-lo manualmente. A captura de tela a seguir mostra um exemplo do Organizador com o perfil de provisionamento adicionado:
    Esta captura de tela mostra um exemplo do Organizador com o perfil de provisionamento adicionado

  14. Neste ponto, precisamos configurar o projeto Xamarin.iOS para usar esse perfil de provisionamento recém-criado. Isso é feito na caixa de diálogo Opções do Projeto, na guia Assinatura de Pacote do iOS, conforme mostrado na captura de tela a seguir:
    Configurar o projeto Xamarin.iOS para usar esse perfil de provisionamento recém-criado

Neste ponto, o aplicativo está configurado para funcionar com notificações por push. No entanto, ainda há mais algumas etapas necessárias com o certificado. Esse certificado está no formato DER que não é compatível com o PushSharp, que requer um certificado PKCS12 (Personal Information Exchange). Para converter o certificado para que ele seja utilizável pelo PushSharp, execute estas etapas finais:

  1. Baixe o arquivo de certificado - Faça login no Portal de Provisionamento do iOS, escolha a guia Certificados, selecione o certificado associado ao perfil de provisionamento correto e escolha Baixar .
  2. Open Keychain Access - Esta é uma interface GUI para o sistema de gerenciamento de senhas no OS X.
  3. Importar o Certificado - Se o certificado ainda não estiver instalado, Arquivo... Importar itens do menu Acesso às chaves . Navegue até o certificado exportado acima e selecione-o.
  4. Exportar o Certificado - Expanda o certificado para que a chave privada associada fique visível, clique com o botão direito do mouse na chave e escolha Exportar. Você será solicitado a fornecer um nome de arquivo e uma senha para o arquivo exportado.

Neste ponto, estamos acabados com os certificados. Criamos um certificado que será usado para assinar aplicativos iOS e convertemos esse certificado para um formato que pode ser usado com o PushSharp em um aplicativo de servidor. Em seguida, vamos ver como os aplicativos iOS interagem com o APNS.

Registrando-se no APNS

Antes que um aplicativo iOS possa receber notificação remota, ele deve se registrar no APNS. O APNS gerará um token de dispositivo exclusivo e o retornará ao aplicativo iOS. O aplicativo iOS pegará o token do dispositivo e, em seguida, se registrará no servidor de aplicativos. Quando tudo isso acontecer, o registro será concluído e o servidor de aplicativos poderá enviar notificações por push para o dispositivo móvel.

Em teoria, o token do dispositivo pode mudar cada vez que um aplicativo iOS se registra no APNS, no entanto, na prática, isso não acontece com tanta frequência. Como uma otimização, um aplicativo pode armazenar em cache o token de dispositivo mais recente e atualizar o servidor de aplicativos somente quando ele for alterado. O diagrama a seguir ilustra o processo de registro e obtenção de um token de dispositivo:

Este diagrama ilustra o processo de registro e obtenção de um token de dispositivo

O registro com o APNS é manipulado FinishedLaunching no método da classe de representante do aplicativo chamando RegisterForRemoteNotificationTypes o objeto atual UIApplication . Quando um aplicativo iOS se registra no APNS, ele também deve especificar quais tipos de notificações remotas ele gostaria de receber. Esses tipos de notificação remota são declarados na enumeração UIRemoteNotificationType. O trecho de código a seguir é um exemplo de como um aplicativo iOS pode se registrar para receber notificações remotas de alerta e selo:

if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
    var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
                       UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                       new NSSet ());

    UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
    UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
    UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
    UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}

A solicitação de registro do APNS acontece em segundo plano - quando a resposta for recebida, o iOS chamará o AppDelegate método RegisteredForRemoteNotifications na classe e passará o token do dispositivo registrado. O token estará contido em um NSData objeto. O trecho de código a seguir mostra como recuperar o token de dispositivo fornecido pelo APNS:

public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
    // Get current device token
    var DeviceToken = deviceToken.Description;
    if (!string.IsNullOrWhiteSpace(DeviceToken)) {
        DeviceToken = DeviceToken.Trim('<').Trim('>');
    }

    // Get previous device token
    var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");

    // Has the token changed?
    if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
    {
        //TODO: Put your own logic here to notify your server that the device token has changed/been created!
    }

    // Save new device token
    NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}

Se o registro falhar por algum motivo (como o dispositivo não estiver conectado à Internet), o iOS chamará FailedToRegisterForRemoteNotifications a classe delegada do aplicativo. O trecho de código a seguir mostra como exibir um alerta para o usuário informando que o registro falhou:

public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
    new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}

Limpeza de token de dispositivo

Os tokens de dispositivo expirarão ou serão alterados com o tempo. Devido a esse fato, os aplicativos de servidor precisarão fazer alguma limpeza doméstica e limpar esses tokens expirados ou alterados. Quando um aplicativo envia como notificação por push para um dispositivo que tem um token expirado, o APNS registrará e salvará esse token expirado. Os servidores podem, então, consultar o APNS para descobrir quais tokens expiraram.

O APNS usado para fornecer um Serviço de Comentários - um ponto de extremidade HTTPS que se autentica por meio do certificado criado para enviar notificações por push e envia dados sobre quais tokens expiraram. Isso foi preterido pela Apple e removido.

Em vez disso, há um novo código de status HTTP para o caso que foi relatado anteriormente pelo Serviço de Comentários:

410 - O token do dispositivo não está mais ativo para o tópico.

Além disso, uma nova timestamp chave de dados JSON estará no corpo da resposta:

Se o valor no cabeçalho :status for 410, o valor dessa chave será a última vez em que os APNs confirmaram que o token de dispositivo não era mais válido para o tópico.

Pare de enviar notificações por push até que o dispositivo registre um token com um carimbo de data/hora posterior com seu provedor.

Resumo

Esta seção apresenta os principais conceitos relacionados às notificações por push no iOS. Ele explicou o papel do Apple Push Notification Gateway Service (APNS). Em seguida, abordou a criação e o uso dos certificados de segurança que são essenciais para o APNS. Finalmente, este documento terminou com uma discussão sobre como os servidores de aplicativos podem usar o Feedback Services para parar de rastrear tokens de dispositivo expirados.