Rövid útmutató: Push értesítések a Windows App SDK-ban.

Ebben a rövid útmutatóban egy asztali Windows alkalmazást fog létrehozni, amely leküldéses értesítéseket küld és fogad a Windows App SDK használatával.

Prerequisites

Csomagolási követelmények

A Windows App SDK-ben a push értesítések támogatják mind a csomagolt, mind a csomagolatlan asztali alkalmazásokat. A csomagazonosítóra szükség van a háttérkézbesítés és a COM-aktiválás érdekében – ez a leggyakoribb gyártási környezet. Az alábbi táblázat a csomagolási modell alapján összefoglalja a szükséges tudnivalókat:

Csomagolási modell COM-aktivátor szükséges Szükséges a PFN megfeleltetés Csomagolatlan támogatás
MSIX csomagolva (WinUI 3, csomagolt WPF/WinForms) Igen – a Package.appxmanifest Igen – PFN-leképezési e-mailben No
Csomagolva külső hellyel Igen – a Package.appxmanifest Igen – PFN-leképezési e-mailben No
Valóban csomagolatlan (nincs csomagazonosság) Nem (3. lépés kihagyása) No Igen – korlátozott funkciók

Important

Ha az alkalmazás csomagolva van (MSIX vagy külső helyen csomagolt), akkor le kell képeznie az alkalmazás Package Family Name (PFN)-ját az Azure AppId-hoz, mielőtt a leküldéses értesítések működni fognak. A leképezési kérelmeket e-mailben küldjük el Win_App_SDK_Push@microsoft.com , és heti rendszerességgel dolgozzuk fel. Tervezze meg ezt az átfutási időt az indítás előtt.

A részletekért lásd a 4. lépést: Az alkalmazás csomagcsalád-nevének és az Azure AppId-nak a leképezése.

Mintaalkalmazás

Ez a rövid útmutató végigvezeti a leküldéses értesítések támogatásának hozzáadásán az alkalmazáshoz az Windows App SDK 1.7-en. Hasonló kódot talál ehhez a rövid útmutatóhoz a GitHub-on található mintaalkalmazásokban. Ellenőrizze az ágat a preferált verziójával a Windows App SDK-nak, hogy megtalálja a legjobban illeszkedő mintákat a projektjéhez.

A Windows App SDK egyes verzióihoz is találhat mintákat a a mintatárban lévő verzióág kiválasztásával.

API-referencia

A push értesítések API-referenciadokumentációját lásd a Microsoft.Windows.PushNotifications Névtér alatt.

Az alkalmazás identitásának konfigurálása Azure Active Directory (AAD)

Windows App SDK push értesítések az Azure Active Directory (AAD) identitásokat használnak. Azure hitelesítő adatokra van szükség a WNS-csatorna URI-igényléséhez és a hozzáférési jogkivonatok igényléséhez, hogy leküldéses értesítéseket küldhessünk. Megjegyzés: A Windows App SDK push leküldéses értesítéseket nem támogatjuk a Microsoft Partnerközpontrel.

1. lépés: AAD-alkalmazásregisztráció létrehozása

Jelentkezzen be Azure fiókjába, és hozzon létre egy új AAD-alkalmazásregisztráció erőforrást. Válassza Új regisztráció.

2. lépés: Adjon meg egy nevet, és válasszon egy több-bérlős lehetőséget

  1. Adja meg az alkalmazás nevét.

  2. Az push értesítésekhez több-bérlős beállítás szükséges, ezért válassza ezt.

    1. További információ a bérlőkről: Ki tud bejelentkezni az alkalmazásba?
  3. Válassza Regisztrálás

  4. Jegyezze fel a Alkalmazás (ügyfél) azonosítóját, mivel ez a Azure AppId amelyet az aktiválási regisztráció és a hozzáférési jogkivonat-kérés során fog használni.

  5. Jegyezze fel a Directory (bérlő) azonosítóját, mivel ez a Azure TenantId, amelyet a hozzáférési jogkivonat kérésekor fog használni.

    Important

    AAD alkalmazásregisztráció bérlője Jegyezze fel az alkalmazás (ügyfél) azonosítóját és címtár (bérlő) azonosítóját.

  6. Jegyezze fel a Object azonosítóját, mivel ez a Azure ObjectId, amelyet a csatornakérelem kérésekor fog használni. Vegye figyelembe, hogy ez NEM az Alapvető fontosságúk lapon felsorolt objektumazonosító. Ehelyett a megfelelő objektumazonosító megkereséséhez kattintson a Felügyelt alkalmazás nevére az Essentials lap helyi könyvtár mezőjében:

    Képernyőkép a Felügyelt alkalmazás helyi címtárban lehetőségéről az Alapvető beállítások lapon

    Képernyőkép az Objektumazonosító mezőről

    Note

    Egy szolgáltatásnév szükséges az objektumazonosító lekéréséhez, ha nincs társítva az alkalmazáshoz, kövesse az alábbi cikkek egyikének lépéseit, hogy létrehozhasson egyet a Azure portálon vagy a parancssorban:

    A portál használatával hozzon létre egy Azure AD-alkalmazást és szolgáltatásnevet, amely hozzáfér az erőforrásokhoz

    Az Azure PowerShell használata egy szolgáltatási főszereplő létrehozásához tanúsítvánnyal

3. lépés: Titkos kód létrehozása az alkalmazásregisztrációhoz

Az Ön titkos kulcsát az Azure AppId/ClientId azonosítóval együtt fogják használni, amikor hozzáférési jogkivonatot kér push értesítések küldéséhez.

AAD-alkalmazás titkos

Lépjen a Tanúsítványok > titkos kódok elemre , és válassza az Új ügyfélkód lehetőséget.

Important

Győződjön meg arról, hogy a titkos kulcsot a létrehozás után másolja, és biztonságos helyen tárolja, például Azure Key Vault. Csak egyszer lesz megtekinthető közvetlenül a létrehozás után.

4. lépés: Az alkalmazás csomagcsaládjának leképezése a Azure AppId azonosítójára

Ha az alkalmazás csomagolva van (például külső hellyel együtt van csomagolva), ezzel a folyamattal megfeleltetheti az alkalmazás Csomagcsalád nevét (PFN) és az Azure AppId azonosítóját.

Ha az alkalmazás egy csomagolt Win32-alkalmazás, akkor hozzon létre egy Package Family Name (PFN) leképezési kérelmet az Win_App_SDK_Push@microsoft.com e-mail címre küldött üzenetben, "Windows App SDK Push Notifications Mapping Request" tárggyal, és a következő tartalommal: "PFN: [a PFN]", AppId: [az APPId], ObjectId: [az ObjectId]. A leképezési kérelmek heti rendszerességgel befejeződnek. A leképezési kérelem befejezése után értesítést kap.

Ha már rendelkezik Azure AppId, ObjectId és Titkos azonosítóval, hozzáadhatja ezeket a hitelesítő adatokat az alábbi mintakódhoz.

Az alkalmazás konfigurálása leküldéses értesítések fogadásához

1. lépés: Windows App SDK és szükséges NuGet-csomagok hozzáadása

Ezután kattintson a jobb gombbal a megoldásra a Megoldáskezelő, és válassza a Manage NuGet Packages lehetőséget.

A Csomagkezelő adja hozzá a következő csomagokat:

  • Microsoft. WindowsAppSDK (legalább 1.1.0-s verzió)
  • Microsoft. Windows. SDK. BuildTools (minimum 10.0.22000.194-es verzió)
  • Microsoft. Windows. CppWinRT, (minimum 2.0.210930.14-es verzió)
  • Microsoft. Windows. ImplementLibrary, (minimum 1.0.210930.1-es verzió)

Ha ez az első alkalom, hogy Windows App SDK-t használ a projektben, és külső helyről van csomagolva, vagy nincs csomagolva, inicializálnia kell a Windows App SDK-t a következő tulajdonság hozzáadásával a projektfájlban.

<!-- your .vcxproj or .proj file -->
<PropertyGroup Label="Globals">
    <!-- Other properties -->
    <WindowsPackageType>None</WindowsPackageType>
</PropertyGroup>

vagy használja a bootstrapper API-t. További részletekért lásd: Az Windows App SDK futtatókörnyezet használata külső helyen vagy csomagolatlanként csomagolt alkalmazásokhoz.

Note

Ha az SDK nincs inicializálva, az alkalmazás dobni System.Runtime.InteropServices.COMException (0x80040154): Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)) fog, és nem fog futni.

2. lépés: Névterek hozzáadása

Ezután adja hozzá Windows App SDK leküldéses értesítések névterét Microsoft.Windows.PushNotifications.

#include <winrt/Microsoft.Windows.PushNotifications.h>

using namespace winrt::Microsoft::Windows::PushNotifications;

Ha megjelenik egy "Nem találja a Microsoft.Windows.PushNotifications" hiba, az valószínűleg azt jelenti, hogy a fejlécfájlok nem lettek létrehozva. A megoldáshoz győződjön meg arról, hogy a fenti csomagok telepítve vannak, kommentelje ki a hiba okozó include és using nyilatkozatokat, és építse újra az alkalmazást a fejlécfájlok létrehozásához. Ha a build sikeres, távolítsa el a megjegyzés jeleket az include és a using utasítások mellől, majd építse újra a projektet. Ennek meg kell oldania a hibát.

3. lépés: COM-aktivátor hozzáadása az alkalmazás jegyzékfájljához

Important

Ha az alkalmazás ki van csomagolva (vagyis futásidőben nem rendelkezik csomagidentitással), ugorjon a 4. lépésre: Regisztráljon és válaszoljon a leküldéses értesítésekre az alkalmazás indításakor.

Ha az alkalmazás csomagolva van (beleértve a külső helyre való csomagolást is): Nyissa meg a Package.appxmanifest. Adja hozzá az alábbi elemeket az elemhez <Application> . Cserélje le a Id, Executableés DisplayName az értékeket az alkalmazásra jellemző értékekre.

<!--Packaged apps only-->
<!--package.appxmanifest-->

<Package
  ...
  xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
  ...
  <Applications>
    <Application>
      ...
      <Extensions>

        <!--Register COM activator-->    
        <com:Extension Category="windows.comServer">
          <com:ComServer>
              <com:ExeServer Executable="SampleApp\SampleApp.exe" DisplayName="SampleApp" Arguments="----WindowsAppRuntimePushServer:">
                <com:Class Id="[Your app's Azure AppId]" DisplayName="Windows App SDK Push" />
            </com:ExeServer>
          </com:ComServer>
        </com:Extension>
    
      </Extensions>
    </Application>
  </Applications>
 </Package>    

Note

A Id<com:Class> attribútumot a Azure AppId értékre kell beállítani (az alkalmazás (ügyfél) azonosító az Azure AD alkalmazás-regisztrációból). Így csatlakoztatja Windows App SDK az alkalmazás COM-aktiválását annak Azure identitásához – amikor a WNS aktiválja az alkalmazást egy háttérbeli leküldéses értesítés küldéséhez, ez a GUID használatával megkeresi és elindítja a megfelelő COM-kiszolgálót. Használja ugyanazt a Azure AppId-értéket, amelyet a fenti 1. lépésben feljegyzett.

Note

Ebben a példában megtalálható a C++ osztály teljes változata az 5. lépés után. A 4. és az 5. lépés lépésenkénti útmutatást nyújt az egyes elemek hozzáadásához az utolsó példában.

4. lépés: Regisztrálj és válaszolj a leküldéses értesítésekre az alkalmazás indításakor

Frissítse az alkalmazás metódusát main() a következők hozzáadásához:

  1. Regisztrálja az alkalmazást a PushNotificationManager::Default().Register()hívásával, hogy leküldéses értesítéseket fogadhasson.
  2. Ellenőrizze az aktiválási kérelem forrását az AppInstance::GetCurrent() hívásával. GetActivatedEventArgs(). Ha az aktiválást leküldéses értesítés által történt, az értesítés tartalma alapján válaszoljon.

Important

Meg kell hívnod PushNotificationManager::Default().Regisztrálj, mielőtt meghívod AppInstance.GetCurrent.GetActivatedEventArgs.

Előtérben lévő eseménykezelők hozzáadása

Az előtérben lévő események kezeléséhez regisztráljon egy kezelőt a PushNotificationManager.PushReceived fájlhoz.

Important

A PushNotificationManager.PushReceived eseménykezelőket is regisztrálnia kell a PushNotificationManager.Register() hívása előtt. Ellenkező esetben a következő futásidejű kivétel jelenik meg:

System.Runtime.InteropServices.COMException: Element not found. Must register event handlers before calling Register().

Adja hozzá az PushNotificationManager::IsSupported() ellenőrzését

Ezután adjon hozzá egy ellenőrzést, hogy a PushNotification API-k támogatottak-e a PushNotificationManager.IsSupported() használatával. Ha nem, javasoljuk, hogy használjon lekérdezést vagy saját egyéni socket implementációt.

Most, hogy már megerősítették a leküldéses értesítések támogatását, adjon hozzá viselkedést a PushNotificationReceivedEventArgs alapján.

5. lépés: WNS Channel URI kérése és regisztrálása a WNS-kiszolgálón

A push értesítések küldésére szolgáló HTTP-végpontok a WNS csatorna URI-k. A leküldéses értesítések fogadásához minden ügyfélnek csatorna URI-t kell kérnie, és regisztrálnia kell azt a WNS-kiszolgálón.

Note

A WNS Channel URI-k 30 nap után lejárnak. Új csatorna URI igénylése minden alkalmazás indításakor ahelyett, hogy az előzőt gyorsítótárazná. Ha az új URI eltér attól, amit a háttérrendszer tárolt, küldje el a frissített URI-t a felhőszolgáltatásnak, hogy naprakészen tarthassa a rekordjait. Ne feltételezze, hogy az URI stabil marad a munkamenetek között — mutálható munkamenet-hatókörű értékként kezelve elkerülhetők a lejárt vagy elavult csatorna URI-k által okozott csendes kézbesítési hibák.

auto channelOperation{ PushNotificationManager::Default().CreateChannelAsync(winrt::guid("[Your app's Azure ObjectID]")) };

Ha követi az oktatóanyag kódját, adja hozzá a Azure objektumazonosítóját:

// To obtain an AAD RemoteIdentifier for your app,
// follow the instructions on https://learn.microsoft.com/azure/active-directory/develop/quickstart-register-app
winrt::guid remoteId{ "00000000-0000-0000-0000-000000000000" }; // Replace this with your own Azure ObjectId

A PushNotificationManager megpróbál létrehozni egy csatorna URI-t, és legfeljebb 15 percig automatikusan próbálkozik. Hozzon létre egy eseménykezelőt, hogy megvárja a hívás befejezését. Ha a hívás befejeződött, regisztrálja az URI-t a WNS-kiszolgálón.

Példakód

#include <iostream>
#include <winrt/Microsoft.Windows.PushNotifications.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Microsoft.Windows.AppLifecycle.h>
#include <winrt/Windows.ApplicationModel.Background.h>
#include <wil/cppwinrt.h>
#include <wil/result.h>

using namespace winrt::Microsoft::Windows::PushNotifications;
using namespace winrt::Windows::Foundation;
using namespace winrt::Microsoft::Windows::AppLifecycle;

// To obtain an AAD RemoteIdentifier for your app,
// follow the instructions on https://learn.microsoft.com/azure/active-directory/develop/quickstart-register-app
winrt::guid remoteId{ "00000000-0000-0000-0000-000000000000" }; // Replace this with your own Azure ObjectId

winrt::Windows::Foundation::IAsyncOperation<PushNotificationChannel> RequestChannelAsync()
{
    auto channelOperation = PushNotificationManager::Default().CreateChannelAsync(remoteId);

    // Set up the in-progress event handler
    channelOperation.Progress(
        [](auto&& sender, auto&& args)
        {
            if (args.status == PushNotificationChannelStatus::InProgress)
            {
                // This is basically a noop since it isn't really an error state
                std::cout << "Channel request is in progress." << std::endl << std::endl;
            }
            else if (args.status == PushNotificationChannelStatus::InProgressRetry)
            {
                LOG_HR_MSG(
                    args.extendedError,
                    "The channel request is in back-off retry mode because of a retryable error! Expect delays in acquiring it. RetryCount = %d",
                    args.retryCount);
            }
        });

    auto result = co_await channelOperation;

    if (result.Status() == PushNotificationChannelStatus::CompletedSuccess)
    {
        auto channelUri = result.Channel().Uri();

        std::cout << "channelUri: " << winrt::to_string(channelUri.ToString()) << std::endl << std::endl;

        auto channelExpiry = result.Channel().ExpirationTime();

        // Caller's responsibility to keep the channel alive
        co_return result.Channel();
    }
    else if (result.Status() == PushNotificationChannelStatus::CompletedFailure)
    {
        LOG_HR_MSG(result.ExtendedError(), "We hit a critical non-retryable error with channel request!");
        co_return nullptr;
    }
    else
    {
        LOG_HR_MSG(result.ExtendedError(), "Some other failure occurred.");
        co_return nullptr;
    }

};

PushNotificationChannel RequestChannel()
{
    auto task = RequestChannelAsync();
    if (task.wait_for(std::chrono::seconds(300)) != AsyncStatus::Completed)
    {
        task.Cancel();
        return nullptr;
    }

    auto result = task.GetResults();
    return result;
}

void SubscribeForegroundEventHandler()
{
    winrt::event_token token{ PushNotificationManager::Default().PushReceived([](auto const&, PushNotificationReceivedEventArgs const& args)
    {
        auto payload{ args.Payload() };

        std::string payloadString(payload.begin(), payload.end());
        std::cout << "\nPush notification content received in the FOREGROUND: " << payloadString << std::endl;
    }) };

    std::cout << "Push notification foreground event handler registered." << std::endl;
}

int main()
{
    // Set up an event handler, so we can receive notifications in the foreground while the app is running.
    // You must register notification event handlers before calling Register(). Otherwise, the following runtime
    // exception will be thrown: System.Runtime.InteropServices.COMException: 'Element not found. Must register
    // event handlers before calling Register().'
    SubscribeForegroundEventHandler();

    // Register the app for push notifications.
    PushNotificationManager::Default().Register();

    auto args{ AppInstance::GetCurrent().GetActivatedEventArgs() };
    switch (args.Kind())
    {
        case ExtendedActivationKind::Launch:
        {
            std::cout << "App launched by user or from the debugger." << std::endl;
            if (PushNotificationManager::IsSupported())
            {
                std::cout << "Push notifications are supported on this device." << std::endl;

                // Request a WNS Channel URI which can be passed off to an external app to send notifications to.
                // The WNS Channel URI uniquely identifies this app for this user and device.
                PushNotificationChannel channel{ RequestChannel() };
                if (!channel)
                {
                    std::cout << "\nThere was an error obtaining the WNS Channel URI" << std::endl;

                    if (remoteId == winrt::guid{ "00000000-0000-0000-0000-000000000000" })
                    {
                        std::cout << "\nThe ObjectID has not been set. Refer to the readme file accompanying this sample\nfor the instructions on how to obtain and setup an ObjectID" << std::endl;
                    }
                }

                std::cout << "\nPress 'Enter' at any time to exit App." << std::endl;
                std::cin.ignore();
            }
            else
            {
                std::cout << "Push notifications are NOT supported on this device." << std::endl;
                std::cout << "App implements its own custom socket here to receive messages from the cloud since Push APIs are unsupported." << std::endl;
                std::cin.ignore();
            }
        }
        break;

        case ExtendedActivationKind::Push:
        {
            std::cout << "App activated via push notification." << std::endl;
            PushNotificationReceivedEventArgs pushArgs{ args.Data().as<PushNotificationReceivedEventArgs>() };

            // Call GetDeferral to ensure that code runs in low power
            auto deferral{ pushArgs.GetDeferral() };

            auto payload{ pushArgs.Payload() };

            // Do stuff to process the raw notification payload
            std::string payloadString(payload.begin(), payload.end());
            std::cout << "\nPush notification content received in the BACKGROUND: " << payloadString.c_str() << std::endl;
            std::cout << "\nPress 'Enter' to exit the App." << std::endl;

            // Call Complete on the deferral when finished processing the payload.
            // This removes the override that kept the app running even when the system was in a low power mode.

            deferral.Complete();
            std::cin.ignore();
        }
        break;

        default:
            std::cout << "\nUnexpected activation type" << std::endl;
            std::cout << "\nPress 'Enter' to exit the App." << std::endl;
            std::cin.ignore();
            break;
    }
}

6. lépés: Az alkalmazás létrehozása és telepítése

Az Visual Studio használatával hozhatja létre és telepítheti az alkalmazást. Kattintson a jobb gombbal a megoldásfájlra a Megoldáskezelő, és válassza a Deploy lehetőséget. Visual Studio létrehozza és telepíti az alkalmazást a gépére. Az alkalmazást a Start menüben vagy a Visual Studio hibakeresővel futtathatja.

Az oktatóanyag kódjának konzolja így fog kinézni:

működő mintakonzol

Szüksége lesz a tokenre, hogy leküldéses értesítést küldjön az alkalmazásához.

Push értesítés küldése az alkalmazásba

Ezen a ponton az összes konfiguráció befejeződött, és a WNS-kiszolgáló leküldéses értesítéseket küldhet az ügyfélalkalmazásoknak. A következő lépések során, további részletekért tekintse meg a push értesítési kiszolgáló kérelem- és válaszfejléceit.

1. lépés: Hozzáférési jogkivonat kérése

Push értesítés küldéséhez a WNS-kiszolgálónak először hozzáférési tokent kell kérnie. HTTP POST-kérés küldése a Azure TenantId, Azure AppId és titkos kód használatával. A Azure TenantId és Azure AppId lekéréséről további információt a A bejelentkezéshez használt bérlői és alkalmazásazonosító-értékek című témakörben talál.

HTTP-mintakérés:

POST /{tenantID}/oauth2/v2.0/token Http/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 160

grant_type=client_credentials&client_id=<Azure_App_Registration_AppId_Here>&client_secret=<Azure_App_Registration_Secret_Here>&scope=https://wns.windows.com/.default/

C# mintakérés:

//Sample C# Access token request
var client = new RestClient("https://login.microsoftonline.com/{tenantID}/oauth2/v2.0");
var request = new RestRequest("/token", Method.Post);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "[Your app's Azure AppId]");
request.AddParameter("client_secret", "[Your app's secret]");
request.AddParameter("scope", "https://wns.windows.com/.default");
RestResponse response = await client.ExecutePostAsync(request);
Console.WriteLine(response.Content);

Ha a kérés sikeres, egy olyan választ kap, amely a tokent tartalmazza a access_token mezőben.

{
    "token_type":"Bearer",
    "expires_in":"86399",
    "ext_expires_in":"86399",
    "expires_on":"1653771789",
    "not_before":"1653685089",
    "access_token":"[your access token]"
}

2. lépés. Nyers értesítés küldése

Hozzon létre egy HTTP POST-kérést, amely tartalmazza az előző lépésben beszerzett hozzáférési jogkivonatot és a küldeni kívánt leküldéses értesítés tartalmát. A leküldéses értesítés tartalma az alkalmazáshoz lesz kézbesítve.

POST /?token=[The token query string parameter from your channel URL. E.g. AwYAAABa5cJ3...] HTTP/1.1
Host: dm3p.notify.windows.com
Content-Type: application/octet-stream
X-WNS-Type: wns/raw
Authorization: Bearer [your access token]
Content-Length: 46

{ Sync: "Hello from the Contoso App Service" }
var client = new RestClient("[Your channel URL. E.g. https://wns2-by3p.notify.windows.com/?token=AwYAAABa5cJ3...]");
var request = new RestRequest();
request.Method = Method.Post; 
request.AddHeader("Content-Type", "application/octet-stream");
request.AddHeader("X-WNS-Type", "wns/raw");
request.AddHeader("Authorization", "Bearer [your access token]");
request.AddBody("Notification body");
RestResponse response = await client.ExecutePostAsync(request);");

3. lépés: Felhőalapú alkalmazásértesítés küldése

Ha csak nyers értesítéseket szeretne küldeni, hagyja figyelmen kívül ezt a lépést. Ha felhőből származó alkalmazásértesítést, más néven push értesítést szeretne küldeni, először kövesse a Quickstart: Alkalmazásértesítések a Windows App SDK útmutatót. Az alkalmazásértesítések lehetnek push értesítések (a felhőből küldött) vagy helyben küldött értesítések. A felhőalapú alkalmazásértesítések küldése hasonló a 2. lépésnyers értesítés küldéséhez, kivéve az X-WNS típusú fejléc , a Tartalomtípus , és a tartalom tartalmazza az alkalmazásértesítési XML-hasznos adatokat. Az XML-hasznos adatok összeállításáról további információkért tekintse meg az Értesítések XML-sémát.

Hozzon létre egy HTTP POST-kérést, amely tartalmazza a hozzáférési jogkivonatot és a küldendő felhőalapú alkalmazásértesítés tartalmát. A leküldéses értesítés tartalma az alkalmazáshoz lesz kézbesítve.

POST /?token=AwYAAAB%2fQAhYEiAESPobjHzQcwGCTjHu%2f%2fP3CCNDcyfyvgbK5xD3kztniW%2bjba1b3aSSun58SA326GMxuzZooJYwtpgzL9AusPDES2alyQ8CHvW94cO5VuxxLDVzrSzdO1ZVgm%2bNSB9BAzOASvHqkMHQhsDy HTTP/1.1
Host: dm3p.notify.windows.com
Content-Type: text/xml
X-WNS-Type: wns/toast
Authorization: Bearer [your access token]
Content-Length: 180

<toast><visual><binding template="ToastGeneric"><text>Example cloud toast notification</text><text>This is an example cloud notification using XML</text></binding></visual></toast>
var client = new RestClient("https://dm3p.notify.windows.com/?token=AwYAAAB%2fQAhYEiAESPobjHzQcwGCTjHu%2f%2fP3CCNDcyfyvgbK5xD3kztniW%2bjba1b3aSSun58SA326GMxuzZooJYwtpgzL9AusPDES2alyQ8CHvW94cO5VuxxLDVzrSzdO1ZVgm%2bNSB9BAzOASvHqkMHQhsDy");
client.Timeout = -1;

var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "text/xml");
request.AddHeader("X-WNS-Type", "wns/toast");
request.AddHeader("Authorization", "Bearer <AccessToken>");
request.AddParameter("text/xml", "<toast><visual><binding template=\"ToastGeneric\"><text>Example cloud toast notification</text><text>This is an example cloud notification using XML</text></binding></visual></toast>",  ParameterType.RequestBody);
Console.WriteLine(response.Content);

Resources