Hızlı Başlangıç Kılavuzu: Windows Uygulama SDK'sı anlık bildirimler

Bu hızlı başlangıçta, Windows Uygulama SDK'sı kullanarak anında iletme bildirimleri gönderen ve alan bir masaüstü Windows uygulaması oluşturacaksınız.

Prerequisites

Paketleme gereksinimleri

Windows Uygulama SDK'sı anında iletme bildirimleri hem paketlenmiş hem de gerçekten paketlenmemiş masaüstü uygulamalarını destekler. Ancak en yaygın üretim senaryosu olan arka plan teslimi ve COM etkinleştirmesi için paket kimliği gereklidir . Aşağıdaki tabloda paketleme modelinize göre gerekenler özetlemektedir:

Paketleme modeli COM etkinleştirici gerekli PFN eşlemesi gerekiyor Paketlenmemiş destekleniyor
MSIX paketlenmiş (WinUI 3, paketlenmiş WPF/WinForms) Evet — Package.appxmanifest içinde Evet — PFN eşleme e-postası aracılığıyla Hayır
Harici bir konumla birlikte paketlenmiş Evet — Package.appxmanifest içinde Evet — PFN eşleme e-postası aracılığıyla Hayır
Gerçekten paketlenmemiş (paket kimliği yok) Hayır (3. Adımı atla) Hayır Evet — sınırlı işlevsellik

Important

Uygulamanız paketlenmişse (MSIX veya dış konumla paketlenmişse), anında iletme bildirimlerinin çalışması için uygulamanızın Package Aile Adı (PFN)'ni Azure AppId'ine eşlemeniz gerekir. Eşleme istekleri adresine Win_App_SDK_Push@microsoft.com e-posta ile gönderilir ve haftalık olarak işlenir. Lansmandan önce bu ön hazırlık süresini planlayın.

Ayrıntılar için bkz. Adım 4: Uygulamanızın Paket Aile Adını Azure Uygulama Kimliği ile eşleştirin.

Örnek uygulama

Bu hızlı başlangıçta, Windows Uygulama SDK'sı 1.7'de uygulamanıza anında iletme bildirimleri desteği ekleme adımları gösterilir. GitHub üzerinde bulunan örnek uygulamalarda bu hızlı başlangıçtakine benzer kodlara bakın. Projenize en uygun örnekler için tercih ettiğiniz Windows Uygulama SDK'sı sürümüyle branch'ı gözden geçirmeyi unutmayın.

örnek deposunda bir sürüm dalı seçerek her Windows Uygulama SDK'sı sürümü için örnekler de bulabilirsiniz.

API referansı

Anında iletme bildirimlerine yönelik API başvurusu belgeleri için bkz. Microsoft.Windows.PushNotifications Ad Alanı.

Uygulamanızın kimliğini Microsoft Entra ID'de yapılandırın

Windows Uygulama SDK'sı’deki anlık bildirimler, Microsoft Entra ID’den (eski adıyla Azure Active Directory) alınan kimlikleri kullanır. Azure kimlik bilgileri, WNS Kanal URI'sini istediğinizde ve anında iletme bildirimleri göndermek için erişim belirteçleri istediğinizde gereklidir. Not: Windows Uygulama SDK'sı anında iletme bildirimlerini Microsoft İş Ortağı Merkezi ile kullanmayı DESTEKLEMİYORUZ.

1. Adım: Uygulama kaydı oluşturma

Azure hesabınızda oturum açın ve yeni bir Uygulama Kaydı kaynağı oluşturun. Yeni kayıtseçin.

2. Adım: Bir ad girin ve çok kiracılı bir seçenek belirleyin

  1. Bir uygulama adı belirtin.

  2. Anında iletme bildirimleri çok kiracılı seçeneği gerektirir, bu nedenle bunu seçin.

    1. Kiracılar hakkında daha fazla bilgi için bkz. Uygulamanızda kimler oturum açabilir?.
  3. Kayıt Seç

  4. Application (istemci) kimliğinizi not edin, bu sizin etkinleştirme kaydı ve erişim belirteci isteği sırasında kullanacağınız Azure AppId'dir.

  5. Directory (kiracı) kimliğinizi not edin, çünkü bu, erişim belirteci isterken kullanacağınız Azure TenantId olacaktır.

    Important

    Uygulama ve Dizin Kimliklerini gösteren Uygulama Kaydı Uygulama (istemci) kimliğinizi ve Dizin (kiracı) kimliğinizi not alın.

  6. Object ID'nizi not edin; bu, kanal isteğinde bulunurken kullanacağınız Azure ObjectId olacaktır. Bunun Temel Parçalar sayfasında listelenen nesne kimliği DEĞİlDİĞİNE dikkat edin. Bunun yerine, doğru Nesne Kimliğinibulmak için, Temel Parçalar sayfasındaki yerel dizinindeki Yönetilen uygulama alanında uygulama adına tıklayın.

    Temel Parçalar sayfasındaki Yönetilen uygulama yerel dizin seçeneğini gösteren ekran görüntüsü

    Nesne Kimliği alanını gösteren ekran görüntüsü

    Note

    Nesne Kimliği almak için hizmet sorumlusu gereklidir; uygulamanızla ilişkilendirilmiş bir tane yoksa, Azure portalında veya komut satırını kullanarak aşağıdaki makalelerden birinde yer alan adımları izleyin:

    Kaynaklara erişebilen bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturmak için portalı kullanın

    Sertifikayla hizmet sorumlusu oluşturmak için Azure PowerShell kullanın

3. Adım: Uygulama kaydınız için bir gizli anahtar oluşturma

Gizli anahtarınız, push bildirimleri göndermek için bir erişim belirteci istediğinizde Azure AppId/ClientId kullanıcı adınız ile birlikte kullanılacaktır.

Uygulama kaydı parolası

Sertifikalar ve sırlar bölümüne gidin ve Yeni istemci sırrı seçin.

Important

Oluşturduğunuz gizli bilgiyi kopyaladığınızdan emin olun ve Azure Key Vault gibi güvenli bir konumda saklayın. Oluşturulduktan hemen sonra yalnızca bir kez görüntülenebilir.

4. Adım: Uygulamanızın Paket Aile Adını Azure AppId ile eşleme

Uygulamanız paketlenmişse (dış konumla paketlenmiş dahil), uygulamanızın Paket Aile Adı (PFN) ile Azure AppId'sini eşlemek için bu akışı kullanabilirsiniz.

Uygulamanız paketlenmiş bir Win32 uygulamasıysa, "Windows Uygulama SDK'sı Anında İletme Bildirimleri Eşleme İsteği" e-posta konusu ile Win_App_SDK_Push@microsoft.com adresine "[PFN'niz]: PFN", "[APPId]: AppId", "[ObjectId]: ObjectId" içeriğinde bir Paket Aile Adı (PFN) eşleme isteği oluşturun. Haritalama istekleri haftalık olarak tamamlanır. Eşleme isteğiniz tamamlandıktan sonra size bildirilir.

Azure AppId'unuz, ObjectId'unuz ve gizli anahtarınızı aldıktan sonra, bu kimlik bilgilerini aşağıdaki örnek koda ekleyebilirsiniz.

Uygulamanızı anında iletme bildirimleri alacak şekilde yapılandırma

1. Adım: Windows Uygulama SDK'sı ve gerekli NuGet paketlerini ekleme

Ardından, Çözüm Gezgini çözüme sağ tıklayın ve NuGet Paketlerini Yönet öğesini seçin.

Paket Yöneticisi aşağıdaki paketleri ekleyin:

  • Microsoft. WindowsAppSDK (en düşük sürüm 1.1.0)
  • Microsoft. Windows. SDK. BuildTools (en düşük sürüm 10.0.22000.194)
  • Microsoft. Windows. CppWinRT, (en düşük sürüm 2.0.210930.14)
  • Microsoft. Windows. ApplicationLibrary, (en düşük sürüm 1.0.210930.1)

Projenizde ilk kez Windows Uygulama SDK'sı kullanıyorsanız ve bu SDK harici bir konumla paketlenmiş veya hiç paketlenmemişse, proje dosyanıza aşağıdaki özelliği ekleyerek Windows Uygulama SDK'sı'yı başlatın:

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

veya önyükleyici API'sini kullanın. Daha fazla bilgi için harici konumla paketlenmiş veya paketlenmemiş uygulamalarda Windows Uygulama SDK çalışma zamanını kullanma kısmına bakın.

Note

SDK başlatılmazsa, uygulama System.Runtime.InteropServices.COMException (0x80040154): Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)) hatası oluşturur ve çalışmaz.

2. Adım: Ad alanları ekleme

Ardından, Windows Uygulama SDK'sı anında iletme bildirimleri için ad alanını Microsoft.Windows.PushNotifications ekleyin.

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

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

"Microsoft.Windows.PushNotifications bulunamıyor" hatası, büyük olasılıkla üst bilgi dosyalarının oluşturulmamış olabileceği anlamına gelir. Sorunu çözmek için yukarıdaki paketlerin yüklü olduğundan emin olun, hataya neden olan include ve using deyimlerini yorum satırı yaparak devre dışı bırakın. Uygulamayı yeniden oluşturarak başlık dosyalarını oluşturun. Derleme başarılı olduktan sonra include ve using deyimlerini açın ve projeyi yeniden derleyin. Bu, hatayı çözecektir.

3. Adım: COM etkinleştiricinizi uygulamanızın bildirimine ekleme

Important

Uygulamanız paketten çıkarılmışsa (yani çalışma zamanında paket kimliği eksikse), 4. Adım: Uygulama başlatma sırasında anında iletme bildirimlerine kaydolma ve bunlara yanıt verme bölümüne atlayın.

Uygulamanız paketlenmişse (dış bir konumla birlikte paketlenmişse): Package.appxmanifestaçın. <Application> öğesinin içine aşağıdakileri ekleyin. Id, Executableve DisplayName değerlerini uygulamanıza özgü değerlerle değiştirin.

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

Id içindeki <com:Class> özniteliği, Azure AppId olarak ayarlanmalıdır (Microsoft Entra ID uygulama kaydınızdaki Uygulama (istemci) Kimliği). Windows Uygulama SDK'sı uygulamanızın COM etkinleştirmesini Azure kimliğine bu şekilde bağlar. WNS arka plan anında iletme bildirimi göndermek için uygulamanızı etkinleştirdiğinde, doğru COM sunucusunu bulmak ve başlatmak için bu GUID'yi kullanır. Yukarıdaki 1. Adımda not ettiğiniz Azure AppId değerini kullanın.

Note

Bu örnek için tamamlanmış C++ sınıfı örneği 5. Adımdan sonra bulunabilir. 4. ve 5. adımlarda, son örnekteki her bir parçayı eklemek için adım adım yönergeler sağlanır.

4. Adım: Uygulama başlangıcında anında iletme bildirimlerine kaydolma ve bu bildirimlere yanıt verme

Aşağıdakileri eklemek için uygulamanızın main() yöntemini güncelleştirin:

  1. PushNotificationManager::Default().Register()çağrısı yaparak push bildirimleri almak için uygulamanızı kaydedin.
  2. AppInstance::GetCurrent() öğesini çağırarak etkinleştirme isteğinin kaynağını denetleyin. GetActivatedEventArgs(). Başlatma bir anlık bildirimden tetiklendiyse, bildirimin yüküne göre yanıt verin.

Important

PushNotificationManager::Default().Register çağrısını yapmalısınız. Bu işlem, AppInstance.GetCurrent.GetActivatedEventArgsçağrısını yapmadan önce gerçekleştirilmelidir.

Ön plan olay işleyicileri ekleme

Ön planda bir olayı işlemek için PushNotificationManager.PushReceived için bir işleyici kaydedin.

Important

PushNotificationManager.Register() çağrısı yapmadan önce tüm PushNotificationManager.PushReceived olay işleyicilerini de kaydetmeniz gerekir. Aksi takdirde, aşağıdaki çalışma zamanı istisnası oluşturulur:

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

PushNotificationManager::IsSupported() denetimini ekleyin

Ardından PushNotification API'lerinin PushNotificationManager.IsSupported() ile desteklenip desteklenmediğini denetleyin. Aksi takdirde yoklama veya kendi özel socket uygulamanızı kullanmanızı öneririz.

Artık onaylanmış anlık bildirim desteği olduğuna göre PushNotificationReceivedEventArgs temelinde davranış ekleyebilirsiniz.

5. Adım: WNS Kanal URI'sini isteme ve WNS sunucusuna kaydetme

WNS Kanal URI'leri anında iletme bildirimleri göndermeye yönelik HTTP uç noktalarıdır. Her istemcinin bir Kanal URI'sini istemesi ve anında iletme bildirimleri almak için bunu WNS sunucusuna kaydetmesi gerekir.

Note

WNS Kanal URI'lerinin süresi 30 gün sonra dolar. Öncekini önbelleğe almak yerine her uygulama başlatmada yeni bir kanal URI'sini isteyin. Yeni URI arka ucunuzun depoladığından farklı olduğunda, kayıtlarını güncel tutabilmesi için güncelleştirilmiş URI'yi bulut hizmetinize gönderin. URI'nin oturumlar arasında kararlı kalacağını varsaymayın; bunu değiştirilebilir, oturum kapsamlı bir değer olarak kabul etmek, süresi dolan veya eski kanal URI'lerinden kaynaklanan sessiz teslim hatalarını önler.

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

Öğretici kodunu takip ediyorsanız buraya Azure Nesne Kimliğinizi ekleyin:

// To obtain an Entra ID RemoteIdentifier for your app,
// follow the instructions on https://learn.microsoft.com/entra/identity-platform/quickstart-register-app
winrt::guid remoteId{ "00000000-0000-0000-0000-000000000000" }; // Replace this with your own Azure ObjectId

PushNotificationManager bir Kanal URI'si oluşturmayı dener ve en fazla 15 dakika boyunca otomatik olarak yeniden dener. Çağrının tamamlanmasını beklemek için bir olay işleyicisi oluşturun. Çağrı tamamlandıktan sonra başarılı olursa URI'yi WNS sunucusuna kaydedin.

Örnek Kod

#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 Entra ID RemoteIdentifier for your app,
// follow the instructions on https://learn.microsoft.com/entra/identity-platform/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. Adım: Uygulamanızı derleme ve yükleme

Uygulamanızı derlemek ve yüklemek için Visual Studio kullanın. Çözüm Gezgini çözüm dosyasına sağ tıklayın ve Deploy öğesini seçin. Visual Studio uygulamanızı derleyip makinenize yükler. Uygulamayı Başlat Menüsü veya Visual Studio hata ayıklayıcısı aracılığıyla başlatarak çalıştırabilirsiniz.

Öğretici kodunun konsolu şöyle görünür:

çalışan örnek konsol

Uygulamanıza anında iletme bildirimi göndermek için belirteci kullanmanız gerekir.

Uygulamanıza anında iletme bildirimi gönderme

Bu noktada tüm yapılandırma tamamlanır ve WNS sunucusu istemci uygulamalarına anında iletme bildirimleri gönderebilir. Aşağıdaki adımlarda, daha fazla ayrıntı için Anında iletme bildirimi sunucusu isteğine ve yanıt üst bilgilerine bakın.

1. Adım: Erişim belirteci isteme

Anında iletme bildirimi göndermek için WNS sunucusunun önce erişim belirteci istemesi gerekir. Azure TenantId, Azure AppId ve gizli dizinizle bir HTTP POST isteği gönderin. Azure TenantId ve Azure AppId alma hakkında bilgi için bkz. Oturum açmak için kiracı ve uygulama kimliği değerlerini alma.

HTTP Örnek İsteği:

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# Örnek İsteği:

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

İsteğiniz başarılı olursa, access_token alanında belirtecinizi içeren bir yanıt alırsınız.

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

Adım 2. Ham bildirim gönderme

Önceki adımda aldığınız erişim belirtecini ve göndermek istediğiniz anında iletme bildiriminin içeriğini içeren bir HTTP POST isteği oluşturun. Anında iletme bildiriminin içeriği uygulamaya teslim edilecek.

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. Adım: Bulut kaynaklı uygulama bildirimi gönderme

Yalnızca ham bildirimler göndermek istiyorsanız bu adımı göz ardı edin. Bulut kaynaklı bir uygulama bildirimi, başka bir deyişle anında iletme bildirimi göndermek için önce Windows Uygulama SDK'sı içindeki Hızlı Başlangıç: Uygulama bildirimleri kılavuzunu izleyin. Uygulama bildirimleri buluttan ya da yerel olarak gönderilebilir. Bulut kaynaklı uygulama bildirimi göndermek, X-WNS-Type üst bilgisinin olması, toastolması ve içerikte uygulama bildirimi XML yükünün yer aldığı durumlar dışında text/xmlham bildirim göndermeye benzer. XML yükünüzü oluşturma hakkında daha fazla bilgi için bkz. Notifications XML şeması.

Erişim belirtecinizi ve göndermek istediğiniz bulut kaynaklı uygulama bildiriminin içeriğini içeren bir HTTP POST isteği oluşturun. Anında iletme bildiriminin içeriği uygulamaya teslim edilecek.

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