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

Descrição geral

Nota

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

Este tutorial mostra como utilizar os Notification Hubs do Azure para enviar notificações push para uma aplicação Xamarin Android. Vai criar uma aplicação Xamarin.Android em branco que recebe notificações push através do Firebase Cloud Messaging (FCM). Pode utilizar o hub de notificação para difundir notificações push para todos os dispositivos a executar a sua aplicação. O código concluído está disponível no exemplo aplicação NotificationHubs.

Neste tutorial, siga os seguintes passos:

  • Criar um projeto do Firebase e ativar o Firebase Cloud Messaging
  • Criar um hub de notificação
  • Criar uma aplicação Xamarin.Android e ligá-la ao hub de notificação
  • Enviar notificações de teste a partir do portal do Azure

Pré-requisitos

Criar um projeto do Firebase e ativar o Firebase Cloud Messaging

  1. Inicie sessão na consola Firebase. Crie um novo projeto Firebase se ainda não tiver um.

  2. Depois de criar o projeto, selecione Adicionar Firebase à aplicação Android.

    Add Firebase to your Android app

  3. Na página Adicionar o Firebase ao seu aplicativo Android, execute as seguintes etapas:

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

      Specify the package name

    2. Selecione Registrar aplicativo.

    3. Selecione Download google-services.json. Em seguida, salve o arquivo na pasta do seu projeto e selecione Avançar. Se você ainda não criou o projeto do Visual Studio, você pode fazer esta etapa depois de criar o projeto.

      Download google-services.json

    4. Selecione Seguinte.

    5. Selecione Ignorar esta etapa.

      Skip the last step

  4. Na consola da Firebase, selecione o cog do seu projeto. Em seguida, selecione Definições do projeto.

    Select Project Settings

  5. Se você não baixou o arquivo google-services.json , você pode baixá-lo nesta página.

    Download google-services.json from the General tab

  6. Mude para o separador Cloud Messaging na parte superior. Copie e salve a chave do servidor para uso posterior. Use esse valor para configurar seu hub de notificação.

    Copy server key

Criar um hub de notificação

  1. Inicie sessão no portal do Azure.

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

  3. Digite Hubs de Notificação na caixa de texto Serviços defiltro . Selecione o ícone de estrela ao lado do nome do serviço para adicionar o serviço à 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ção, selecione Criar na barra de ferramentas.

    A screenshot showing how to create a new notification hub.

  5. Na guia Noções básicas na página Hub de Notificação, execute as seguintes etapas:

    1. Em Subscrição, selecione o nome da subscrição do Azure que pretende utilizar e, em seguida, selecione um grupo de recursos existente ou crie um novo.

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

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

    4. Selecione um valor na caixa de listagem suspensa Local . Esse valor especifica o local no qual você deseja criar o hub.

      Screenshot showing notification hub details.

    5. Reveja 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 uma funcionalidade paga, pelo que é adicionada uma taxa adicional ao seu nível.

    6. Escolha uma opção de recuperação de desastres: 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 em uma lista de regiões de recuperação.

      Screenshot showing availability zone details.

    7. Selecione Criar.

  6. Quando a implantação estiver concluída, selecione Ir para recurso.

Definir configurações de 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 no Google Firebase Console.

  3. Selecione Guardar 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.

O Notification Hub está configurado para trabalhar com FCM e tem as cadeias de ligação para registar a sua aplicação e para receber notificações e enviar notificações push.

Crie um aplicativo Xamarin.Android e conecte-o ao hub de notificação

Criar um projeto do Visual Studio e adicionar pacotes NuGet

Nota

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, selecione Projeto. Na janela Novo projeto, execute estas etapas:

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

    2. Selecione Aplicativo Android (Xamarin) na lista.

    3. Introduza 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 Explorador de Soluções, expanda Propriedades e clique em AndroidManifest.xml. Atualize o nome do pacote para corresponder ao nome do pacote que introduziu ao adicionar o Firebase Cloud Messaging ao seu projeto na consola Google Firebase.

    Package name in GCM

  4. Defina a versão Android de destino 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 com o botão direito do rato no projeto e selecione Gerir 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 Gestor de Pacotes NuGet, procure Xamarin.Firebase.Messaging. Selecione Xamarin.Firebase.Messaging na lista de resultados. Em seguida, selecione Instalar.

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

Adicionar o Ficheiro JSON dos Serviços Google

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

  2. Adicionar 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 não vir GoogleServicesJson, feche o Visual Studio, reinicie-o, reabra o projeto e repita.

    GoogleServicesJson build action

Configurar Notification Hubs no seu projeto

Registar no Firebase Cloud Messaging

  1. Se você estiver migrando do Google Cloud Messaging para o Firebase, o arquivo do AndroidManifest.xml seu projeto pode conter uma configuração de GCM desatualizada, o que pode causar duplicação de notificações. Edite o arquivo e remova as seguintes linhas dentro da <application> seção, se houver:

    <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 application .

    <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. Recolha as seguintes informações para a sua aplicação Android e Notification Hub:

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

  5. Crie uma Constants.cs classe para seu projeto Xamarin e defina os seguintes valores constantes na classe. Substitua os marcadores de posição com os seus valores.

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. Adicione as seguintes instruções using a 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 nomeada AzureListener ao seu projeto.

  10. Adicione as seguintes instruções using a AzureListener.cs.

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

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. Adicione o seguinte código dentro AzureListener da classe, para processar 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. Crie o projeto.

  14. Execute a aplicação no dispositivo ou emulador carregado

Enviar notificação de teste a partir do portal do Azure

Pode testar a receção das notificações na aplicação com a opção Envio de Teste no portal do Azure. Esta ação envia uma notificação push de teste para o dispositivo.

Azure portal - Test Send

Normalmente, as notificações push são enviadas num serviço de back-end, como Mobile Services ou ASP.NET, através de uma biblioteca compatível. Se uma biblioteca não estiver disponível para seu back-end, você também poderá usar a API REST diretamente para enviar mensagens de notificação.

Próximos passos

Neste tutorial, enviou notificações de difusão para todos os dispositivos Android registados no back-end. Para saber como enviar notificações push para dispositivos Android específicos, avance para o tutorial seguinte: