Tutorial: Envío de notificaciones push a aplicaciones de Xamarin.Android mediante Notification Hubs
Información general
Nota:
Para obtener información sobre los pasos de desuso y migración de Firebase Cloud Messaging, consulte Migración de Google Firebase Cloud Messaging.
Este tutorial muestra cómo puede usar Azure Notification Hubs para enviar notificaciones push a una aplicación Xamarin.Android. Cree una aplicación de Xamarin.Android en blanco que reciba notificaciones push mediante Firebase Cloud Messaging (FCM). Use el Centro de notificaciones para difundir notificaciones push a todos los dispositivos que ejecutan la aplicación. El código acabado está disponible en el ejemplo de la aplicación NotificationHubs.
En este tutorial, realizará los siguientes pasos:
- Crear un proyecto de Firebase y habilitar Firebase Cloud Messaging
- Creación de un centro de notificaciones
- Crear una aplicación de Xamarin.Android y conectarla al Centro de notificaciones
- Enviar notificaciones de prueba desde Azure Portal
Requisitos previos
- Suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
- Visual Studio con Xamarin en Windows o Visual Studio para Mac en OS X.
- Cuenta de Google activa
Crear un proyecto de Firebase y habilitar Firebase Cloud Messaging
Inicie sesión en la consola Firebase. Si aún no tiene uno, cree un nuevo proyecto de Firebase.
Después de crear el proyecto, seleccione Add Firebase to your Android app (Añade Firebase a tu aplicación de Android).
En la página Add Firebase to your Android app (Agregar Firebase a la aplicación Android), haga lo siguiente:
En Android package name (Nombre del paquete Android), escriba un nombre para el paquete. Por ejemplo:
tutorials.tutoria1.xamarinfcmapp
.Seleccione Registrar aplicación.
Seleccione Download google-services.json (Descargar google-services.json). A continuación, guarde el archivo en la carpeta del proyecto y seleccione Siguiente. Si aún no ha creado el proyecto de Visual Studio, puede realizar este paso después de crear el proyecto.
Seleccione Siguiente.
Seleccione Skip this step (Omitir este paso).
En la consola Firebase, seleccione el icono de la rueda dentada del proyecto. Luego, seleccione Project Settings (Configuración del proyecto).
Si no ha descargado el archivo google-services.json, puede hacerlo en esta página.
Cambie a la pestaña Cloud Messaging de la parte superior. Copie y guarde la clave del servidor para su uso posterior. Este valor se utilizará para configurar el centro de notificaciones.
Creación de un centro de notificaciones
Inicie sesión en Azure Portal.
Seleccione Todos los servicios en el menú de la izquierda.
Escriba Notification Hubs en el cuadro de texto Filtrar servicios. Seleccione el icono de estrella junto al nombre del servicio para agregarlo a la sección FAVORITOS en el menú de la izquierda. Seleccione Notification Hubs.
En la página Notification Hubs, seleccione Crear en la barra de herramientas.
En la pestaña Básico de la página Centro de notificaciones, siga estos pasos:
En Suscripción, seleccione el nombre de la suscripción de Azure que desea usar y, a continuación, seleccione un grupo de recursos existente o cree uno nuevo.
Escriba un nombre único para el nuevo espacio de nombres en Detalles del espacio de nombres.
Un espacio de nombres contiene uno o varios centros de notificaciones, por lo que debe escribir un nombre para el centro en Detalles del centro de notificaciones.
Seleccione un valor en el cuadro de lista desplegable Ubicación. Este valor especifica la ubicación en la que quiere crear el centro.
Revise la opción Availability Zones. Si elige una región que tiene zonas de disponibilidad, la casilla estará activada de forma predeterminada. Availability Zones es una característica de pago, por lo que se agrega un honorario adicional al nivel.
Elija una opción de Recuperación ante desastres: Ninguna, Región de recuperación emparejada o Región de recuperación flexible. Si elige Región de recuperación emparejada, se mostrará la región de conmutación por error. Si selecciona Región de recuperación flexible, use la lista desplegable para elegir una lista de regiones de recuperación.
Seleccione Crear.
Cuando la implementación se complete, seleccione Ir al grupo de recursos.
Configuración de los valores de GCM/FCM para el Centro de notificaciones
Seleccione Google (GCM/FCM) en la sección Configuración en el menú de la izquierda.
Escriba la clave de servidor que anotó en Google Firebase Console.
Seleccione Guardar en la barra de herramientas.
El centro de notificaciones ya está configurado para funcionar con FCM y dispone de las cadenas de conexión para registrar la aplicación para que reciba notificaciones y para enviar notificaciones push.
Creación de una aplicación de Xamarin.Android y su conexión al centro de notificaciones
Creación de un proyecto de Visual Studio y adición de paquetes NuGet
Nota
Los pasos documentados en este tutorial son para Visual Studio 2017.
En Visual Studio, en el menú Archivo, seleccione Nuevo y, después, Proyecto. En la ventana Nuevo proyecto, siga estos pasos:
Expanda Instalado, Visual C# y haga clic en Android.
Seleccione Aplicación de Android (Xamarin) en la lista.
Escriba un nombre para el proyecto.
Seleccione una ubicación para el proyecto.
Seleccione Aceptar.
En el cuadro de diálogo New Android App (Nueva aplicación de Android), seleccione Blank App (Aplicación vacía) y seleccione Aceptar.
En la ventana del Explorador de soluciones, expanda Propiedadesy haga clic en AndroidManifest.xml. Actualice el nombre del paquete para que coincida con el nombre del paquete que especificó al agregar Firebase Cloud Messaging al proyecto en Google Firebase Console.
Establezca la versión de Android de destino del proyecto enAndroid 10.0 siguiendo estos pasos:
- Haga clic con el botón derecho en el proyecto y seleccione Propiedades.
- En el campo Compilar mediante la versión de Android: (plataforma de destino) , seleccione Android 10.0.
- Seleccione Sí en el cuadro de mensaje para continuar con el cambio de versión de la plataforma de destino.
Agregue los paquetes de NuGet necesarios al proyecto siguiendo estos pasos:
Haga clic con el botón derecho en el proyecto y seleccione Administrar paquetes NuGet...
Vaya a la pestaña Instalado, seleccione Xamarin.Android.Support.Design y Actualizar en el panel derecho para actualizar el paquete a la versión más reciente.
Cambie a la pestaña Examinar. Busque Xamarin.GooglePlayServices.Base. Seleccione Xamarin.GooglePlayServices.Base en la lista de resultados. Luego, seleccione Instalar.
En la ventana Administrador de paquetes NuGet, busque Xamarin.Firebase.Messaging. Seleccione Xamarin.Firebase.Messaging en la lista de resultados. Luego, seleccione Instalar.
Ahora, busque Xamarin.Azure.NotificationHubs.Android. Seleccione Xamarin.Azure.NotificationHubs.Android en la lista de resultados. Luego, seleccione Instalar.
Adición del archivo JSON de Google Services
Copie el archivo
google-services.json
que ha descargado de Google Firebase Console a la carpeta del proyecto.Agregue
google-services.json
al proyecto.Seleccione
google-services.json
en la ventana Explorador de soluciones.En el panel Propiedades, seleccione GoogleServicesJson en Acción de compilación. Si no ve GoogleServicesJson, cierre Visual Studio, vuelva a iniciarlo, vuelva a abrir el proyecto y vuelva a intentarlo.
Configuración de los centros de notificaciones en su proyecto
Registro en Firebase Cloud Messaging
Si va a migrar desde Google Cloud Messaging a Firebase, es posible que el archivo
AndroidManifest.xml
del proyecto contenga una configuración de GCM obsoleta, lo que puede provocar la duplicación de notificaciones. Edite el archivo y quite las líneas siguientes dentro de la sección<application>
, si están presentes:<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>
Agregue las siguientes instrucciones antes del elemento de la aplicación.
<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"/>
Recopile la siguiente información para el centro de notificaciones y la aplicación Android:
- Cadena de conexión de escucha: en el panel de Azure Portal, elija Ver cadenas de conexión. Copie la cadena de conexión
DefaultListenSharedAccessSignature
para este valor. - Nombre del centro: es el nombre del centro en Azure Portal. Por ejemplo, mynotificationhub2.
- Cadena de conexión de escucha: en el panel de Azure Portal, elija Ver cadenas de conexión. Copie la cadena de conexión
En la ventana Explorador de soluciones, haga clic con el botón derecho en el proyecto, seleccione Agregar y, después, Clase.
Cree una clase
Constants.cs
para el proyecto Xamarin y defina los siguientes valores de constante en la clase. Reemplace los marcadores de posición por sus valores.public static class Constants { public const string ListenConnectionString = "<Listen connection string>"; public const string NotificationHubName = "<hub name>"; }
Agregue las siguientes instrucciones using a
MainActivity.cs
:using WindowsAzure.Messaging.NotificationHubs;
Agregue las siguientes propiedades a la clase MainActivity:
internal static readonly string CHANNEL_ID = "my_notification_channel";
En
MainActivity.cs
, agregue el siguiente código aOnCreate
después debase.OnCreate(savedInstanceState)
:// Listen for push notifications NotificationHub.SetListener(new AzureListener()); // Start the SDK NotificationHub.Start(this.Application, HubName, ConnectionString);
Agregue una clase denominada
AzureListener
al proyecto.Agregue las siguientes instrucciones using a
AzureListener.cs
.using Android.Content; using WindowsAzure.Messaging.NotificationHubs;
Agregue lo siguiente sobre la declaración de clase y haga que la clase herede de
Java.Lang.Object
e implementeINotificationListener
:public class AzureListener : Java.Lang.Object, INotificationListener
Agregue el código siguiente dentro de la clase
AzureListener
para procesar los mensajes que se reciban.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()); }
Compile el proyecto.
Ejecute la aplicación en su dispositivo o en el emulador cargado.
Envío de notificaciones de prueba desde Azure Portal
Puede probar de recibir notificaciones en la aplicación con la opción Envío de prueba en Azure Portal. Envía una notificación push de prueba al dispositivo.
Las notificaciones push se envían normalmente en un servicio back-end como Mobile Services o ASP.NET mediante una biblioteca compatible. Si no hay disponible ninguna biblioteca para su back-end, también puede usar la API REST directamente para enviar mensajes de notificación.
Pasos siguientes
En este tutorial se envían las notificaciones de difusión a todos los dispositivos Android registrados con el back-end. Para aprender a enviar notificaciones push a dispositivos Android específicos, pase al siguiente tutorial: