Отправка межплатформенных уведомлений с помощью Центров уведомлений Azure

Это руководство основано на предыдущем руководстве Отправка уведомлений определенным пользователям с помощью Центров уведомлений Azure. В этом руководстве описывается, как отправлять push-уведомления на все устройства, зарегистрированные для определенного аутентифицированного пользователя. Этот подход требовал нескольких запросов для отправки уведомления на каждую поддерживаемую клиентскую платформу. Концентраторы уведомлений Azure поддерживают шаблоны, которые позволяют указать, каким образом конкретное устройство должно получать уведомления. Этот метод упрощает отправку кроссплатформенных уведомлений.

В этой статье показано, как использовать шаблоны для отправки уведомления, предназначенного для всех платформ. В этой статье используется один запрос для отправки нейтрального уведомления платформы. Дополнительные сведения о шаблонах см. в разделе Обзор центров уведомлений.

Важно!

Проекты Windows Phone 8.1 и более ранние не поддерживаются в Visual Studio 2019. Дополнительные сведения см. в разделе Ориентация на платформу и совместимость Visual Studio 2019.

Примечание

Центры уведомлений позволяют устройству зарегистрировать несколько шаблонов с помощью одного и того же тега. В этом случае входящее сообщение, предназначенное для этого тега, приводит к отправке на устройство нескольких уведомлений, по одному для каждого шаблона. Этот процесс дает возможность отобразить одно сообщение в нескольких визуальных уведомлениях, например в виде значка и в виде всплывающего уведомления в приложении Магазина Windows.

Отправка кроссплатформенных уведомлений с использованием шаблонов

Примечание

Служба push-уведомлений (Майкрософт) (MPNS) устарела и больше не поддерживается.

В этом разделе используется пример кода, созданный вами в учебнике Отправка уведомлений для конкретных пользователей с помощью центров уведомлений Azure. Вы можете скачать полный образец с GitHub.

Чтобы отправлять кроссплатформенные уведомления с помощью шаблонов, выполните следующие действия.

  1. В Visual Studio в Обозревателе решений разверните папку Контроллеры, а затем откройте файл RegisterController.cs.

  2. Найдите в методе Put блок кода, который создает регистрацию, и замените содержимое switch следующим кодом.

    switch (deviceUpdate.Platform)
    {
        case "mpns":
            var toastTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<wp:Notification xmlns:wp=\"WPNotification\">" +
                    "<wp:Toast>" +
                        "<wp:Text1>$(message)</wp:Text1>" +
                    "</wp:Toast> " +
                "</wp:Notification>";
            registration = new MpnsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate);
            break;
        case "wns":
            toastTemplate = @"<toast><visual><binding template=""ToastText01""><text id=""1"">$(message)</text></binding></visual></toast>";
            registration = new WindowsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate);
            break;
        case "apns":
            var alertTemplate = "{\"aps\":{\"alert\":\"$(message)\"}}";
            registration = new AppleTemplateRegistrationDescription(deviceUpdate.Handle, alertTemplate);
            break;
        case "fcm":
            var messageTemplate = "{\"data\":{\"message\":\"$(message)\"}}";
            registration = new FcmTemplateRegistrationDescription(deviceUpdate.Handle, messageTemplate);
            break;
        default:
            throw new HttpResponseException(HttpStatusCode.BadRequest);
    }
    

    Этот код вызывает метод, используемый на конкретной платформе для регистрации шаблонов вместо собственной регистрации. Регистрация шаблонов является производной от собственной регистрации. Поэтому существующие регистрации изменять не нужно.

  3. В Обозревателе решений в папке Контроллеры откройте файл NotificationsController.cs. Замените метод Post следующим кодом:

    public async Task<HttpResponseMessage> Post()
    {
        var user = HttpContext.Current.User.Identity.Name;
        var userTag = "username:" + user;
    
        var notification = new Dictionary<string, string> { { "message", "Hello, " + user } };
        await Notifications.Instance.Hub.SendTemplateNotificationAsync(notification, userTag);
    
        return Request.CreateResponse(HttpStatusCode.OK);
    }
    

    Этот код отправляет уведомление на все платформы одновременно. Вы не указываете собственные полезные данные. Центры уведомлений создают и доставляют правильные полезные данные для каждого устройства с указанным значением тега в соответствии с зарегистрированными шаблонами.

  4. Повторно опубликуйте свой проект веб-API.

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

  6. При необходимости разверните клиентское приложение на втором устройстве, а затем запустите приложение. Уведомление отображается на каждом из устройств.

Дальнейшие действия

Теперь, когда вы завершили это руководство, узнайте больше о центрах уведомлений и шаблонах в этих статьях: