Обучение
Схема обучения
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Службы push-уведомлений Windows (WNS) позволяют сторонним разработчикам отправлять всплывающие сообщения, плитки, эмблемы и необработанные обновления из собственной облачной службы. Это обеспечивает энергоэффективный и надежный механизм передачи пользователям свежих обновлений.
На следующей схеме показан полный поток данных для отправки push-уведомления. Он включает следующие действия:
Прежде чем отправлять уведомления с помощью WNS, приложение должно быть зарегистрировано на панели мониторинга Магазина, как описано здесь.
Когда приложение, которое может получать push-уведомления, запускается, он должен сначала запросить канал уведомлений через CreatePushNotificationChannelForApplicationAsync. Полное обсуждение и пример кода см. в разделе "Как запрашивать, создавать и сохранять канал уведомлений". Этот API возвращает URI канала, который однозначно связан с вызывающим приложением и его плиткой, и с помощью которого можно отправлять все типы уведомлений.
После успешного создания URI канала приложение отправляет его в облачную службу вместе с любыми метаданными для конкретного приложения, которые должны быть связаны с этим URI.
Чтобы отправить уведомление, облачная служба должна проходить проверку подлинности через WNS. Первый шаг в этом процессе возникает при регистрации приложения на панели мониторинга Microsoft Store. Во время регистрации приложение получает идентификатор безопасности пакета (SID) и секретный ключ. Эта информация используется облачной службой для проверки подлинности с помощью WNS.
Схема проверки подлинности WNS реализуется с помощью профиля учетных данных клиента из протокола OAuth 2.0 . Облачная служба проходит проверку подлинности с помощью WNS, указав свои учетные данные (идентификатор безопасности пакета и секретный ключ). В обратном случае он получает маркер доступа. Этот маркер доступа позволяет облачной службе отправлять уведомление. Маркер требуется для каждого запроса уведомления, отправленного в WNS.
На высоком уровне информационная цепочка выглядит следующим образом:
При проверке подлинности с помощью WNS облачная служба отправляет HTTP-запрос по протоколу SSL. Параметры предоставляются в формате application/x-www-for-urlencoded. Укажите идентификатор безопасности пакета в поле "client_id" и секретный ключ в поле "client_secret", как показано в следующем примере. Дополнительные сведения о синтаксисе см. в справочнике по запросу маркера доступа.
Примечание
Это просто пример, а не вырезанный и вставленный код, который можно успешно использовать в собственном коде.
POST /accesstoken.srf HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: https://login.live.com
Content-Length: 211
grant_type=client_credentials&client_id=ms-app%3a%2f%2fS-1-15-2-2972962901-2322836549-3722629029-1345238579-3987825745-2155616079-650196962&client_secret=Vex8L9WOFZuj95euaLrvSH7XyoDhLJc7&scope=notify.windows.com
WNS проходит проверку подлинности облачной службы, и при успешном выполнении отправляет ответ "200 ОК". Маркер доступа возвращается в параметрах, включенных в текст ответа HTTP, с помощью типа носителя application/json. После получения маркера доступа служба готова отправлять уведомления.
В следующем примере показан успешный ответ проверки подлинности, включая маркер доступа. Дополнительные сведения о синтаксисе см. в заголовках запросов и ответов службы push-уведомлений.
HTTP/1.1 200 OK
Cache-Control: no-store
Content-Length: 422
Content-Type: application/json
{
"access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=",
"token_type":"bearer"
}
Используя универсальный код ресурса (URI) канала, облачная служба может отправлять уведомление при каждом обновлении для пользователя.
Описанный выше маркер доступа можно повторно использовать для нескольких запросов уведомлений; Облачный сервер не требуется запрашивать новый маркер доступа для каждого уведомления. Если срок действия маркера доступа истек, запрос уведомления вернет ошибку. Мы рекомендуем не пытаться повторно отправить уведомление более одного раза, если маркер доступа отклонен. При возникновении этой ошибки потребуется запросить новый маркер доступа и повторно отправить уведомление. Точный код ошибки см. в разделе "Коды ответов push-уведомлений".
Облачная служба отправляет HTTP POST в URI канала. Этот запрос должен быть выполнен по протоколу SSL и содержит необходимые заголовки и полезные данные уведомления. Заголовок авторизации должен содержать полученный маркер доступа для авторизации.
Ниже показан пример запроса. Дополнительные сведения о синтаксисе см . в кодах ответов push-уведомлений.
Дополнительные сведения о создании полезных данных уведомления см . в кратком руководстве по отправке push-уведомления. Полезные данные плитки, всплывающего уведомления или push-уведомления значка предоставляются как XML-содержимое, соответствующее определенной схеме адаптивных плиток или схеме устаревших плиток. Полезные данные необработанного уведомления не имеют указанной структуры. Оно строго определено приложением.
POST https://cloud.notify.windows.com/?token=AQE%bU%2fSjZOCvRjjpILow%3d%3d HTTP/1.1
Content-Type: text/xml
X-WNS-Type: wns/tile
Authorization: Bearer EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=
Host: cloud.notify.windows.com
Content-Length: 24
<body>
....
WNS отвечает на то, что уведомление получено и будет доставлено по следующей доступной возможности. Однако WNS не предоставляет сквозное подтверждение того, что ваше уведомление получено устройством или приложением.
На этой схеме показан поток данных:
По умолчанию срок действия уведомлений плитки и значка истекает через три дня после скачивания. По истечении срока действия уведомления содержимое удаляется из плитки или очереди и больше не отображается пользователю. Рекомендуется задать срок действия (с помощью времени, которое имеет смысл для приложения) на всех уведомлениях плитки и индикаторов событий, чтобы содержимое плитки не сохранялось дольше, чем это актуально. Явное время окончания срока действия необходимо для содержимого с определенным сроком существования. Это также гарантирует удаление устаревшего содержимого, если облачная служба перестает отправлять уведомления, или если пользователь отключается от сети в течение длительного периода.
Облачная служба может задать срок действия каждого уведомления, задав заголовок HTTP X-WNS-TTL, чтобы указать время (в секундах), которое ваше уведомление останется действительным после отправки. Дополнительные сведения см. в заголовках запросов и ответов службы push-уведомлений.
Например, во время активного торгового дня фондового рынка можно установить срок действия обновления цен на акции в два раза больше, чем интервал отправки (например, через час после получения, если вы отправляете уведомления каждые полчаса). В другом примере приложение новостей может определить, что один день является подходящим временем истечения срока действия для ежедневного обновления плитки новостей.
Экономия батареи расширяет время работы батареи путем ограничения фонового действия на устройстве. Windows 10 позволяет пользователю настроить экономию заряда батареи автоматически, когда заряд батареи снижается ниже указанного порогового значения. Если экономия батареи включена, получение push-уведомлений отключено для экономии энергии. Но есть несколько исключений для этого. Следующие параметры экономии заряда батареи Windows 10 (найденные в приложении "Параметры ") позволяют приложению получать push-уведомления даже при включении экономии батареи.
Нет способа проверить состояние этих двух параметров, но вы можете проверить состояние экономии батареи. В Windows 10 используйте свойство EnergySaverStatus для проверки состояния экономии батареи. Ваше приложение также может использовать событие EnergySaverStatusChanged для прослушивания изменений в экономии батареи.
Если ваше приложение сильно зависит от push-уведомлений, рекомендуется уведомлять пользователей о том, что они могут не получать уведомления во время экономии батареи и упростить настройку параметров экономии батареи. Используя схему URI URI параметров экономии батареи в Windows 10, ms-settings:batterysaver-settings
можно указать удобную ссылку на приложение "Параметры".
Совет
При уведомлении пользователя о параметрах экономии батареи рекомендуется предоставить способ подавления сообщения в будущем. Например, dontAskMeAgainBox
флажок в следующем примере сохраняет предпочтения пользователя в LocalSettings.
Ниже приведен пример того, как проверить, включена ли экономия батареи в Windows 10. В этом примере пользователь уведомляет пользователя и запускает приложение "Параметры" для параметров экономии батареи. Пользователь dontAskAgainSetting
позволяет пользователю подавлять сообщение, если они не хотят получать уведомления снова.
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using Windows.System;
using Windows.System.Power;
...
...
async public void CheckForEnergySaving()
{
//Get reminder preference from LocalSettings
bool dontAskAgain;
var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
object dontAskSetting = localSettings.Values["dontAskAgainSetting"];
if (dontAskSetting == null)
{ // Setting does not exist
dontAskAgain = false;
}
else
{ // Retrieve setting value
dontAskAgain = Convert.ToBoolean(dontAskSetting);
}
// Check if battery saver is on and that it's okay to raise dialog
if ((PowerManager.EnergySaverStatus == EnergySaverStatus.On)
&& (dontAskAgain == false))
{
// Check dialog results
ContentDialogResult dialogResult = await saveEnergyDialog.ShowAsync();
if (dialogResult == ContentDialogResult.Primary)
{
// Launch battery saver settings (settings are available only when a battery is present)
await Launcher.LaunchUriAsync(new Uri("ms-settings:batterysaver-settings"));
}
// Save reminder preference
if (dontAskAgainBox.IsChecked == true)
{ // Don't raise dialog again
localSettings.Values["dontAskAgainSetting"] = "true";
}
}
}
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Storage.h>
#include <winrt/Windows.System.h>
#include <winrt/Windows.System.Power.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Navigation.h>
using namespace winrt;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Storage;
using namespace winrt::Windows::System;
using namespace winrt::Windows::System::Power;
using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::UI::Xaml::Controls;
using namespace winrt::Windows::UI::Xaml::Navigation;
...
winrt::fire_and_forget CheckForEnergySaving()
{
// Get reminder preference from LocalSettings.
bool dontAskAgain{ false };
auto localSettings = ApplicationData::Current().LocalSettings();
IInspectable dontAskSetting = localSettings.Values().Lookup(L"dontAskAgainSetting");
if (!dontAskSetting)
{
// Setting doesn't exist.
dontAskAgain = false;
}
else
{
// Retrieve setting value
dontAskAgain = winrt::unbox_value<bool>(dontAskSetting);
}
// Check whether battery saver is on, and whether it's okay to raise dialog.
if ((PowerManager::EnergySaverStatus() == EnergySaverStatus::On) && (!dontAskAgain))
{
// Check dialog results.
ContentDialogResult dialogResult = co_await saveEnergyDialog().ShowAsync();
if (dialogResult == ContentDialogResult::Primary)
{
// Launch battery saver settings
// (settings are available only when a battery is present).
co_await Launcher::LaunchUriAsync(Uri(L"ms-settings:batterysaver-settings"));
}
// Save reminder preference.
if (dontAskAgainBox().IsChecked())
{
// Don't raise the dialog again.
localSettings.Values().Insert(L"dontAskAgainSetting", winrt::box_value(true));
}
}
}
В этом примере используется XAML для ContentDialog.
<ContentDialog x:Name="saveEnergyDialog"
PrimaryButtonText="Open battery saver settings"
SecondaryButtonText="Ignore"
Title="Battery saver is on.">
<StackPanel>
<TextBlock TextWrapping="WrapWholeWords">
<LineBreak/><Run>Battery saver is on and you may
not receive push notifications.</Run><LineBreak/>
<LineBreak/><Run>You can choose to allow this app to work normally
while in battery saver, including receiving push notifications.</Run>
<LineBreak/>
</TextBlock>
<CheckBox x:Name="dontAskAgainBox" Content="OK, got it."/>
</StackPanel>
</ContentDialog>
Отзыв о Windows developer
Windows developer — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Схема обучения
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Документация
В этом разделе описываются веб-API-интерфейсы службы и протоколы, необходимые для отправки push-уведомления.
Обзор необработанных уведомлений - Windows apps
Узнайте о необработанных уведомлениях, которые являются короткими, push-уведомлениями общего назначения, которые строго инструкции и не включают компонент пользовательского интерфейса.
Как запрашивать, создавать и сохранять канал уведомлений - Windows apps
Как запрашивать, создавать и сохранять канал уведомлений