Tutorial: Enviar notificações por push a aplicativos Xamarin.iOS usando os Hubs de Notificação do Azure

Visão geral

Este tutorial mostra como usar os Hubs de Notificação do Azure para enviar notificações por push para um aplicativo iOS. Você cria um aplicativo Xamarin.iOS em branco que recebe notificações por push usando o serviço APN (Apple Push Notification).

Ao finalizar, você poderá usar seu hub de notificação para transmitir notificações por push a todos os dispositivos que executam seu aplicativo. O código concluído está disponível na amostra do aplicativo NotificationHubs.

Neste tutorial, você cria/atualiza o código para executar as seguintes tarefas:

  • Gerar o arquivo de solicitação de assinatura de certificado
  • Registrar seu aplicativo para notificações por push
  • Criar um perfil de provisionamento para o aplicativo
  • Configurar o hub de notificação para notificações por push do iOS
  • Enviar notificações por push de teste

Pré-requisitos

  • Assinatura do Azure. Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

  • Versão mais recente do Xcode

  • Um dispositivo compatível com o iOS 10 (ou versão posterior)

  • Programa de Desenvolvedores de iOS

  • Visual Studio para Mac

    Observação

    Devido aos requisitos de configuração das notificações por push do iOS, você deve implantar e testar o aplicativo de exemplo em um dispositivo iOS físico (iPhone ou iPad) em vez do simulador.

A conclusão deste tutorial é um pré-requisito para todos os outros tutoriais sobre Hubs de Notificação para aplicativos Xamarin.iOS.

Gerar o arquivo de solicitação de assinatura de certificado

O APNs (Serviço de Notificação por Push da Apple) usa certificados para autenticar suas notificações por push. Siga estas instruções para criar o certificado de push necessário para enviar e receber notificações. Para obter mais informações sobre esses conceitos, consulte a documentação oficial do Apple Push Notification Service.

Gere o arquivo CSR (Solicitação de Assinatura de Certificado), usado pela Apple para gerar um certificado de push assinado.

  1. Em seu Mac, execute a ferramenta Acesso do Conjunto de Chaves. Ela pode ser aberta na pasta Utilitários ou na pasta Outros no Launchpad.

  2. Selecione Acesso do Conjunto de Chaves, expanda Assistente de Certificado e selecione Solicitar um Certificado de uma Autoridade de Certificação.

    Use Keychain Access to request a new certificate

    Observação

    Por padrão, o Acesso às Chaves seleciona o primeiro item na lista. Isso pode ser um problema se você estiver na categoria Certificados e a Autoridade de Certificação de Relacionamentos do Desenvolvedor Mundial da Apple não for o primeiro item da lista. Verifique se você tem um item não chave ou se a chave Autoridade de Certificação de Relacionamentos do Desenvolvedor Mundial da Apple está selecionada antes de gerar o CSR (Solicitação de Assinatura de Certificado).

  3. Selecione seu Endereço de Email do Usuário, insira o valor do seu Nome Comum, verifique se você especificou Salvo em disco e, em seguida, selecione Continuar. Deixe Endereço de Email de AC em branco, pois isso não é necessário.

    Required certificate information

  4. Insira um nome para o arquivo CSR em Salvar Como, selecione o local em Onde e, em seguida, selecione Salvar.

    Choose a file name for the certificate

    Essa ação salva o arquivo CSR no local selecionado. O local padrão é a área de trabalho. Lembre-se do local escolhido para o arquivo.

Em seguida, registre seu aplicativo na Apple, habilite as notificações por push e carregue o CSR exportado para criar um certificado de push.

Registrar seu aplicativo para notificações por push

Para enviar notificações por push para um aplicativo iOS, registre seu aplicativo na Apple e também registre-se para notificações por push.

  1. Se você ainda não tiver registrado seu aplicativo, navegue até o Portal de provisionamento iOS no Apple Developer Center. Conecte-se ao portal com sua ID da Apple e selecione Identificadores. Em seguida, selecione + para registrar um novo aplicativo.

    iOS Provisioning Portal App IDs page

  2. Na tela Registrar um Novo Identificador, selecione o botão de opção IDs do Aplicativo. Depois selecione Continuar.

    iOS Provisioning Portal register new ID page

  3. Atualize os três valores a seguir para o novo aplicativo e selecione Continuar:

    • Descrição: Digite um nome descritivo para o seu aplicativo.

    • ID do Pacote: Digite uma ID do Pacote no formulário Identificador da Organização.Nome do Produto conforme mencionado no Guia de Distribuição de Aplicativos. Os valores Identificador de Organização e Nome do Produto deverão corresponder ao identificador da organização e o nome do produto usados quando você criar seu projeto Xcode. Na captura de tela abaixo, o valor NotificationHubs é usado como um identificador de organização e o valor GetStarted é usado como o nome do produto. Verifique se o valor de Identificador de Pacote corresponde ao valor em seu projeto do Xcode, para que o Xcode use o perfil de publicação correto.

      iOS Provisioning Portal register app ID page

    • Notificações por Push: Marque a opção Notificações por Push na seção Funcionalidades.

      Form to register a new App ID

      Essa ação gerará sua ID do Aplicativo e solicitará que você confirme as informações. Selecione Continuar e, em seguida, selecione Registrar para confirmar a nova ID do Aplicativo.

      Confirm new App ID

      Depois de selecionar Registrar, você verá a nova ID do Aplicativo como um item de linha na página Certificados, Identificadores e Perfis.

  4. Na página Certificados, Identificadores e Perfis, em Identificadores, localize o item de linha da ID do Aplicativo que você acabou de criar e selecione sua linha para exibir a tela Editar sua Configuração de ID do Aplicativo.

Criar um certificado para os Hubs de Notificação

Um certificado é necessário para habilitar que o hub de notificação funcione com APNs. Isso pode ser feito de duas maneiras:

  1. Crie um .p12 que possa ser carregado diretamente no Hub de Notificação.
  2. Crie um .p8 que possa ser usado para a autenticação baseada em token (abordagem mais recente).

A abordagem mais recente tem vários benefícios (em comparação ao uso de certificados), conforme documentado em Autenticação baseada em token (HTTP/2) para APNs. No entanto, foram fornecidas etapas para ambas as abordagens.

OPÇÃO UM: Crie um certificado push .p12 que possa ser carregado diretamente no Hub de Notificação

  1. Role para baixo até a opção marcada Notificações por Push e, em seguida, selecione Configurar para criar o certificado.

    Edit App ID page

  2. A janela Certificados SSL do Apple Push Notification service é exibida. Selecione o botão Criar Certificado na seção Certificado SSL de Desenvolvimento.

    Create certificate for App ID button

    A tela Criar um novo Certificado é exibida.

    Observação

    Este tutorial usa um certificado de desenvolvimento, que seu aplicativo usa para gerar um token de dispositivo exclusivo. O mesmo processo é usado para registrar um certificado de produção. Use o mesmo tipo de certificado ao enviar notificações.

  3. Selecione Escolher Arquivo, navegue até o local em que salvou o arquivo CSR da primeira tarefa e clique duas vezes no nome do certificado para carregá-lo. Depois selecione Continuar.

  4. Depois que o portal cria o certificado, selecione o botão Baixar. Salve o certificado e lembre-se do local em que ele foi salvo.

    Generated certificate download page

    O certificado é baixado e salvo no seu computador, na pasta Downloads.

    Locate certificate file in the Downloads folder

    Observação

    Por padrão, o certificado de desenvolvimento baixado é denominado aps_development.cer.

  5. Clique duas vezes no certificado de push baixado, aps_development.cer. Essa ação instala o novo certificado no conjunto de chaves, conforme mostrado na seguinte imagem:

    Keychain access certificates list showing new certificate

    Observação

    Embora o nome em seu certificado possa ser diferente, esse nome será prefixado com Serviços de Notificação por Push do iOS para Desenvolvimento da Apple.

  6. No Acesso ao Conjunto de Chaves, clique com o botão direito do mouse no novo certificado push criado na categoria Certificados . Selecione Exportar, nomeie o arquivo, selecione o formato .p12 e selecione Salvar.

    Export certificate as p12 format

    Você pode optar por proteger o certificado com uma senha, mas isso é opcional. Clique em OK caso deseje ignorar a criação de senha. Anote o nome do arquivo e o local do certificado .p12 exportado. Eles são usados para habilitar a autenticação com APNs.

    Observação

    O nome e o local do arquivo. p12 podem ser diferentes do que foi mostrado neste tutorial.

OPÇÃO DOIS: Crie um certificado .p8 que possa ser usado para a autenticação baseada em token

  1. Anote os seguintes detalhes:

    • O Prefixo da ID do Aplicativo (é uma ID da Equipe)
    • ID do Pacote
  2. Novamente em Certificados, Identificadores e Perfis, clique em Chaves.

    Observação

    Caso já tenha uma chave configurada para APNs, você pode usar novamente o certificado .p8 que você baixou logo depois de criá-lo. Nesse caso, você pode ignorar desde a etapa 3 até a 5.

  3. Clique no botão + (ou no botão Criar uma chave) para criar uma chave.

  4. Forneça um valor de Nome de Chave adequado, marque a opção APNs (Apple Push Notifications service) e clique em Continuar e, em seguida, em Registrar na próxima tela.

  5. Clique em Baixar, mova o arquivo .p8 (prefixado com AuthKey_ ) para um diretório local seguro e clique em Concluído.

    Observação

    Verifique se o arquivo .p8 está em um local seguro (e salve um backup). Após o download da chave, não é possível baixá-la novamente, pois a cópia do servidor é removida.

  6. Em Chaves, clique na chave que você acabou de criar (ou em uma já existente caso você tenha optado por usá-la em vez disso).

  7. Anote o valor da ID da Chave.

  8. Abra o certificado .p8 em um aplicativo de sua escolha, como o Visual Studio Code, e anote o valor da chave. Esse é o valor entre -----BEGIN PRIVATE KEY----- e -----END PRIVATE KEY----- .

    -----BEGIN PRIVATE KEY-----
    <key_value>
    -----END PRIVATE KEY-----
    

    Observação

    Esse é o valor do token que será usado mais tarde para configurar o Hub de Notificação.

No final dessas etapas, você deveria ter as seguintes informações para uso posterior em Configurar o hub de notificação com informações de APNs:

  • A ID da Equipe (veja a etapa um)
  • A ID do Pacote (veja a etapa um)
  • A ID da Chave (veja a etapa sete)
  • O Valor do token, ou seja, o valor da chave .p8 (veja a etapa oito)

Criar um perfil de provisionamento para o aplicativo

  1. Retorne ao Portal de Provisionamento do iOS, selecione Certificados, Identificadores e Perfis, selecione Perfis no menu à esquerda e selecione + para criar um novo perfil. A tela Registrar um Novo Perfil de Provisionamento é exibida.

  2. Selecione Desenvolvimento de Aplicativos do iOS em Desenvolvimento como o tipo de perfil de provisionamento e selecione Continuar.

    Provisioning profile list

  3. Em seguida, selecione a ID do aplicativo que você criou na lista suspensa ID do Aplicativo e selecione Continuar.

    Select the App ID

  4. Na janela Selecionar certificados, selecione o certificado de desenvolvimento que você usa para assinatura de código e selecione Continuar. Esse certificado não é o certificado push que você criou. Se não houver um, você deverá criá-lo. Se houver um certificado, pule para a próxima etapa. Para criar um certificado de desenvolvimento, caso não exista um:

    1. Se você vir Nenhum certificado disponível, selecione Criar Certificado.
    2. Na seção Software, selecione Desenvolvimento da Apple. Depois selecione Continuar.
    3. Na tela Criar um Novo Certificado, selecione Escolher Arquivo.
    4. Navegue até o certificado Solicitação de Assinatura de Certificado criado anteriormente, selecione-o e, em seguida, selecione Abrir.
    5. Selecione Continuar.
    6. Baixe o certificado de desenvolvimento e lembre-se do local em que ele foi salvo.
  5. Retorne à página Certificados, Identificadores e Perfis, selecione Perfis no menu à esquerda e selecione + para criar um novo perfil. A tela Registrar um Novo Perfil de Provisionamento é exibida.

  6. Na janela Selecionar certificados, selecione o certificado de desenvolvimento que você acabou de criar. Depois selecione Continuar.

  7. Em seguida, selecione os dispositivos a serem usados para teste e selecione Continuar.

  8. Por fim, escolha um nome para o perfil em Nome do Perfil de Provisionamento e selecione Gerar.

    Choose a provisioning profile name

  9. Quando o novo perfil de provisionamento for criado, selecione Baixar. Lembre-se do local em que ele foi salvo.

  10. Navegue até o local do perfil de provisionamento e clique duas vezes nele para instalá-lo em seu computador de desenvolvimento do Xcode.

Criar um hub de notificação

Nesta seção, você cria um hub de notificação e configura a autenticação com APNs usando ou o certificado push .p12 ou a autenticação baseada em token. Se você quiser usar um hub de notificação já criado, passe diretamente à etapa 5.

  1. Entre no portal do Azure.

  2. Selecione Todos os serviços no menu esquerdo. A screenshot showing select All Services for an existing namespace.

  3. Digite Hubs de Notificação na caixa de texto Filtrar serviços. Selecione o ícone de estrela ao lado do nome do serviço para adicionar o serviço na seção FAVORITOS no menu à esquerda. Selecione Hubs de Notificação.

    A screenshot showing how to filter for notification hubs.

  4. Na página Hubs de Notificações, selecione Criar na barra de ferramentas.

    A screenshot showing how to create a new notification hub.

  5. Na guia Informações Básicas da página Hub de Notificações, execute as seguintes etapas:

    1. Em Assinatura, selecione o nome da assinatura do Azure que deseja usar e escolha um grupo de recursos existente ou crie um.

    2. Insira um nome exclusivo para o novo namespace em Detalhes do Namespace.

    3. Um namespace contém um ou mais hubs de notificações. Portanto, digite um nome para o hub em Detalhes do Hub de Notificações.

    4. Selecione um valor da caixa de listagem suspensa Local. Esse valor especifica a localização na qual você deseja criar o hub.

      Screenshot showing notification hub details.

    5. Revise a opção Zonas de Disponibilidade. Se você escolher uma região que tenha zonas de disponibilidade, a caixa de seleção será marcada por padrão. As Zonas de Disponibilidade são um recurso pago, portanto, um valor adicional será acrescentado à sua camada de serviço.

    6. Escolha uma opção de Recuperação de desastre: Nenhuma, Região de recuperação emparelhada ou Região de recuperação flexível. Se você escolher Região de recuperação emparelhada, a região de failover será exibida. Se você selecionar Região de recuperação flexível, use a lista suspensa para escolher entre uma lista de regiões de recuperação.

      Screenshot showing availability zone details.

    7. Selecione Criar.

  6. Após a conclusão da implantação, selecione Ir para o recurso.

Configure seu hub de notificação com as informações de APNs

Em Serviços de Notificação, selecione Apple (APNS) e siga as etapas apropriadas com base na abordagem que você selecionou antes na seção Criar um certificado para os Hubs de Notificação.

Observação

Se você criar seu aplicativo com a App Store ou o perfil de distribuição ad hoc, use Produção para o Modo de Aplicativo. Isso permitirá que seu dispositivo envie notificações por push a usuários que compraram seu aplicativo da loja.

OPÇÃO UM: Usando um certificado push .p12

  1. Selecione Certificado.

  2. Selecione o ícone arquivo.

  3. Selecione o arquivo .p12 que você exportou anteriormente e, em seguida, clique em Abrir.

  4. Caso seja necessário, especifique a senha correta.

  5. Selecione o modo Sandbox.

    Configure APNs certification in Azure portal

  6. Selecione Salvar.

OPÇÃO DOIS: Usando a autenticação baseada em token

  1. Selecione Token.

  2. Insira os seguintes valores que você adquiriu antes:

    • ID da Chave
    • ID do Pacote
    • ID da Equipe
    • Token
  3. Selecione Área restrita

  4. Clique em Salvar.

Agora você configurou seu hub de notificações com APNs. Você também tem as cadeias de conexão para registrar seu aplicativo e enviar notificações por push.

Conectar seu aplicativo ao hub de notificação

Criar um novo projeto

  1. No Visual Studio, crie um novo projeto do iOS e selecione o modelo Aplicativo de Modo de Exibição Único e clique em Avançar

    Visual Studio - Select Application Type

  2. Digite o identificador Nome do Aplicativo e o Organização e clique em Avançar, depois em Criar

  3. Na exibição de Solução, clique duas vezes em Into.plist e em Identidade e verifique se o Identificador de Pacote corresponde ao usado ao criar o perfil de provisionamento. Em assinatura, verifique se sua conta de desenvolvedor está selecionada em Equipe, se "Gerenciar assinatura automaticamente" está selecionado e se seu certificado de autenticação e perfil de provisionamento são selecionados automaticamente.

    Visual Studio- iOS App Config

  4. Na exibição Solução, clique duas vezes em Entitlements.plist e verifique se a opção Habilitar Notificações por Push está marcada.

    Visual Studio- iOS Entitlements Config

  5. Adicione o pacote de Mensagens do Azure. Na exibição Soluções, clique com o botão direito do mouse no projeto e selecione Adicionar>Adicionar Pacotes NuGet. Pesquise por Xamarin.Azure.NotificationHubs.iOS e adicione o pacote ao seu projeto.

  6. Adicione um novo arquivo à classe, nomeie-o com Constants.cs e adicione as seguintes variáveis e substitua os espaços reservados da cadeia de caracteres literal pelo hubname e o DefaultListenSharedAccessSignature que você anotou anteriormente.

    // Azure app-specific connection string and hub path
    public const string ListenConnectionString = "<Azure DefaultListenSharedAccess Connection String>";
    public const string NotificationHubName = "<Azure Notification Hub Name>";
    
  7. No AppDelegate.cs, adicione o seguinte usando a instrução:

    using WindowsAzure.Messaging.NotificationHubs;
    using UserNotifications
    
  8. Crie uma implementação do MSNotificationHubDelegate no AppDelegate.cs:

    public class AzureNotificationHubListener : MSNotificationHubDelegate
    {
        public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
        {
    
        }
    }
    
  9. No AppDelegate.cs, atualize FinishedLaunching() para coincidir com o código a seguir:

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        // Set the Message listener
        MSNotificationHub.SetDelegate(new AzureNotificationHubListener());
    
        // Start the SDK
        MSNotificationHub.Start(ListenConnectionString, NotificationHubName);
    
        return true;
    }
    
  10. Em AppDelegate.cs, implemente o método DidReceivePushNotification para a classe AzureNotificationHubListener:

    public override void DidReceivePushNotification(MSNotificationHub notificationHub, MSNotificationHubMessage message)
    {
        // This sample assumes { aps: { alert: { title: "Hello", body: "World" } } }
        var alertTitle = message.Title ?? "Notification";
        var alertBody = message.Body;
    
        var myAlert = UIAlertController.Create(alertTitle, alertBody, UIAlertControllerStyle.Alert);
        myAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
        UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(myAlert, true, null);
    }
    
  11. Execute o aplicativo em seu dispositivo.

Enviar notificações por push de teste

Você pode testar o recebimento de notificações no aplicativo com a opção Envio de Teste no Azure portal. Isso envia uma notificação por push de teste para seu dispositivo.

Azure portal - Test Send

As notificações por push normalmente são enviadas em um serviço de back-end como Aplicativos Móveis ou ASP.NET usando uma biblioteca compatível. Se uma biblioteca não estiver disponível para o seu back-end, você também poderá usar a API REST diretamente para enviar mensagens de notificação.

Próximas etapas

Neste tutorial, você envia notificações de transmissão para todos os seus dispositivos iOS registrados com o back-end. Para saber como enviar notificações por push para dispositivos iOS específicos, vá para o tutorial a seguir: