Добавление push-уведомлений в приложение Windows
Обзор
В этом руководстве мы добавим push-уведомления в простое приложение Windows, чтобы при каждом добавлении новой записи на устройство отправлялось push-уведомление.
Если вы не используете скачанный проект сервера, необходимо добавить пакет расширений для push-уведомлений. Дополнительные сведения о пакетах расширений для сервера см. в статье Работа с пакетом SDK для внутреннего сервера .NET для мобильных приложений Azure.
Настройка концентратора уведомлений
Компонент мобильных приложений в службе приложений Azure использует Центры уведомлений Azure для отправки push-уведомлений, поэтому вам нужно настроить центр уведомлений для мобильного приложения.
На портале Azure щелкните Службы приложений, а затем выберите серверную часть приложения. В разделе Параметры выберите Push.
Чтобы добавить в приложение ресурс концентратора уведомлений, нажмите кнопку Подключить. Вы можете создать центр или подключиться к существующему.
Теперь центр уведомлений подключен к серверной части проекта вашего мобильного приложения. Позднее вы настроите этот концентратор уведомлений, чтобы подключиться к системе отправки уведомлений платформы (PNS), которая отправляет push-уведомления на устройства.
Регистрация приложения для работы с push-уведомлениями
Необходимо отправить приложение в Microsoft Store, а затем настроить серверный проект для интеграции со службами push-уведомлений Windows (WNS) для отправки push-уведомлений.
В Visual Studio Обозреватель решений щелкните правой кнопкой мыши проект приложения UWP, выберите Пункт "Связать приложение Магазина>" с Магазином....
В окне мастера нажмите кнопку Далее, выполните вход с помощью учетной записи Майкрософт, введите имя приложения в поле Зарезервировать новое имя приложения и нажмите кнопку Зарезервировать.
После успешного создания регистрации приложения выберите новое имя приложения, нажмите кнопку Далее, а затем кнопку Связать. Это позволяет добавить необходимые регистрационные данные Microsoft Store в манифест приложения.
Перейдите на портал регистрации приложений и войдите с помощью своей учетной записи Майкрософт. Щелкните приложение для Microsoft Store, которое вы сопоставили на предыдущем шаге.
На странице регистрации запишите значения полей Секреты приложения и SID пакета, которые вам понадобятся позже при настройке серверной части мобильного приложения.
Важно!
Секрет клиента и ИД безопасности пакета — это важные учетные данные для безопасного доступа. Не сообщайте никому эти значения и не распространяйте их вместе со своим приложением. Идентификатор приложения используется с секретным кодом для настройки аутентификации учетной записи Майкрософт .
В разделе об использовании Центра приложений также содержатся инструкции по настройке приложений UWP для push-уведомлений.
Настройка серверной части для отправки push-уведомлений
На портале Azure последовательно выберите Browse All (Просмотреть все)>Службы приложений. Выберите серверную часть для функции "Мобильные приложения". В разделе Параметры выберите Push-уведомления службы приложений. Затем выберите имя концентратора уведомлений.
Откройте Windows (WNS). Ведите ключ безопасности (секрет клиента) и ИД безопасности пакета, полученные на сайте служб Live. Щелкните Сохранить.
Вы настроили серверную часть на использование WNS для отправки push-уведомлений.
Обновление сервера для отправки push-уведомлений
Используйте приведенную ниже процедуру, которая соответствует типу проекта серверной части .NET или Node.js серверной части.
Внутренний проект .NET
В Visual Studio щелкните правой кнопкой мыши серверный проект, затем щелкните Управление пакетами NuGet, найдите пакет Microsoft.Azure.NotificationHubs и нажмите кнопку Установить. Будет установлена клиентская библиотека центров уведомлений.
Разверните Контроллеры, откройте TodoItemController.cs и добавьте следующие операторы using:
using System.Collections.Generic; using Microsoft.Azure.NotificationHubs; using Microsoft.Azure.Mobile.Server.Config;
В метод PostTodoItem добавьте следующий код после вызова InsertAsync.
// Get the settings for the server project. HttpConfiguration config = this.Configuration; MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings(); // Get the Notification Hubs credentials for the Mobile App. string notificationHubName = settings.NotificationHubName; string notificationHubConnection = settings .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString; // Create the notification hub client. NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString(notificationHubConnection, notificationHubName); // Define a WNS payload var windowsToastPayload = @"<toast><visual><binding template=""ToastText01""><text id=""1"">" + item.Text + @"</text></binding></visual></toast>"; try { // Send the push notification. var result = await hub.SendWindowsNativeNotificationAsync(windowsToastPayload); // Write the success result to the logs. config.Services.GetTraceWriter().Info(result.State.ToString()); } catch (System.Exception ex) { // Write the failure result to the logs. config.Services.GetTraceWriter() .Error(ex.Message, null, "Push.SendAsync Error"); }
Этот код заставляет центр уведомлений отправить push-уведомление после вставки элемента задачи.
Повторная публикация серверного проекта
Node.js серверный проект
Настройте внутренний проект.
Замените существующий код в файле todoitem.js следующим кодом:
var azureMobileApps = require('azure-mobile-apps'), promises = require('azure-mobile-apps/src/utilities/promises'), logger = require('azure-mobile-apps/src/logger'); var table = azureMobileApps.table(); table.insert(function (context) { // For more information about the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs logger.info('Running TodoItem.insert'); // Define the WNS payload that contains the new item Text. var payload = "<toast><visual><binding template=\ToastText01\><text id=\"1\">" + context.item.text + "</text></binding></visual></toast>"; // Execute the insert. The insert returns the results as a Promise, // Do the push as a post-execute action within the promise flow. return context.execute() .then(function (results) { // Only do the push if configured if (context.push) { // Send a WNS native toast notification. context.push.wns.sendToast(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } // Don't forget to return the results from the context.execute() return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;
При вставке нового элемента todo будет отправляться всплывающее уведомление WNS, содержащее item.text.
При редактировании этого файла на локальном компьютере повторно опубликуйте серверный проект.
Добавление push-уведомлений в приложение
Затем приложение необходимо зарегистрировать для получения push-уведомлений при запуске. Если аутентификация уже включена, убедитесь, что пользователь выполняет вход прежде, чем пытается зарегистрироваться для использования push-уведомлений.
Откройте файл проекта App.xaml.cs и добавьте следующие
using
инструкции:using System.Threading.Tasks; using Windows.Networking.PushNotifications;
В том же файле добавьте следующее определение метода InitNotificationsAsync в класс App.
private async Task InitNotificationsAsync() { // Get a channel URI from WNS. var channel = await PushNotificationChannelManager .CreatePushNotificationChannelForApplicationAsync(); // Register the channel URI with Notification Hubs. await App.MobileService.GetPush().RegisterAsync(channel.Uri); }
Этот код возвращает ChannelURI для приложения из WNS, а затем регистрирует ChannelURI в мобильном приложении службы приложений.
В верхней части обработчика событий OnLaunched в файле App.xaml.cs добавьте в определение метода модификатор async, а в новый метод InitNotificationsAsync добавьте следующий вызов (как в приведенном ниже примере).
protected async override void OnLaunched(LaunchActivatedEventArgs e) { await InitNotificationsAsync(); // ... }
Это обеспечит регистрацию кратковременного ChannelURI при каждом запуске приложения.
Перестройте проект приложения UWP. Теперь приложение готово к получению всплывающих уведомлений.
Тестирование push-уведомлений в приложении
Щелкните правой кнопкой мыши проект Магазина Windows, выберите пункт Назначить запускаемым проектоми нажмите клавишу F5, чтобы запустить приложение Магазина Windows.
После запуска приложения выполняется регистрация устройства для получения push-уведомлений.
Остановите приложение Магазина Windows и повторите предыдущий шаг для приложения Магазина Windows Phone.
Теперь оба устройства зарегистрированы для получения push-уведомлений.
Запустите приложение Магазина Windows и введите текст в поле Insert a TodoItem (Вставить TodoItem), после чего нажмите кнопку Сохранить.
Обратите внимание: после завершения вставки как приложение Магазина Windows, так и приложение Windows Phone получают push-уведомление из WNS. Уведомление отображается на устройстве Windows Phone, даже если приложение не запущено.
Дальнейшие действия
Дополнительные сведения о push-уведомлениях:
- Использование управляемого клиента для мобильных приложений Azure. Шаблоны обеспечивают гибкость при отправке push-уведомлений локально и между различными платформами. Узнайте, как регистрировать шаблоны.
- Диагностика неполадок, связанных с push-уведомлениями. Существуют различные причины, по которым уведомления могут теряться или не доходить до устройств. В этой статье рассказывается, как проанализировать и определить основную причину сбоев push-уведомлений.
Мы также рекомендуем изучить одно из следующих руководств:
- Добавление аутентификации в приложение. Сведения об аутентификации пользователей приложения с помощью поставщика удостоверений.
- Включение автономной синхронизации для приложения. Узнайте, как добавить поддержку автономной работы приложения с помощью серверной части мобильного приложения. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевое подключение отсутствует.