Tutorial: Enviar notificações por push para aplicativos Xamarin.Android usando os Hubs de Notificação

Visão geral

Observação

Para obter informações sobre as etapas de substituição e migração do Firebase Cloud Messaging, confira Migração do Google Firebase Cloud Messaging.

Este tutorial mostra como usar os Hubs de Notificação do Azure para enviar notificações por push para um aplicativo Xamarin.Android. Você cria um aplicativo Xamarin.Android em branco que recebe notificações por push usando o FCM (Firebase Cloud Messaging). Você usa 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ê deve executar as seguintes etapas:

  • Criar um projeto de Firebase e habilitar Firebase Cloud Messaging
  • Criar um hub de notificação
  • Criar um aplicativo Xamarin.Android e conectar-se ao hub de notificação
  • Enviar notificações por push de teste do portal do Azure

Pré-requisitos

Criar um projeto de Firebase e habilitar Firebase Cloud Messaging

  1. Faça logon no console do Firebase. Crie um novo projeto do Firebase se você ainda não tiver um.

  2. Depois de criar seu projeto, selecione Adicionar Firebase ao seu aplicativo Android.

    Add Firebase to your Android app

  3. Siga estas etapas na página Adicionar Firebase ao seu aplicativo Android:

    1. Para o nome do pacote do Android, insira um nome para o pacote. Por exemplo: tutorials.tutoria1.xamarinfcmapp.

      Specify the package name

    2. Selecione Registrar aplicativo.

    3. Selecione Baixar google-services.json. Em seguida, salve o arquivo na pasta do projeto e selecione Avançar. Se ainda não criou o projeto do Visual Studio, poderá realizar essa etapa depois de criar o projeto.

      Download google-services.json

    4. Selecione Avançar.

    5. Selecione Ignorar esta etapa.

      Skip the last step

  4. No console do Firebase, selecione a engrenagem para seu projeto. Em seguida, selecione Configurações do Projeto.

    Select Project Settings

  5. Se você ainda não baixou o arquivo google-services.json, é possível fazer isso nesta página.

    Download google-services.json from the General tab

  6. Mude para a guia Mensagens de Nuvem na parte superior. Copie e salve a Chave do servidor para uso posterior. Você usará esse valor para configurar o hub de notificação.

    Copy server key

Criar um hub de notificação

  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.

Configurar as definições do GCM/FCM para o hub de notificação

  1. Selecione Google (GCM/FCM) na seção Configurações no menu à esquerda.

  2. Insira a chave do servidor que você anotou do Google Firebase Console.

  3. Selecione Salvar na barra de ferramentas.

    Screenshot of Notification Hub in Azure Portal with Google G C M F C M option highlighted and outlined in red.

Seu hub de notificação está configurado para funcionar com o FCM e você tem as cadeias de conexão para registrar o aplicativo para receber notificações e enviar notificações por push.

Criar um aplicativo Xamarin.Android e conectá-lo ao hub de notificação

Criar um projeto do Visual Studio e adicionar pacotes NuGet

Observação

As etapas documentadas neste tutorial são para o Visual Studio 2017.

  1. No Visual Studio, abra o menu Arquivo, selecione Novo e, em seguida, Projeto. Na janela Novo Projeto, execute estas etapas:

    1. Expanda Instalado, Visual C# e clique em Android.

    2. Selecione aplicativo Android (Xamarin) na lista.

    3. Insira um nome para o projeto.

    4. Selecione um local para o projeto.

    5. Selecione OK

      New Project dialog

  2. Na caixa de diálogo Novo aplicativo Android, selecione Aplicativo em branco e selecione OK.

    Screenshot that highlights the Blank App template.

  3. Na janela do Gerenciador de Soluções, expanda Propriedadese clique em AndroidManifest.xml. Atualize o nome do pacote para corresponder ao nome do pacote inserido ao adicionar Firebase Cloud Messaging ao seu projeto no Google Firebase Console.

    Package name in GCM

  4. Defina a versão de destino do Android para o projeto como Android 10.0 seguindo estas etapas:

    1. Clique com o botão direito do mouse no projeto e selecione Propriedades.
    2. Para o campo Compilar usando a versão do Android: (estrutura de destino) , selecione Android 10.0.
    3. Selecione Sim na caixa de mensagem para continuar com a alteração da estrutura de destino.
  5. Adicione os pacotes NuGet necessários ao projeto seguindo estas etapas:

    1. Clique o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet... .

    2. Alterne para a guia Instalado, selecione Xamarin.Android.Support.Design e selecione Atualizar no painel direito para atualizar o pacote para a versão mais recente.

    3. Alterne para a guia Procurar. Pesquise por Xamarin.GooglePlayServices.Base. Selecione Xamarin.GooglePlayServices.Base na lista de resultados. Em seguida, selecione Instalar.

      Google Play Services NuGet

    4. Na janela do Gerenciador de Pacotes do NuGet, pesquise por Xamarin.Firebase.Messaging. Selecione Xamarin.Firebase.Messaging na lista de resultados. Em seguida, selecione Instalar.

    5. Agora, pesquise por Xamarin.Azure.NotificationHubs.Android. Selecione Xamarin.Azure.NotificationHubs.Android na lista de resultados. Em seguida, selecione Instalar.

Adicione o arquivo JSON de Serviços do Google

  1. Copie o arquivo google-services.json que você baixou do Google Firebase Console para a pasta do projeto.

  2. Adicione google-services.json ao projeto.

  3. Selecione google-services.json na janela Gerenciador de Soluções.

  4. No painel Propriedades, defina a ação de compilação como GoogleServicesJson. Se você não vir GoogleServicesJson, feche o Visual Studio, reinicialize-o, reabra o projeto e tente novamente.

    GoogleServicesJson build action

Configurar hubs de notificação em seu projeto

Registrando com o Firebase Cloud Messaging

  1. Se você estiver fazendo a migração do Google Cloud Messaging para o Firebase, o arquivo AndroidManifest.xml do projeto poderá conter uma configuração desatualizada do GCM, o que poderá causar a duplicação de notificação. Edite o arquivo e remova as seguintes linhas dentro da seção <application>, se presente:

    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
        android:exported="false" />
    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>
    
  2. Adicione as seguintes instruções antes do elemento do aplicativo.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    
  3. Colete as informações a seguir para o aplicativo Android e o hub de notificação:

    • Escutar cadeia de conexão: no painel, no Azure portal, escolha Exibir cadeias de conexão. Copie a cadeia de conexão DefaultListenSharedAccessSignature para esse valor.
    • Nome do hub: nome do seu hub no Azure portal. Por exemplo, mynotificationhub2.
  4. Na janela Gerenciador de Soluções, clique com o botão direito do mouse no projeto, selecione Adicionar e, em seguida, Classe.

  5. Crie uma classe Constants.cs para seu projeto Xamarin e defina os valores de constantes a seguir na classe. Substitua os espaços reservados pelos seus valores.

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. Adicione o seguinte usando as instruções para MainActivity.cs:

    using WindowsAzure.Messaging.NotificationHubs;
    
  7. Adicione as seguintes propriedades à classe MainActivity:

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
    
  8. No MainActivity.cs, adicione o seguinte código a OnCreate após base.OnCreate(savedInstanceState):

    // Listen for push notifications
    NotificationHub.SetListener(new AzureListener());
    
    // Start the SDK
    NotificationHub.Start(this.Application, HubName, ConnectionString);
    
  9. Adicione uma classe denominada AzureListener ao projeto.

  10. Adicione o seguinte usando as instruções para AzureListener.cs.

    using Android.Content;
    using WindowsAzure.Messaging.NotificationHubs;
    
  11. Adicione o código acima da declaração de classe e faça com que a classe herde de Java.Lang.Object e implemente o INotificationListener:

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. Adicione o código a seguir à classe AzureListener para processar as mensagens recebidas.

        public void OnPushNotificationReceived(Context context, INotificationMessage message)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
            var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID);
    
            notificationBuilder.SetContentTitle(message.Title)
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentText(message.Body)
                        .SetAutoCancel(true)
                        .SetShowWhen(false)
                        .SetContentIntent(pendingIntent);
    
            var notificationManager = NotificationManager.FromContext(this);
    
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    
  13. Compile o seu novo projeto.

  14. Executar aplicativo no dispositivo ou emulador carregado

Enviar notificação por push de teste do portal do Azure

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 são geralmente enviadas em um serviço back-end, como Serviços Móveis ou ASP.NET, por meio de uma biblioteca compatível. Se uma biblioteca não estiver disponível para o 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 Android registrados com o back-end. Para saber como enviar notificações por push para dispositivos Android específicos, vá para o tutorial a seguir: