Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
- Windows uygulamaları geliştirmeye başlayın
Windows Uygulama SDK'sı VEYAVar olan bir projede Windows Uygulama SDK'sı kullanın - Windows Uygulama SDK'sı anında iletme bildirimlerini kullanmak için Azure Hesabı gereklidir.
- Anlık bildirimlere genel bakış okuma
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
ö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
Bir uygulama adı belirtin.
Anında iletme bildirimleri çok kiracılı seçeneği gerektirir, bu nedenle bunu seçin.
- Kiracılar hakkında daha fazla bilgi için bkz. Uygulamanızda kimler oturum açabilir?.
Kayıt Seç
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.
Directory (kiracı) kimliğinizi not edin, çünkü bu, erişim belirteci isterken kullanacağınız Azure TenantId olacaktır.
Important
Uygulama (istemci) kimliğinizi ve Dizin (kiracı) kimliğinizi not alın.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ğini bulmak için,Temel Parçalar sayfasındaki yerel dizinindekiYönetilen uygulama alanında uygulama adına tıklayın.
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:
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.
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:
- PushNotificationManager::Default().Register()çağrısı yaparak push bildirimleri almak için uygulamanızı kaydedin.
- 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:
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
Windows developer