Condividi tramite


Codice generato dalla procedura guidata di creazione di notifiche push

Usando una procedura guidata in Visual Studio, è possibile generare notifiche push da un servizio mobile creato con Servizi mobili di Azure. La procedura guidata di Visual Studio genera codice per aiutarti a iniziare. In questo argomento viene illustrato come la procedura guidata modifica il progetto, le operazioni eseguite dal codice generato, come usare questo codice e le operazioni che è possibile eseguire accanto per sfruttare al meglio le notifiche push. Consulta la panoramica dei Windows Push Notification Services (WNS).

Come la procedura guidata modifica il tuo progetto

La procedura guidata di notifica push modifica il progetto nei modi seguenti:

  • Aggiunge un riferimento al client gestito di Servizi mobili (MobileServicesManagedClient.dll). Non applicabile ai progetti JavaScript.
  • Aggiunge un file in una sottocartella in servizi e assegna un nome al file push.register.cs, push.register.vb, push.register.cpp o push.register.js.
  • Crea una tabella dei canali nel server di database per il servizio mobile. La tabella contiene informazioni necessarie per inviare notifiche push alle istanze dell'app.
  • Crea script per quattro funzioni: eliminazione, inserimento, lettura e aggiornamento.
  • Crea uno script con un'API personalizzata, notifyallusers.js, che invia una notifica push a tutti i client.
  • Aggiunge una dichiarazione al file App.xaml.cs, App.xaml.vb o App.xaml.cpp oppure aggiunge una dichiarazione a un nuovo file, service.js, per i progetti JavaScript. La dichiarazione dichiara un oggetto MobileServiceClient che contiene le informazioni necessarie per connettersi al servizio mobile. Puoi accedere a questo oggetto MobileServiceClient, denominato MyServiceNameClient, da qualsiasi pagina dell'app usando il nome App.Client MyServiceName.

Il file services.js contiene il codice seguente:

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

Registrazione per notifiche push

In push.register.*, il metodo UploadChannel registra il dispositivo per ricevere notifiche push. Lo Store tiene traccia delle istanze installate dell'app e fornisce il canale di notifica push. See PushNotificationChannelManager.

Il codice client è simile sia per il back-end JavaScript che per il back-end .NET. Per impostazione predefinita, quando si aggiungono notifiche push per un servizio backend JavaScript, viene inserita una chiamata di esempio per l'API personalizzata notifyAllUsers nel metodo 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

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

I tag di notifica push consentono di limitare le notifiche a un subset di client. È possibile usare il metodo registerNative (o RegisterNativeAsync) per registrarsi per tutte le notifiche push senza specificare tag, oppure è possibile registrarsi con i tag specificando il secondo argomento, un array di tag. Se si esegue la registrazione con uno o più tag, si ricevono solo notifiche corrispondenti a tali tag.

Script lato server (solo backend JavaScript)

Per i servizi mobili che usano il back-end JavaScript, gli script lato server vengono eseguiti quando si verificano operazioni di eliminazione, inserimento, lettura o aggiornamento. Gli script non implementano queste operazioni, ma vengono eseguiti quando una chiamata dal client all'API REST di Windows Mobile attiva questi eventi. Gli script passano quindi il controllo alle operazioni stesse chiamando request.execute o request.respond per inviare una risposta al contesto chiamante. Consultare il riferimento delle API REST dei Servizi mobili di Azure .

Nello script lato server sono disponibili diverse funzioni. Consultare le operazioni di registrazione delle tabelle nei Servizi Mobili di Azure. Per un riferimento a tutte le funzioni disponibili, vedere informazioni di riferimento sullo script del server di Servizi mobili.

Viene creato anche il codice API personalizzato seguente in 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 funzione sendNotifications invia una singola notifica come notifica toast. È anche possibile usare altri tipi di notifiche push.

Suggerimento Per informazioni su come ottenere aiuto durante la modifica degli script, vedere Abilitare IntelliSense per JavaScript lato server.

 

Tipi di notifica push

Windows supporta le notifiche che non sono notifiche push. Per informazioni generali sulle notifiche, vedere Scelta di un metodo di recapito delle notifiche.

Le notifiche toast sono facili da usare ed è possibile esaminare un esempio nel codice Insert.js nella tabella del canale generata per te. Se prevedi di usare notifiche di tipo riquadro o badge, è necessario creare un modello XML per il riquadro e la notifica e specificare la codifica delle informazioni in pacchetto nel modello. Consultare Uso dei riquadri, badge e notifiche toast.

Poiché Windows risponde alle notifiche push, può gestire la maggior parte di queste notifiche quando l'app non è in esecuzione. Ad esempio, una notifica push potrebbe informare un utente quando è disponibile un nuovo messaggio di posta anche quando l'app di posta locale non è in esecuzione. Windows gestisce una notifica toast visualizzando un messaggio, come, ad esempio, la prima riga di un messaggio di testo. Windows gestisce una notifica di tipo riquadro o badge aggiornando il riquadro animato di un'app in modo da riflettere il numero di nuovi messaggi di posta elettronica. In questo modo, puoi richiedere agli utenti dell'app di verificarne la presenza di nuove informazioni. L'app può ricevere notifiche non elaborate quando è in esecuzione e puoi usarle per inviare dati all'app. Se l'app non è in esecuzione, puoi configurare un'attività in background per monitorare le notifiche push.

Raccomandiamo di usare le notifiche push in base alle linee guida per le app di Windows, perché queste notifiche usano risorse di un utente e possono distrarsi se sovrautilizzate. Vedere Linee guida ed elenco di controllo per le notifiche push.

Se aggiorni i riquadri live con notifiche push, dovresti anche seguire le linee guida incluse in Linee guida ed elenco di controllo per i riquadri e i badge.

Next steps

Uso dei Servizi notifica Push Windows (WNS)

Puoi chiamare Windows Push Notification Services (WNS) direttamente se Servizi mobili non offre una flessibilità sufficiente, se vuoi scrivere il codice del server in C# o Visual Basic o se disponi già di un servizio cloud e desideri inviare notifiche push da esso. Chiamando direttamente WNS, puoi inviare notifiche push dal proprio servizio cloud, ad esempio un ruolo di lavoro che monitora i dati da un database o da un altro servizio Web. Il servizio cloud deve eseguire l'autenticazione con WNS per inviare notifiche push alle app. Consulta Come eseguire l'autenticazione con il servizio di notifica push di Windows () (JavaScript) o (C#/C++/VB).

Puoi anche inviare notifiche push eseguendo un'attività pianificata nel servizio mobile. Consulta Pianificare compiti ricorrenti in Servizi mobili.

Avviso Dopo aver eseguito la procedura guidata di notifica push una sola volta, non eseguire la procedura guidata una seconda volta per aggiungere il codice di registrazione per un altro servizio mobile. L'esecuzione della procedura guidata più di una volta per progetto genera codice che porta a chiamate sovrapposte al metodo CreatePushNotificationChannelForApplicationAsync, causando un'eccezione a runtime. Se vuoi eseguire la registrazione per le notifiche push per più servizi mobili, esegui la procedura guidata una sola volta e quindi riscrivi il codice di registrazione per assicurarti che le chiamate a CreatePushNotificationChannelForApplicationAsync non vengano eseguite contemporaneamente. Ad esempio, puoi eseguire questa operazione spostando il codice generato dalla procedura guidata in push.register.* (inclusa la chiamata a CreatePushNotificationChannelForApplicationAsync) all'esterno dell'evento OnLaunched, ma le specifiche di questo dipenderanno dall'architettura dell'app.