Share via


Codice generato dalla procedura guidata di creazione di notifiche push

Usando una procedura guidata in Visual Studio puoi generare notifiche push da un servizio mobile creato con Servizi mobili di Azure. La procedura guidata di Visual Studio genera codice che consente di iniziare. Questo argomento spiega in che modo la procedura guidata modifica il tuo progetto, cosa fa il codice generato, come usare il codice e cosa fare dopo per ottenere il massimo dalle notifiche push. Vedi Panoramica di Servizi notifica Push Windows (WNS).

Modifica del progetto da parte della procedura guidata

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

  • Aggiunge un riferimento a Servizi mobili client gestito (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 aggiungi notifiche push per un servizio back-end JavaScript, viene inserita una chiamata di esempio per 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. Puoi usare per il metodo registerNative (o RegisterNativeAsync) per eseguire la registrazione per tutte le notifiche push senza specificare tag oppure puoi eseguire la registrazione con i tag specificando il secondo argomento, una matrice di tag. Se si esegue la registrazione con uno o più tag, si ricevono solo notifiche corrispondenti a tali tag.

Script lato server (solo back-end 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. Vedere Informazioni di riferimento sull'API REST di Servizi mobili di Azure.

Nello script lato server sono disponibili diverse funzioni. Vedere Registrare le operazioni di tabella in Azure Servizi mobili. Per un riferimento a tutte le funzioni disponibili, vedere informazioni di riferimento sullo script del server 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 di tipo avviso popup. È anche possibile usare altri tipi di notifiche push.

Suggerimento Per informazioni su come ottenere assistenza durante la modifica degli script, vedere Abilitazione di IntelliSense per JavaScript sul 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 di tipo avviso popup sono facili da usare e puoi esaminare un esempio nel codice Insert.js nella tabella del canale generata automaticamente. 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. Vedere Uso di riquadri, notifiche e notifiche di tipo avviso popup.

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 di tipo avviso popup visualizzando un messaggio, 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 e lista di controllo per le notifiche push

Se aggiorni riquadri animati con notifiche push, raccomandiamo di seguire anche le linee guida in Linee guida ed elenco di controllo per riquadri e notifiche.

Passaggi successivi

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. Vedere Come eseguire l'autenticazione con Windows Push Notification Service (JavaScript) o (C#/C++/VB).

Puoi anche inviare notifiche push eseguendo un'attività pianificata nel servizio mobile. Vedere Pianificazione dei processi 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 genera chiamate sovrapposte al metodo CreatePushNotificationChannelForApplicationAsync , che causa un'eccezione di 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.