Compartir a través de


Código generado por el Asistente para notificaciones de inserción

Usar un asistente en Visual Studio te permite generar notificaciones de inserción desde un servicio móvil creado con los Servicios móviles de Azure. El Asistente de Visual Studio genera código para ayudarte a empezar. En este tema se explica cómo el asistente modifica el proyecto, qué hace el código generado, cómo se usa este código y qué puedes hacer después para sacarle todo el partido a las notificaciones de inserción. Consulta Introducción a los Servicios de notificaciones de inserción de Windows (WNS).

Cómo modifica el proyecto el asistente

El asistente para notificaciones de inserción modifica el proyecto de las maneras siguientes:

  • Agrega una referencia al cliente administrado de Mobile Services (MobileServicesManagedClient.dll). No es aplicable a los proyectos de JavaScript.
  • Agrega un archivo en una subcarpeta en servicios y asigna un nombre al archivo push.register.cs, push.register.vb, push.register.cpp o push.register.js.
  • Crea una tabla de canales en el servidor de bases de datos para el servicio móvil. La tabla contiene información necesaria para enviar notificaciones push a instancias de aplicación.
  • Crea scripts para cuatro funciones: eliminar, insertar, leer y actualizar.
  • Crea un script con una API personalizada, notifyallusers.js, que envía una notificación push a todos los clientes.
  • Agrega una declaración al archivo de App.xaml.cs, App.xaml.vb o App.xaml.cpp, o agrega una declaración a un nuevo archivo, service.js, para proyectos de JavaScript. La declaración declara un objeto MobileServiceClient, que contiene la información necesaria para conectarse al servicio móvil. Puede acceder a este objeto MobileServiceClient, denominado MyServiceNameClient, desde cualquier página de la aplicación mediante el nombre App.Cliente MyServiceName.

El archivo services.js contiene el código siguiente:

var <mobile-service-name>Client = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient(
                "https://<mobile-service-name>.azure-mobile.net/",
                "<your client secret>");

Registro de notificaciones push

En push.register.*, el método UploadChannel registra el dispositivo para recibir notificaciones push. La Tienda realiza un seguimiento de las instancias instaladas de la aplicación y proporciona el canal de notificación de inserción. Consulte PushNotificationChannelManager.

El código de cliente es similar tanto para el back-end de JavaScript como para el back-end de .NET. De forma predeterminada, al agregar notificaciones push para un servicio back-end de JavaScript, se inserta una llamada de ejemplo a notifyAllUsers custom API en el método UploadChannel.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MobileServices;
using Newtonsoft.Json.Linq;

namespace App2
{
    internal class mymobileservice1234Push
    {
        public async static void UploadChannel()
        {
            var channel = await Windows.Networking.PushNotifications.PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

            try
            {
                await App.mymobileservice1234Client.GetPush().RegisterNativeAsync(channel.Uri);
                await App.mymobileservice1234Client.InvokeApiAsync("notifyAllUsers");
            }
            catch (Exception exception)
            {
                HandleRegisterException(exception);
            }
        }

        private static void HandleRegisterException(Exception exception)
        {
            
        }
    }
}
Imports Microsoft.WindowsAzure.MobileServices
Imports Newtonsoft.Json.Linq

Friend Class mymobileservice1234Push
    Public Shared Async Sub UploadChannel()
        Dim channel = Await Windows.Networking.PushNotifications.PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync()

        Try
            Await App.mymobileservice1234Client.GetPush().RegisterNativeAsync(channel.Uri)
            Await App.mymobileservice1234Client.GetPush().RegisterNativeAsync(channel.Uri, New String() {"tag1", "tag2"})
            Await App.mymobileservice1234Client.InvokeApiAsync("notifyAllUsers")
        Catch exception As Exception
            HandleRegisterException(exception)
        End Try
    End Sub

    Private Shared Sub HandleRegisterException(exception As Exception)

    End Sub
End Class
#include "pch.h"
#include "services\mobile services\mymobileservice1234\mymobileservice1234Push.h"

using namespace AzureMobileHelper;

using namespace web;
using namespace concurrency;

using namespace Windows::Networking::PushNotifications;

void mymobileservice1234Push::UploadChannel()
{
    create_task(PushNotificationChannelManager::CreatePushNotificationChannelForApplicationAsync()).
    then([] (PushNotificationChannel^ newChannel) 
    {
        return mymobileservice1234MobileService::GetClient().get_push().register_native(newChannel->Uri->Data());
    }).then([]()
    {
        return mymobileservice1234MobileService::GetClient().invoke_api(L"notifyAllUsers");
    }).then([](task<json::value> result)
    {
        try
        {
            result.wait();
        }
        catch(...)
        {
            HandleExceptionsComingFromTheServer();
        }
    });
}

void mymobileservice1234Push::HandleExceptionsComingFromTheServer()
{
}
(function () {
    "use strict";

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;

    app.addEventListener("activated", function (args) {
        if (args.detail.kind == activation.ActivationKind.launch) {
            Windows.Networking.PushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync()
                .then(function (channel) {
                    mymobileserviceclient1234Client.push.registerNative(channel.Uri, new Array("tag1", "tag2"))
                    return mymobileservice1234Client.push.registerNative(channel.uri);
                })
                .done(function (registration) {
                    return mymobileservice1234Client.invokeApi("notifyAllUsers");
                }, function (error) {
                    // Error

                });
        }
    });
})();

Las etiquetas de notificación push proporcionan una manera de restringir las notificaciones a un subconjunto de clientes. Puede usar para el método registerNative (o RegisterNativeAsync) para registrarse para todas las notificaciones push sin especificar etiquetas, o puede registrarse con etiquetas proporcionando el segundo argumento, una matriz de etiquetas. Si se registra con una o varias etiquetas, solo recibirá notificaciones que coincidan con esas etiquetas.

Scripts del lado servidor (solo back-end de JavaScript)

En el caso de los servicios móviles que usan el back-end de JavaScript, los scripts del lado servidor se ejecutan cuando se producen operaciones de eliminación, inserción, lectura o actualización. Los scripts no implementan estas operaciones, pero se ejecutan cuando una llamada desde el cliente a la API rest de Windows Mobile desencadena estos eventos. A continuación, los scripts pasan el control a las propias operaciones llamando a request.execute o request.respond para emitir una respuesta al contexto de llamada. Consulte Referencia de la API REST de Azure Mobile Services.

Hay una variedad de funciones disponibles en el script del lado servidor. Consulte Registro de operaciones de tabla en Azure Mobile Services. Para obtener una referencia a todas las funciones disponibles, consulte Referencia de script de servidor de Mobile Services.

También se crea el siguiente código de API personalizado en Notifyallusers.js:

exports.post = function(request, response) {
    response.send(statusCodes.OK,{ message : 'Hello World!' })
    
    // The following call is for illustration purpose only
    // The call and function body should be moved to a script in your app
    // where you want to send a notification
    sendNotifications(request);
};

// The following code should be moved to appropriate script in your app where notification is sent
function sendNotifications(request) {
    var payload = '<?xml version="1.0" encoding="utf-8"?><toast><visual><binding template="ToastText01">' +
        '<text id="1">Sample Toast</text></binding></visual></toast>';
    var push = request.service.push; 
    push.wns.send(null,
        payload,
        'wns/toast', {
            success: function (pushResponse) {
                console.log("Sent push:", pushResponse);
            }
        });
}

La función sendNotifications envía una sola notificación como notificación del sistema. También puede usar otros tipos de notificaciones push.

Sugerencia Para obtener información sobre cómo obtener ayuda al editar scripts, consulte Habilitación de IntelliSense para JavaScript del lado servidor.

 

Tipos de notificación de inserción

Windows admite notificaciones que no son notificaciones push. Para obtener información general sobre las notificaciones, consulte Elección de un método de entrega de notificaciones.

Las notificaciones del sistema son fáciles de usar y puede revisar un ejemplo en el código Insert.js de la tabla del canal que se genera automáticamente. Si planea usar notificaciones de icono o distintivo, debe crear una plantilla XML para el icono y el distintivo, y debe especificar la codificación de la información empaquetada en la plantilla. Consulte Trabajar con iconos, distintivos y notificaciones del sistema.

Dado que Windows responde a las notificaciones push, puede controlar la mayoría de estas notificaciones cuando la aplicación no se está ejecutando. Por ejemplo, una notificación de inserción podría informar al usuario de cuándo está disponible un nuevo mensaje de correo incluso cuando la aplicación de correo local no se está ejecutando. Windows controla una notificación del sistema mostrando un mensaje, como la primera línea de un mensaje de texto. Windows controla un icono o notificación de distintivo actualizando el icono dinámico de una aplicación para reflejar el número de mensajes de correo nuevos. De este modo, puede pedir a los usuarios de la aplicación que lo comprueben para obtener información nueva. La aplicación puede recibir notificaciones sin procesar cuando se está ejecutando y puede usarlas para enviar datos a la aplicación. Si la aplicación no se está ejecutando, puedes configurar una tarea en segundo plano para supervisar las notificaciones push.

Debe usar las notificaciones push según las directrices para las aplicaciones de Windows, ya que esas notificaciones usan los recursos de un usuario y pueden distraerse si se usa demasiado. Consulte Directrices y lista de comprobación para las notificaciones push.

Si va a actualizar iconos dinámicos con notificaciones push, también debe seguir las instrucciones de Directrices y lista de comprobación para iconos y distintivos.

Pasos siguientes

Uso de los Servicios de notificaciones push de Windows (WNS)

Puedes llamar a Windows Push Notification Services (WNS) directamente si Mobile Services no proporciona suficiente flexibilidad, si quieres escribir el código de servidor en C# o Visual Basic, o si ya tienes un servicio en la nube y quieres enviar notificaciones push desde él. Al llamar directamente a WNS, puede enviar notificaciones push desde su propio servicio en la nube, como un rol de trabajo que supervisa los datos de una base de datos u otro servicio web. El servicio en la nube debe autenticarse con WNS para enviar notificaciones push a las aplicaciones. Consulte Autenticación con el Servicio de notificaciones push de Windows (JavaScript) o (C#/C++/VB).

También puede enviar notificaciones push ejecutando una tarea programada en el servicio móvil. Consulte Programación de trabajos periódicos en Mobile Services.

Advertencia Una vez que haya ejecutado el Asistente para notificaciones de inserción una vez, no ejecute el asistente una segunda vez para agregar código de registro para otro servicio móvil. La ejecución del asistente más de una vez por proyecto genera código que produce llamadas superpuestas al método CreatePushNotificationChannelForApplicationAsync , lo que conduce a una excepción en tiempo de ejecución. Si desea registrarse para recibir notificaciones push para más de un servicio móvil, ejecute el asistente una vez y vuelva a escribir el código de registro para asegurarse de que las llamadas a CreatePushNotificationChannelForApplicationAsync no se ejecuten al mismo tiempo. Por ejemplo, puedes hacerlo moviendo el código generado por el asistente en push.register.* (incluida la llamada a CreatePushNotificationChannelForApplicationAsync) fuera del evento OnLaunched, pero los detalles de esto dependerán de la arquitectura de la aplicación.