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

Crear un proyecto de Firebase y habilitar Firebase Cloud Messaging

  1. Inicie sesión en la consola Firebase. Si aún no tiene uno, cree un nuevo proyecto de Firebase.

  2. Después de crear el proyecto, seleccione Add Firebase to your Android app (Añade Firebase a tu aplicación de Android).

    Add Firebase to your Android app

  3. En la página Add Firebase to your Android app (Agregar Firebase a la aplicación Android), haga lo siguiente:

    1. En Android package name (Nombre del paquete Android), escriba un nombre para el paquete. Por ejemplo: tutorials.tutoria1.xamarinfcmapp.

      Specify the package name

    2. Seleccione Registrar aplicación.

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

      Download google-services.json

    4. Seleccione Siguiente.

    5. Seleccione Skip this step (Omitir este paso).

      Skip the last step

  4. En la consola Firebase, seleccione el icono de la rueda dentada del proyecto. Luego, seleccione Project Settings (Configuración del proyecto).

    Select Project Settings

  5. Si no ha descargado el archivo google-services.json, puede hacerlo en esta página.

    Download google-services.json from the General tab

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

    Copy server key

Creación de un centro de notificaciones

  1. Inicie sesión en Azure Portal.

  2. Seleccione Todos los servicios en el menú de la izquierda. A screenshot showing select All Services for an existing namespace.

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

    A screenshot showing how to filter for notification hubs.

  4. En la página Notification Hubs, seleccione Crear en la barra de herramientas.

    A screenshot showing how to create a new notification hub.

  5. En la pestaña Básico de la página Centro de notificaciones, siga estos pasos:

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

    2. Escriba un nombre único para el nuevo espacio de nombres en Detalles del espacio de nombres.

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

    4. Seleccione un valor en el cuadro de lista desplegable Ubicación. Este valor especifica la ubicación en la que quiere crear el centro.

      Screenshot showing notification hub details.

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

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

      Screenshot showing availability zone details.

    7. Seleccione Crear.

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

  1. Seleccione Google (GCM/FCM) en la sección Configuración en el menú de la izquierda.

  2. Escriba la clave de servidor que anotó en Google Firebase Console.

  3. Seleccione Guardar en la barra de herramientas.

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

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.

  1. En Visual Studio, en el menú Archivo, seleccione Nuevo y, después, Proyecto. En la ventana Nuevo proyecto, siga estos pasos:

    1. Expanda Instalado, Visual C# y haga clic en Android.

    2. Seleccione Aplicación de Android (Xamarin) en la lista.

    3. Escriba un nombre para el proyecto.

    4. Seleccione una ubicación para el proyecto.

    5. Seleccione Aceptar.

      New Project dialog

  2. En el cuadro de diálogo New Android App (Nueva aplicación de Android), seleccione Blank App (Aplicación vacía) y seleccione Aceptar.

    Screenshot that highlights the Blank App template.

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

    Package name in GCM

  4. Establezca la versión de Android de destino del proyecto enAndroid 10.0 siguiendo estos pasos:

    1. Haga clic con el botón derecho en el proyecto y seleccione Propiedades.
    2. En el campo Compilar mediante la versión de Android: (plataforma de destino) , seleccione Android 10.0.
    3. Seleccione en el cuadro de mensaje para continuar con el cambio de versión de la plataforma de destino.
  5. Agregue los paquetes de NuGet necesarios al proyecto siguiendo estos pasos:

    1. Haga clic con el botón derecho en el proyecto y seleccione Administrar paquetes NuGet...

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

    3. Cambie a la pestaña Examinar. Busque Xamarin.GooglePlayServices.Base. Seleccione Xamarin.GooglePlayServices.Base en la lista de resultados. Luego, seleccione Instalar.

      Google Play Services NuGet

    4. En la ventana Administrador de paquetes NuGet, busque Xamarin.Firebase.Messaging. Seleccione Xamarin.Firebase.Messaging en la lista de resultados. Luego, seleccione Instalar.

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

  1. Copie el archivo google-services.json que ha descargado de Google Firebase Console a la carpeta del proyecto.

  2. Agregue google-services.json al proyecto.

  3. Seleccione google-services.json en la ventana Explorador de soluciones.

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

    GoogleServicesJson build action

Configuración de los centros de notificaciones en su proyecto

Registro en Firebase Cloud Messaging

  1. 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>
    
  2. 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"/>
    
  3. 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.
  4. En la ventana Explorador de soluciones, haga clic con el botón derecho en el proyecto, seleccione Agregar y, después, Clase.

  5. 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>";
    }
    
  6. Agregue las siguientes instrucciones using a MainActivity.cs:

    using WindowsAzure.Messaging.NotificationHubs;
    
  7. Agregue las siguientes propiedades a la clase MainActivity:

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
    
  8. En MainActivity.cs, agregue el siguiente código a OnCreate después de base.OnCreate(savedInstanceState):

    // Listen for push notifications
    NotificationHub.SetListener(new AzureListener());
    
    // Start the SDK
    NotificationHub.Start(this.Application, HubName, ConnectionString);
    
  9. Agregue una clase denominada AzureListener al proyecto.

  10. Agregue las siguientes instrucciones using a AzureListener.cs.

    using Android.Content;
    using WindowsAzure.Messaging.NotificationHubs;
    
  11. Agregue lo siguiente sobre la declaración de clase y haga que la clase herede de Java.Lang.Object e implemente INotificationListener:

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. 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());
        }
    
  13. Compile el proyecto.

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

Azure portal - Test Send

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: