Добавление push-уведомлений в приложение Windows

Обзор

В этом руководстве мы добавим push-уведомления в простое приложение Windows, чтобы при каждом добавлении новой записи на устройство отправлялось push-уведомление.

Если вы не используете скачанный проект сервера, необходимо добавить пакет расширений для push-уведомлений. Дополнительные сведения о пакетах расширений для сервера см. в статье Работа с пакетом SDK для внутреннего сервера .NET для мобильных приложений Azure.

Настройка концентратора уведомлений

Компонент мобильных приложений в службе приложений Azure использует [Центры уведомлений Azure] для отправки push-уведомлений, поэтому вам нужно настроить центр уведомлений для мобильного приложения.

  1. На [портале Azure] щелкните Службы приложений, а затем выберите серверную часть приложения. В разделе Параметры выберите Push.

  2. Чтобы добавить в приложение ресурс концентратора уведомлений, нажмите кнопку Подключить. Вы можете создать центр или подключиться к существующему.

    Настройка концентратора

Теперь центр уведомлений подключен к серверной части проекта вашего мобильного приложения. Позднее вы настроите этот концентратор уведомлений, чтобы подключиться к системе отправки уведомлений платформы (PNS), которая отправляет push-уведомления на устройства.

Регистрация приложения для работы с push-уведомлениями

Вам нужно отправить приложение в Microsoft Store, а затем настроить проект сервера для интеграции с службами уведомлений Windows Push (WNS) для отправки push.

  1. В Visual Studio Solution Explorer, правой кнопкой мыши проекта приложения UWP, нажмите Store > Associate App с магазином ....

    Сопоставление приложения с Microsoft Store

  2. В окне мастера нажмите кнопку Далее, выполните вход с помощью учетной записи Майкрософт, введите имя приложения в поле Зарезервировать новое имя приложения и нажмите кнопку Зарезервировать.

  3. После успешного создания регистрации приложения выберите новое имя приложения, нажмите кнопку Далее, а затем кнопку Связать. Это позволяет добавить необходимые регистрационные данные Microsoft Store в манифест приложения.

  4. Перейдите на портал регистрации приложений и войдите с помощью своей учетной записи Майкрософт. Щелкните приложение для Microsoft Store, которое вы сопоставили на предыдущем шаге.

  5. На странице регистрации запишите значения полей Секреты приложения и SID пакета, которые вам понадобятся позже при настройке серверной части мобильного приложения.

    Сопоставление приложения с Microsoft Store

    Важно!

    Секрет клиента и ИД безопасности пакета — это важные учетные данные для безопасного доступа. Не сообщайте никому эти значения и не распространяйте их вместе со своим приложением. Идентификатор приложения используется с секретным кодом для настройки аутентификации учетной записи Майкрософт .

В разделе об использовании Центра приложений также содержатся инструкции по настройке приложений UWP для push-уведомлений.

Настройка серверной части для отправки push-уведомлений

  1. На портале Azure последовательно выберите Browse All (Просмотреть все) > Службы приложений. Выберите серверную часть для функции "Мобильные приложения". В разделе Параметры выберите Push-уведомления службы приложений. Затем выберите имя концентратора уведомлений.

  2. Откройте Windows (WNS). Ведите ключ безопасности (секрет клиента) и ИД безопасности пакета, полученные на сайте служб Live. Щелкните Сохранить.

    Указание ключа WNS на портале

Вы настроили серверную часть на использование WNS для отправки push-уведомлений.

Обновление сервера для отправки push-уведомлений

Используйте приведенную ниже процедуру, которая соответствует типу вашего серверного проекта —серверный проект .NET или серверный проект Node.js.

Проект бэкэнда .NET

  1. В Visual Studio щелкните правой кнопкой мыши серверный проект, затем щелкните Управление пакетами NuGet, найдите пакет Microsoft.Azure.NotificationHubs и нажмите кнопку Установить. Будет установлена клиентская библиотека центров уведомлений.

  2. Разверните Контроллеры, откройте TodoItemController.cs и добавьте следующие операторы using:

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. В метод 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-уведомление после вставки элемента задачи.

  4. Повторная публикация серверного проекта

Проект бэкэнда Node.js

  1. Настройка бэкэнд-проекта.

  2. Замените существующий код в файле 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.

  3. При редактировании этого файла на локальном компьютере повторно опубликуйте серверный проект.

Добавление push-уведомлений в приложение

Затем приложение необходимо зарегистрировать для получения push-уведомлений при запуске. Если аутентификация уже включена, убедитесь, что пользователь выполняет вход прежде, чем пытается зарегистрироваться для использования push-уведомлений.

  1. Откройте файл проекта App.xaml.cs using и добавьте следующие заявления:

    using System.Threading.Tasks;
    using Windows.Networking.PushNotifications;
    
  2. В том же файле добавьте следующее определение метода 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 в мобильном приложении службы приложений.

  3. В верхней части обработчика событий OnLaunched в файле App.xaml.cs добавьте в определение метода модификатор async, а в новый метод InitNotificationsAsync добавьте следующий вызов (как в приведенном ниже примере).

    protected async override void OnLaunched(LaunchActivatedEventArgs e)
    {
        await InitNotificationsAsync();
    
        // ...
    }
    

    Это обеспечит регистрацию кратковременного ChannelURI при каждом запуске приложения.

  4. Перестройте проект приложения UWP. Теперь приложение готово к получению всплывающих уведомлений.

Тестирование push-уведомлений в приложении

  1. Щелкните правой кнопкой мыши проект Магазина Windows, выберите пункт Назначить запускаемым проектоми нажмите клавишу F5, чтобы запустить приложение Магазина Windows.

    После запуска приложения выполняется регистрация устройства для получения push-уведомлений.

  2. Остановите приложение Магазина Windows и повторите предыдущий шаг для приложения Магазина Windows Phone.

    Теперь оба устройства зарегистрированы для получения push-уведомлений.

  3. Запустите приложение Магазина Windows и введите текст в поле Insert a TodoItem (Вставить TodoItem), после чего нажмите кнопку Сохранить.

    Обратите внимание: после завершения вставки как приложение Магазина Windows, так и приложение Windows Phone получают push-уведомление из WNS. Уведомление отображается на устройстве Windows Phone, даже если приложение не запущено.

Следующие шаги

Дополнительные сведения о push-уведомлениях:

Мы также рекомендуем изучить одно из следующих руководств:

  • Добавление аутентификации в приложение. Сведения об аутентификации пользователей приложения с помощью поставщика удостоверений.
  • Включение автономной синхронизации для приложения. Узнайте, как добавить поддержку автономной работы приложения с помощью серверной части мобильного приложения. Автономная синхронизация позволяет пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные — даже при отсутствии подключения к сети.