Compartir a través de


Adición de notificaciones push a la aplicación de Xamarin.iOS

Información general

En este tutorial, agregará notificaciones push al proyecto de inicio rápido de Xamarin.iOS para que se envíe una notificación push al dispositivo cada vez que se inserte un registro.

Si no usa el proyecto de servidor de inicio rápido descargado, necesitará el paquete de extensión de notificación push. Consulte Trabajar con el SDK del servidor back-end de .NET para Azure Mobile Apps para más información.

Prerrequisitos

Registro de la aplicación para notificaciones push en el portal para desarrolladores de Apple

Configuración de la aplicación móvil para enviar notificaciones push

  1. En el equipo Mac, inicie acceso a llaveros. En la barra de navegación izquierda, en Categoría, abra Mis certificados. Busque el certificado SSL que descargó en la sección anterior y, a continuación, divulga su contenido. Seleccione solo el certificado (no seleccione la clave privada). A continuación, exporta .
  2. En el portal de Azure, seleccione Examinar todo>Servicios de Aplicaciones. A continuación, seleccione el back-end de Mobile Apps.
  3. En Configuración, seleccione Notificaciones Push de App Service. A continuación, seleccione el nombre del centro de notificaciones.
  4. Vaya a Apple Push Notification Services>Cargar Certificado. Cargue el archivo .p12, seleccionando el modo correcto (en función de si el certificado SSL de cliente anterior es de producción o entorno de pruebas). Guarde los cambios.

El servicio ahora está configurado para trabajar con notificaciones push en iOS.

Actualización del proyecto de servidor para enviar notificaciones push

En esta sección, actualizará el código del proyecto de back-end de Mobile Apps existente para enviar una notificación push cada vez que se agregue un nuevo elemento. Este proceso se basa en la característica de plantilla de Azure Notification Hubs, que permite notificaciones multiplataforma. Los distintos clientes se registran para las notificaciones push mediante plantillas, y una única notificación universal puede alcanzar a todas las plataformas cliente.

Elija uno de los procedimientos siguientes que coincida con el tipo de proyecto back-end, ya sea back-end de .NET o Node.js back-end.

Proyecto back-end de .NET

  1. En Visual Studio, haga clic con el botón derecho en el proyecto de servidor. A continuación, seleccione Administrar paquetes NuGet. Busque Microsoft.Azure.NotificationHubsy seleccione Instalar. Este proceso instala la biblioteca de Notification Hubs para enviar notificaciones desde el back-end.

  2. En el proyecto de servidor, abra Controllers>TodoItemController.cs. A continuación, agregue las siguientes sentencias using:

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. En el método PostTodoItem, agregue el código siguiente después de la llamada a InsertAsync:

    // Get the settings for the server project.
    HttpConfiguration config = this.Configuration;
    MobileAppSettingsDictionary settings =
        this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings();
    
    // Get the Notification Hubs credentials for the mobile app.
    string notificationHubName = settings.NotificationHubName;
    string notificationHubConnection = settings
        .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString;
    
    // Create a new Notification Hub client.
    NotificationHubClient hub = NotificationHubClient
    .CreateClientFromConnectionString(notificationHubConnection, notificationHubName);
    
    // Send the message so that all template registrations that contain "messageParam"
    // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations.
    Dictionary<string,string> templateParams = new Dictionary<string,string>();
    templateParams["messageParam"] = item.Text + " was added to the list.";
    
    try
    {
        // Send the push notification and log the results.
        var result = await hub.SendTemplateNotificationAsync(templateParams);
    
        // Write the success result to the logs.
        config.Services.GetTraceWriter().Info(result.State.ToString());
    }
    catch (System.Exception ex)
    {
        // Write the failure result to the logs.
        config.Services.GetTraceWriter()
            .Error(ex.Message, null, "Push.SendAsync Error");
    }
    

    Este proceso envía una notificación de plantilla que contiene el item.Text cuando se inserta un nuevo elemento.

  4. Republíque el proyecto del servidor.

Proyecto de back-end en Node.js

  1. Configure el proyecto de back-end.

  2. Reemplace el código existente en todoitem.js por el código siguiente:

    var azureMobileApps = require('azure-mobile-apps'),
    promises = require('azure-mobile-apps/src/utilities/promises'),
    logger = require('azure-mobile-apps/src/logger');
    
    var table = azureMobileApps.table();
    
    table.insert(function (context) {
    // For more information about the Notification Hubs JavaScript SDK,
    // see https://aka.ms/nodejshubs.
    logger.info('Running TodoItem.insert');
    
    // Define the template payload.
    var payload = '{"messageParam": "' + context.item.text + '" }';  
    
    // Execute the insert. The insert returns the results as a promise.
    // Do the push as a post-execute action within the promise flow.
    return context.execute()
        .then(function (results) {
            // Only do the push if configured.
            if (context.push) {
                // Send a template notification.
                context.push.send(null, payload, function (error) {
                    if (error) {
                        logger.error('Error while sending push notification: ', error);
                    } else {
                        logger.info('Push notification sent successfully!');
                    }
                });
            }
            // Don't forget to return the results from the context.execute().
            return results;
        })
        .catch(function (error) {
            logger.error('Error while running context.execute: ', error);
        });
    });
    
    module.exports = table;  
    

    Este proceso envía una notificación de plantilla que contiene item.text cuando se inserta un nuevo elemento.

  3. Al editar el archivo en el equipo local, vuelva a publicar el proyecto de servidor.

Configuración del proyecto de Xamarin.iOS

Configuración del proyecto de iOS en Xamarin Studio

  1. En Xamarin.Studio, abra Info.plist y actualice el identificador de lote con el identificador de lote que creó anteriormente con el nuevo identificador de aplicación.

  2. Desplácese hacia abajo hasta Modos de fondo. Seleccione el cuadro Habilitar modos de fondo y el cuadro Notificaciones remotas .

  3. Haga doble clic en el proyecto en el Panel de soluciones para abrir Opciones del proyecto.

  4. En Construcción, elija Firma de Paquete de iOS y seleccione la identidad y el perfil de aprovisionamiento correspondientes que acaba de configurar para este proyecto.

    Esto garantiza que el proyecto use el nuevo perfil para la firma de código. Para obtener la documentación oficial sobre el aprovisionamiento de dispositivos de Xamarin, consulte Aprovisionamiento de dispositivos de Xamarin.

Configuración del proyecto de iOS en Visual Studio

  1. En Visual Studio, haga clic con el botón derecho en el proyecto y, a continuación, haga clic en Propiedades.

  2. En las páginas de propiedades, haga clic en la pestaña Aplicación de iOS y actualice el identificador con el identificador que creó anteriormente.

  3. En la pestaña Firma de paquetes de iOS, seleccione la identidad y el perfil de aprovisionamiento correspondiente que acaba de configurar para este proyecto.

    Esto garantiza que el proyecto use el nuevo perfil para la firma de código. Para obtener la documentación oficial sobre el aprovisionamiento de dispositivos de Xamarin, consulte Aprovisionamiento de dispositivos de Xamarin.

  4. Haga doble clic en Info.plist para abrirlo y, a continuación, habilite RemoteNotifications en Modos de fondo.

Incorporación de notificaciones push a la aplicación

  1. En QSTodoService, agregue la siguiente propiedad para que AppDelegate pueda adquirir el cliente móvil:

    public MobileServiceClient GetClient {
        get
        {
            return client;
        }
        private set
        {
            client = value;
        }
    }
    
  2. Agregue la siguiente using instrucción a la parte superior del archivo AppDelegate.cs .

    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  3. En AppDelegate, invalide el evento FinishedLaunching :

     public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
     {
         // registers for push for iOS8
         var settings = UIUserNotificationSettings.GetSettingsForTypes(
             UIUserNotificationType.Alert
             | UIUserNotificationType.Badge
             | UIUserNotificationType.Sound,
             new NSSet());
    
         UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
         UIApplication.SharedApplication.RegisterForRemoteNotifications();
    
         return true;
     }
    
  4. En el mismo archivo, invalide el RegisteredForRemoteNotifications evento. En este código, usted está registrando una notificación de plantilla simple que se enviará a través de todas las plataformas admitidas por el servidor.

    Para obtener más información sobre las plantillas con Notification Hubs, consulte Plantillas.

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        MobileServiceClient client = QSTodoService.DefaultService.GetClient;
    
        const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
        JObject templates = new JObject();
        templates["genericMessage"] = new JObject
        {
            {"body", templateBodyAPNS}
        };
    
        // Register for push with your mobile app
        var push = client.GetPush();
        push.RegisterAsync(deviceToken, templates);
    }
    
  5. A continuación, invalide el evento DidReceivedRemoteNotification :

     public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
     {
         NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;
    
         string alert = string.Empty;
         if (aps.ContainsKey(new NSString("alert")))
             alert = (aps [new NSString("alert")] as NSString).ToString();
    
         //show alert
         if (!string.IsNullOrEmpty(alert))
         {
             UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null);
             avAlert.Show();
         }
     }
    

La aplicación ahora se actualiza para admitir notificaciones push.

Prueba de las notificaciones push en la aplicación

  1. Presione el botón Ejecutar para compilar el proyecto e iniciar la aplicación en un dispositivo compatible con iOS y, a continuación, haga clic en Aceptar para aceptar notificaciones push.

    Nota:

    Debes aceptar explícitamente notificaciones push de la aplicación. Esta solicitud solo se produce la primera vez que se ejecuta la aplicación.

  2. En la aplicación, escriba una tarea y, a continuación, haga clic en el icono más (+).

  3. Compruebe que se recibe una notificación y haga clic en Aceptar para descartar la notificación.

  4. Repita el paso 2 e cierre inmediatamente la aplicación y compruebe que se muestra una notificación.

Ha completado correctamente este tutorial.