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
- Subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta do Azure gratuita antes de começar.
- Visual Studio com Xamarin no Windows ou Visual Studio para Mac no OS X.
- Conta Google ativa
Criar um projeto do Firebase e ativar o Firebase Cloud Messaging
Inicie sessão na consola Firebase. Crie um novo projeto Firebase se ainda não tiver um.
Depois de criar o projeto, selecione Adicionar Firebase à aplicação Android.
Na página Adicionar o Firebase ao seu aplicativo Android, execute as seguintes etapas:
Para o nome do pacote Android, insira um nome para o pacote. Por exemplo:
tutorials.tutoria1.xamarinfcmapp
.Selecione Registrar aplicativo.
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.
Selecione Seguinte.
Selecione Ignorar esta etapa.
Na consola da Firebase, selecione o cog do seu projeto. Em seguida, selecione Definições do projeto.
Se você não baixou o arquivo google-services.json , você pode baixá-lo nesta página.
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.
Criar um hub de notificação
Inicie sessão no portal do Azure.
Selecione Todos os serviços no menu à esquerda.
Digite Hubs de Notificação na caixa de texto Serviços de filtro . 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.
Na página Hubs de Notificação, selecione Criar na barra de ferramentas.
Na guia Noções básicas na página Hub de Notificação, execute as seguintes etapas:
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.
Insira um nome exclusivo para o novo namespace em Detalhes do namespace.
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.
Selecione um valor na caixa de listagem suspensa Local . Esse valor especifica o local no qual você deseja criar o hub.
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.
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.
Selecione Criar.
Quando a implantação estiver concluída, selecione Ir para recurso.
Definir configurações de GCM/FCM para o hub de notificação
Selecione Google (GCM/FCM)/ na seção Configurações no menu à esquerda.
Insira a chave do servidor que você anotou no Google Firebase Console.
Selecione Guardar na barra de ferramentas.
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.
No Visual Studio, abra o menu Arquivo, selecione Novo e, em seguida, selecione Projeto. Na janela Novo projeto, execute estas etapas:
Expanda Instalado, Visual C# e, em seguida, clique em Android.
Selecione Aplicativo Android (Xamarin) na lista.
Introduza um nome para o projeto.
Selecione um local para o projeto.
Selecione OK
Na caixa de diálogo Novo aplicativo Android, selecione Aplicativo em branco e selecione OK.
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.
Defina a versão Android de destino para o projeto como Android 10.0 seguindo estas etapas:
- Clique com o botão direito do mouse no projeto e selecione Propriedades.
- Para o campo Compilar usando a versão do Android: (Estrutura de destino), selecione Android 10.0.
- Selecione Sim na caixa de mensagem para continuar com a alteração da estrutura de destino.
Adicione os pacotes NuGet necessários ao projeto seguindo estas etapas:
Clique com o botão direito do rato no projeto e selecione Gerir Pacotes NuGet....
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.
Alterne para a guia Procurar. Pesquise por Xamarin.GooglePlayServices.Base. Selecione Xamarin.GooglePlayServices.Base na lista de resultados. Em seguida, selecione Instalar.
Na janela Gestor de Pacotes NuGet, procure Xamarin.Firebase.Messaging. Selecione Xamarin.Firebase.Messaging na lista de resultados. Em seguida, selecione Instalar.
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
Copie o
google-services.json
arquivo que você baixou do Console do Google Firebase para a pasta do projeto.Adicionar
google-services.json
ao projeto.Selecione
google-services.json
na janela Gerenciador de Soluções.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.
Configurar Notification Hubs no seu projeto
Registar no Firebase Cloud Messaging
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>
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"/>
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.
- Escutar a cadeia de ligação: no dashboard, no portal do Azure, escolha Ver cadeias de ligação. Copie a
Na janela Gerenciador de Soluções, clique com o botão direito do mouse em seu projeto, selecione Adicionar e, em seguida, selecione Classe.
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>"; }
Adicione as seguintes instruções using a
MainActivity.cs
:using WindowsAzure.Messaging.NotificationHubs;
Adicione as seguintes propriedades à classe MainActivity:
internal static readonly string CHANNEL_ID = "my_notification_channel";
No
MainActivity.cs
, adicione o seguinte código aOnCreate
apósbase.OnCreate(savedInstanceState)
:// Listen for push notifications NotificationHub.SetListener(new AzureListener()); // Start the SDK NotificationHub.Start(this.Application, HubName, ConnectionString);
Adicione uma classe nomeada
AzureListener
ao seu projeto.Adicione as seguintes instruções using a
AzureListener.cs
.using Android.Content; using WindowsAzure.Messaging.NotificationHubs;
Adicione o seguinte acima de sua declaração de
Java.Lang.Object
classe, e faça com que sua classe herde e implemente oINotificationListener
:public class AzureListener : Java.Lang.Object, INotificationListener
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()); }
Crie o projeto.
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.
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: