Bagikan melalui


Mulai cepat: Pemberitahuan push di SDK Aplikasi Windows

Dalam mulai cepat ini Anda akan membuat aplikasi Windows desktop yang mengirim dan menerima pemberitahuan push menggunakan SDK Aplikasi Windows.

Prerequisites

Persyaratan pengemasan

Pemberitahuan push di SDK Aplikasi Windows mendukung aplikasi desktop yang dikemas dan sepenuhnya tidak dikemas. Namun, identitas paket diperlukan untuk pengiriman latar belakang dan aktivasi COM — skenario produksi yang paling umum. Tabel berikut ini meringkas apa yang diperlukan berdasarkan model kemasan Anda:

Model pengemasan Diperlukan aktivator COM Pemetaan PFN diperlukan Didukung tanpa kemasan
MSIX packaged (WinUI 3, paket WPF/WinForms) Ya — dalam Package.appxmanifest Ya — melalui email pemetaan PFN No
Dikemas dengan lokasi di luar Ya — dalam Package.appxmanifest Ya — melalui email pemetaan PFN No
Benar-benar tidak dipaketkan (tidak ada identitas paket) Tidak (lewati Langkah 3) No Ya — fungsionalitas terbatas

Important

Jika aplikasi Anda dikemas (MSIX atau dikemas dengan lokasi eksternal), Anda harus memetakan Package Family Name (PFN) aplikasi Anda ke Azure AppId sebelum pemberitahuan push akan berfungsi. Permintaan pemetaan dikirimkan melalui email ke Win_App_SDK_Push@microsoft.com dan diproses setiap minggu. Sebelum peluncuran Anda, rencanakan waktu persiapan ini.

Lihat Langkah 4: Petakan Nama Keluarga Paket aplikasi Anda ke AppId Azure untuk informasi lebih lanjut.

Aplikasi sampel

Panduan awal ini menguraikan langkah menambahkan dukungan pemberitahuan push ke aplikasi Anda di SDK Aplikasi Windows 1.7. Anda dapat melihat kode serupa dengan panduan memulai cepat ini di aplikasi contoh yang ditemukan di GitHub. Pastikan untuk memeriksa branch dengan versi SDK Aplikasi Windows pilihan Anda untuk sampel yang paling cocok dengan proyek Anda.

Anda juga dapat menemukan sampel untuk setiap versi SDK Aplikasi Windows dengan memilih cabang versi di repositori sampel.

Referensi Antarmuka Pemrograman Aplikasi (API)

Untuk dokumentasi referensi API untuk pemberitahuan push, lihat Microsoft.Windows. Namespace PushNotifications.

Mengonfigurasi identitas aplikasi Anda di Azure Active Directory (AAD)

Pemberitahuan push di SDK Aplikasi Windows menggunakan identitas dari Azure Active Directory (AAD). Azure kredensial diperlukan saat meminta URI Saluran WNS dan saat meminta token akses untuk mengirim pemberitahuan push. Catatan: Kami tidak mendukung penggunaan pemberitahuan push SDK Aplikasi Windows dengan Pusat Mitra Microsoft.

Langkah 1: Membuat pendaftaran aplikasi AAD

Masuk ke akun Azure Anda dan buat sumber daya Pendaftaran Aplikasi AAD baru. Pilih Pendaftaran baru.

Langkah 2: Berikan nama dan pilih opsi multi-penyewa

  1. Berikan nama aplikasi.

  2. Pemberitahuan push memerlukan opsi multi-tenant, jadi silakan pilih opsi tersebut.

    1. Untuk informasi selengkapnya tentang penyewa, lihat Siapa yang bisa masuk ke aplikasi Anda?.
  3. Pilih Daftar

  4. Perhatikan ID Application (klien) Anda, karena ini adalah Azure AppId yang akan Anda gunakan selama pendaftaran aktivasi dan permintaan token akses.

  5. Perhatikan ID Directory (penyewa) Anda, karena ini adalah Azure TenantId yang akan Anda gunakan saat meminta token akses.

    Important

    Pendaftaran Aplikasi AAD Penyewa Perhatikan ID Aplikasi (klien) Anda dan ID Direktori (penyewa) Anda .

  6. Perhatikan ID Object, karena ini adalah Azure ObjectId yang akan Anda gunakan saat meminta permintaan saluran. Perhatikan bahwa INI BUKAN ID objek yang tercantum di halaman Esensial . Sebagai gantinya, untuk menemukan ID Objek yang benar, klik nama aplikasi di bidang Aplikasi Terkelola dalam direktori lokal di halaman Essentials .

    Cuplikan layar memperlihatkan opsi Aplikasi terkelola di direktori lokal di halaman Esensial

    Cuplikan layar memperlihatkan bidang ID Objek

    Note

    Perwakilan service diperlukan untuk mendapatkan ID Objek, jika tidak ada yang terkait dengan aplikasi Anda, ikuti langkah-langkah di salah satu artikel berikut untuk membuatnya di portal Azure atau menggunakan baris perintah:

    Gunakan portal untuk membuat aplikasi Azure AD dan prinsipal layanan yang dapat mengakses sumber daya

    Gunakan Azure PowerShell untuk membuat perwakilan layanan dengan sertifikat

Langkah 3: Buat rahasia untuk pendaftaran aplikasi Anda

Rahasia Anda akan digunakan bersama dengan appId/ClientId Azure Anda saat meminta token akses untuk mengirim pemberitahuan push.

Rahasia Aplikasi AAD

Navigasi ke Sertifikat & rahasia dan pilih Rahasia klien baru.

Important

Pastikan Anda menyalin rahasia Anda setelah dibuat dan menyimpannya di lokasi yang aman, seperti Azure Key Vault. Ini hanya akan dapat dilihat sekali setelah pembuatan.

Langkah 4: Petakan Package Family Name aplikasi Anda ke Azure AppId.

Jika aplikasi Anda dikemas (termasuk dikemas dengan lokasi eksternal), Anda dapat menggunakan alur ini untuk memetakan Nama Keluarga Paket (PFN) aplikasi Anda dan appId Azure.

Jika aplikasi Anda adalah aplikasi Win32 paket, buat permintaan pemetaan Nama Keluarga Paket (PFN) dengan mengirim email Win_App_SDK_Push@microsoft.com dengan baris subjek "SDK Aplikasi Windows Permintaan Pemetaan Pemberitahuan Push" dan isi "PFN: [PFN Anda]", AppId: [APPId Anda], ObjectId: [ObjectId Anda]. Permintaan pemetaan selesai setiap minggu. Anda akan diberi tahu setelah permintaan pemetaan Anda selesai.

Setelah memiliki appId, ObjectId, dan rahasia Azure, Anda dapat menambahkan kredensial tersebut ke kode sampel di bawah ini.

Mengonfigurasi aplikasi Anda untuk menerima pemberitahuan push

Langkah 1: Tambahkan SDK Aplikasi Windows dan paket NuGet yang diperlukan

Selanjutnya, klik kanan pada solusi di Penjelajah Solusi dan pilih Kelola Paket NuGet.

Di Package Manager, tambahkan paket berikut:

  • Microsoft. WindowsAppSDK (versi minimum 1.1.0)
  • Microsoft. Windows. SDK. BuildTools (versi minimum 10.0.22000.194)
  • Microsoft. Windows. CppWinRT, (versi minimum 2.0.210930.14)
  • Microsoft. Windows. ImplementationLibrary, (versi minimum 1.0.210930.1)

Jika ini pertama kalinya Anda menggunakan SDK Aplikasi Windows dalam proyek Anda dan dikemas dengan lokasi eksternal atau tidak dikemas, inisialisasi SDK Aplikasi Windows dengan menambahkan properti berikut ke file proyek Anda:

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

atau gunakan API bootstrapper. Lihat Gunakan runtime SDK Aplikasi Windows untuk aplikasi yang dikemas dengan lokasi eksternal atau tidak dikemas untuk detail selengkapnya.

Note

Jika SDK tidak diinisialisasi, aplikasi akan melemparkan System.Runtime.InteropServices.COMException (0x80040154): Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)) dan tidak akan berjalan.

Langkah 2: Tambahkan namespace

Selanjutnya, tambahkan namespace untuk pemberitahuan push SDK Aplikasi Windows Microsoft.Windows.PushNotifications.

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

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

Jika Anda mendapatkan kesalahan "Tidak dapat menemukan Microsoft.Windows.PushNotifications", itu kemungkinan berarti file header belum dihasilkan. Untuk mengatasinya, pastikan Anda memiliki paket di atas yang terinstal, beri komentar pada pernyataan "include" dan "using" yang menyebabkan kesalahan, lalu bangun ulang aplikasi untuk menghasilkan file header. Setelah build berhasil, hapus penanda komentar pada pernyataan include dan using, kemudian kompilasi ulang proyek. Ini akan mengatasi kesalahan.

Langkah 3: Tambahkan aktivator COM ke manifes aplikasi Anda

Important

Jika aplikasi Anda tidak dikemas (artinya, aplikasi tidak memiliki identitas paket saat runtime), maka lewati ke Langkah 4: Daftar dan tanggapi pemberitahuan push pada startup aplikasi.

Jika aplikasi Anda dikemas (termasuk yang dikemas dengan lokasi eksternal): Buka Package.appxmanifest. Tambahkan yang berikut ini ke dalam elemen <Application>. IdGanti nilai , Executable, dan DisplayName dengan nilai khusus untuk aplikasi Anda.

<!--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

Atribut Id di <com:Class> harus diatur ke Azure AppId (ID Aplikasi (klien) dari pendaftaran aplikasi Azure AD Anda). Ini adalah cara SDK Aplikasi Windows menghubungkan aktivasi COM aplikasi Anda ke identitas Azure - ketika WNS mengaktifkan aplikasi Anda untuk memberikan pemberitahuan push latar belakang, aplikasi menggunakan GUID ini untuk menemukan dan meluncurkan server COM yang benar. Gunakan nilai appId Azure yang sama dengan yang Anda catat pada Langkah 1 di atas.

Note

Contoh kelas C++ yang telah selesai untuk contoh ini dapat ditemukan setelah Langkah 5. Langkah 4 dan 5 memberikan panduan langkah demi langkah untuk menambahkan setiap bagian dalam contoh akhir.

Langkah 4: Mendaftar dan merespons pemberitahuan push pada startup aplikasi

Perbarui metode aplikasi main() Anda untuk menambahkan hal berikut:

  1. Daftarkan aplikasi Anda untuk menerima pemberitahuan push dengan memanggil PushNotificationManager::Default().Register().
  2. Periksa sumber permintaan aktivasi dengan memanggil AppInstance::GetCurrent(). GetActivatedEventArgs(). Jika aktivasi dipicu dari pemberitahuan push, tanggapi berdasarkan payload pemberitahuan.

Important

Anda harus memanggil PushNotificationManager::D efault(). Daftar sebelum memanggil AppInstance.GetCurrent.GetActivatedEventArgs.

Menambahkan penanganan aktivitas latar depan

Untuk menangani peristiwa di latar depan, daftarkan handler untuk PushNotificationManager.PushReceived.

Important

Anda juga harus mendaftarkan penanganan aktivitas PushNotificationManager.PushReceived sebelum memanggil PushNotificationManager.Register(). Jika tidak, pengecualian runtime berikut akan dilemparkan:

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

Tambahkan pemeriksaan PushNotificationManager::IsSupported()

Selanjutnya, tambahkan pemeriksaan apakah API PushNotification didukung dengan PushNotificationManager.IsSupported(). Jika tidak, kami sarankan Anda menggunakan polling atau implementasi soket kustom Anda sendiri.

Sekarang setelah ada dukungan pemberitahuan push yang dikonfirmasi, tambahkan perilaku berdasarkan PushNotificationReceivedEventArgs.

Langkah 5: Minta URI Saluran WNS dan daftarkan dengan server WNS

URI Saluran WNS adalah titik akhir HTTP untuk mengirim pemberitahuan push. Setiap klien harus meminta URI Saluran dan mendaftarkannya ke server WNS untuk menerima pemberitahuan push.

Note

URI Saluran WNS kedaluwarsa setelah 30 hari. Minta URI saluran baru pada setiap peluncuran aplikasi daripada menyimpan URI yang sebelumnya. Ketika URI baru berbeda dari apa yang telah disimpan backend Anda, kirim URI yang diperbarui ke layanan cloud Anda sehingga dapat menjaga catatannya tetap terkini. Jangan asumsikan URI akan tetap stabil di antara sesi — memperlakukannya sebagai nilai yang dapat diubah dengan cakupan sesi menghindari kegagalan pengiriman yang tidak terdeteksi yang disebabkan oleh URI saluran yang kedaluwarsa atau usang.

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

Jika Anda mengikuti kode tutorial, tambahkan ID Objek Azure Anda di sini:

// 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

PushNotificationManager akan mencoba membuat URI Saluran, mencoba kembali secara otomatis selama tidak lebih dari 15 menit. Buat penanganan aktivitas untuk menunggu panggilan selesai. Setelah panggilan selesai, jika berhasil, daftarkan URI dengan server WNS.

Contoh Kode

#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;
    }
}

Langkah 6: Buat dan instal aplikasi Anda

Gunakan Visual Studio untuk membangun dan menginstal aplikasi Anda. Klik kanan pada file solusi di Penjelajah Solusi dan pilih Deploy. Visual Studio akan membangun aplikasi Anda dan menginstalnya di komputer Anda. Anda dapat menjalankan aplikasi dengan meluncurkannya melalui Menu Mulai atau debugger Visual Studio.

Konsol kode tutorial akan terlihat seperti ini:

konsol sampel yang berfungsi

Anda memerlukan token untuk mengirim pemberitahuan push ke aplikasi Anda.

Mengirim pemberitahuan push ke aplikasi Anda

Pada titik ini, semua konfigurasi selesai dan server WNS dapat mengirim pemberitahuan push ke aplikasi klien. Dalam langkah-langkah berikut, lihat permintaan server pemberitahuan push dan header respons untuk detail selengkapnya.

Langkah 1: Meminta token akses

Untuk mengirim pemberitahuan push, server WNS terlebih dahulu perlu meminta token akses. Kirim permintaan HTTP POST dengan Azure TenantId, Azure AppId, dan rahasia Anda. Untuk informasi tentang mengambil Azure TenantId dan Azure AppId, lihat Get tenant and app ID values for signing in.

Permintaan Sampel HTTP:

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/

Permintaan Sampel C#:

//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);

Jika permintaan Anda berhasil, Anda akan menerima respons yang berisi token Anda di bidang access_token .

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

Langkah 2. Mengirim pemberitahuan mentah

Buat permintaan HTTP POST yang berisi token akses yang Anda peroleh di langkah sebelumnya dan konten pemberitahuan push yang ingin Anda kirim. Konten pemberitahuan push akan dikirimkan ke aplikasi.

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);");

Langkah 3: Mengirim pemberitahuan aplikasi bersumber cloud

Jika Anda hanya tertarik untuk mengirim pemberitahuan mentah, abaikan langkah ini. Untuk mengirim notifikasi aplikasi yang bersumber dari cloud, juga disebut sebagai notifikasi push toast, pertama-tama ikuti Quickstart: Pemberitahuan aplikasi di SDK Aplikasi Windows. Pemberitahuan aplikasi dapat berupa push (dikirim dari cloud) atau dikirim secara lokal. Mengirim pemberitahuan aplikasi bersumber cloud mirip dengan mengirim pemberitahuan mentah di Langkah 2, kecuali header X-WNS-Type , Content-Type , dan konten berisi payload XML pemberitahuan aplikasi. Lihat skema Pemberitahuan XML untuk informasi selengkapnya tentang cara membuat payload XML Anda.

Buat permintaan HTTP POST yang berisi token akses Anda dan konten pemberitahuan aplikasi bersumber cloud yang ingin Anda kirim. Konten pemberitahuan push akan dikirimkan ke aplikasi.

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