Kód generovaný průvodcem pro push oznámení

Pomocí průvodce v sadě Visual Studio můžete generovat nabízená oznámení z mobilní služby vytvořené pomocí Azure Mobile Services. Průvodce sadou Visual Studio vygeneruje kód, který vám pomůže začít. Toto téma vysvětluje, jak průvodce upraví projekt, co vygenerovaný kód dělá, jak tento kód používat a co můžete udělat, abyste mohli využívat nabízená oznámení na maximum. Viz přehled služby WNS (Windows Push Notification Services).

Jak průvodce upraví váš projekt

Průvodce push notifikací upraví váš projekt následujícími způsoby:

  • Přidá odkaz na klienta pro spravované mobilní služby (MobileServicesManagedClient.dll). Nevztahuje se na projekty JavaScriptu.
  • Přidá soubor do podsložky pod službami a pojmenuje soubor push.register.cs, push.register.vb, push.register.cpp nebo push.register.js.
  • Vytvoří tabulku kanálů na databázovém serveru pro mobilní službu. Tabulka obsahuje informace nezbytné k odesílání push oznámení instancím aplikací.
  • Vytvoří skripty pro čtyři funkce: odstranění, vložení, čtení a aktualizace.
  • Vytvoří skript s vlastním rozhraním API, notifyallusers.js, který odešle push oznámení všem klientům.
  • Přidá deklaraci do souboru App.xaml.cs, App.xaml.vb nebo App.xaml.cpp nebo přidá deklaraci do nového souboru service.jspro projekty JavaScriptu. Deklarace deklaruje objekt MobileServiceClient, který obsahuje informace potřebné pro připojení k mobilní službě. K tomuto objektu MobileServiceClient, který se jmenuje MyServiceNameClient, můžete přistupovat z libovolné stránky aplikace pomocí názvu App.MyServiceNameClient.

Soubor services.js obsahuje následující kód:

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

Registrace push notifikací

V push.register.* metoda UploadChannel zaregistruje zařízení pro příjem push oznámení. Store sleduje nainstalované instance vaší aplikace a poskytuje kanál nabízených oznámení. See PushNotificationChannelManager.

Kód klienta je podobný pro backend JavaScript a backend .NET. Ve výchozím nastavení, když přidáte push oznámení pro backendovou službu JavaScriptu, je do metody UploadChannel vloženo ukázkové volání vlastního rozhraní API notifyAllUsers.

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

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

Značky nabízených oznámení poskytují způsob, jak omezit oznámení na podmnožinu klientů. Metodu registerNative (nebo RegisterNativeAsync) můžete použít k registraci pro všechna nabízená oznámení bez zadání značek, nebo se můžete zaregistrovat se značkami zadáním druhého argumentu, pole značek. Pokud se zaregistrujete s jednou nebo více značkami, obdržíte oznámení, která odpovídají těmto značkám.

Skripty na straně serveru (pouze back-end JavaScriptu)

U mobilních služeb, které používají back-end JavaScriptu, se skripty na straně serveru spustí při operacích odstranění, vložení, čtení nebo aktualizace. Skripty tyto operace neimplementují, ale spustí se při volání z klienta na rozhraní Windows Mobile REST API, které aktivuje tyto události. Skripty pak předávají řízení do samotných operací voláním request.execute nebo request.respond na vydání odpovědi na kontext volání. Viz referenci k rozhraní REST API služby Azure Mobile Services.

V skriptu na straně serveru jsou k dispozici různé funkce. Viz Registrace operací tabulek ve službě Azure Mobile Services. Pro podrobné informace o všech dostupných funkcích se podívejte na referenci skriptu serveru Mobile Services.

Vytvoří se také následující vlastní kód rozhraní API v 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);
            }
        });
}

Funkce sendNotifications odešle jedno oznámení jako informační zprávu. Můžete také použít jiné typy push oznámení.

Tip Informace o tom, jak získat nápovědu při úpravách skriptů, najdete v tématu Povolení technologie IntelliSense proserverový JavaScript.

 

Typy nabízených oznámení

Windows podporuje oznámení, která nejsou push oznámení. Obecné informace o oznámeních najdete v tématu Volba metody doručení oznámení.

Vyskakovací oznámení se dají snadno používat a můžete si prohlédnout příklad v kódu Insert.js v tabulce kanálů, která je pro vás vygenerovaná. Pokud plánujete používat oznámení o dlaždicích a odznacích, musíte vytvořit šablonu XML pro dlaždici a odznak a zadat kódování zabalených informací v této šabloně. Podívejte se na Práce s dlaždicemi, odznáčky a informačními zprávami.

Vzhledem k tomu, že Windows reaguje na nabízená oznámení, dokáže většinu těchto oznámení zpracovat, když aplikace není spuštěná. Nabízené oznámení může například dát uživateli vědět, kdy je k dispozici nová e-mailová zpráva, i když místní poštovní aplikace není spuštěná. Systém Windows zpracovává vyskakovací oznámení zobrazením zprávy, například prvního řádku textové zprávy. Systém Windows spravuje dlaždicové nebo odznakové oznámení aktualizací živé dlaždice aplikace tak, aby zobrazoval počet nových e-mailových zpráv. Tímto způsobem můžete uživatele aplikace vyzvat, aby zkontrolovat nové informace. Aplikace může přijímat nezpracovaná oznámení, když je spuštěná, a můžete je použít k odesílání dat do aplikace. Pokud vaše aplikace není spuštěná, můžete nastavit úlohu na pozadí pro monitorování nabízených oznámení.

Nabízená oznámení byste měli používat podle pokynů pro aplikace pro Windows, protože tato oznámení využívají prostředky uživatele a můžou být rušivá, pokud jsou nadměrně využitá. Viz Pokyny a kontrolní seznam pro nabízená oznámení.

Při aktualizaci živých dlaždic pomocí push oznámení byste měli také postupovat podle pokynů uvedených v Pokynech a kontrolním seznamu pro dlaždice a odznáčky.

Next steps

Použití služby WNS (Windows Push Notification Services)

Službu WNS (Windows Push Notification Services) můžete volat přímo, pokud Mobile Services neposkytuje dostatečnou flexibilitu, pokud chcete napsat kód serveru v jazyce C# nebo Visual Basic nebo pokud už cloudovou službu máte a chcete z ní odesílat nabízená oznámení. Přímo zavoláním na službu WNS můžete odesílat push oznámení z vaší vlastní cloudové služby, jako je pracovní role, která monitoruje data z databáze nebo jiné webové služby. Vaše cloudová služba se musí ověřit u WNS, aby se odesílala push oznámení do vašich aplikací. Viz Ověření pomocí služby nabízených oznámení systému Windows (JavaScript) nebo (C#/C++/VB).

Oznámení lze zasílat také spuštěním naplánované úlohy v mobilní službě. Viz Plánování opakovaných úloh ve službě Mobilní služby.

Varování Jakmile jednou spustíte průvodce nastavením push oznámení, nezapínejte průvodce podruhé, abyste přidali registrační kód pro jinou mobilní službu. Spuštění průvodce více než jednou na jeden projekt generuje kód, který vede k překrývajícím se voláním metody CreatePushNotificationChannelForApplicationAsync, což způsobuje výjimku za běhu. Pokud chcete registrovat push oznámení pro více než jednu mobilní službu, spusťte průvodce jednou a potom přepište registrační kód, aby se zajistilo, že volání CreatePushNotificationChannelForApplicationAsync nespustí současně. Můžete to například provést přesunutím kódu generovaného průvodcem v push.register.* (včetně volání CreatePushNotificationChannelForApplicationAsync) mimo událost OnLaunched, ale specifika tohoto postupu budou záviset na architektuře vaší aplikace.