Поделиться через


Отправка локального app уведомления из других типов распакованных приложений

Этот раздел предназначен для вас, если вы разрабатываете распаковку app , которая не является C# или C++.

То есть, если вы не разрабатываете упакованное app (см. Создание нового проекта для упакованного рабочего стола app WinUI), и вы не разрабатываете упакованное приложение app с внешним расположением (см. Предоставление удостоверения пакета посредством упаковки с внешним расположением), и ваш проект не на app C# или C++.

Уведомление app — это сообщение, которое app может создавать и доставлять пользователю, пока пользователь не использует ваш app. В этом кратком руководстве описаны действия по созданию, доставке и отображению уведомления Windows app . В этой краткой инструкции используются локальные уведомления, которые являются наиболее простыми для реализации.

Note

Термин "toast уведомление" заменяется на "app уведомление". Эти термины относятся к одной и той же функции Windows, но со временем мы постепенно перестанем использовать термин "toast уведомление" в документации.

Important

Если вы пишете C# app, ознакомьтесь с документацией по C#. Если вы пишете на C++ app, ознакомьтесь с документацией по C++ UWP или C++ WRL.

Шаг 1. Регистрация app в реестре

Сначала необходимо зарегистрировать сведения вашего app в реестре, включая уникальный идентификатор AUMID, который идентифицирует ваш app, отображаемое имя вашего app, значок и GUID активатора COM.

<registryKey keyName="HKEY_LOCAL_MACHINE\Software\Classes\AppUserModelId\<YOUR_AUMID>">
    <registryValue
        name="DisplayName"
        value="My App"
        valueType="REG_EXPAND_SZ" />
    <registryValue
        name="IconUri"
        value="C:\icon.png"
        valueType="REG_EXPAND_SZ" />
    <registryValue
        name="IconBackgroundColor"
        value="AARRGGBB"
        valueType="REG_SZ" />
    <registryValue
        name="CustomActivator"
        value="{YOUR COM ACTIVATOR GUID HERE}"
        valueType="REG_SZ" />
</registryKey>

Шаг 2. Настройка активатора COM

Уведомления можно щелкнуть в любой момент времени, даже если ваше app не запущено. Таким образом, активация уведомлений обрабатывается с помощью активатора COM. Класс COM должен реализовать интерфейс INotificationActivationCallback. GUID для вашего класса COM должен совпадать с GUID, указанным в параметре CustomActivator реестра.

struct callback : winrt::implements<callback, INotificationActivationCallback>
{
    HRESULT __stdcall Activate(
        LPCWSTR app,
        LPCWSTR args,
        [[maybe_unused]] NOTIFICATION_USER_INPUT_DATA const* data,
        [[maybe_unused]] ULONG count) noexcept final
    {
        try
        {
            std::wcout << this_app_name << L" has been called back from a notification." << std::endl;
            std::wcout << L"Value of the 'app' parameter is '" << app << L"'." << std::endl;
            std::wcout << L"Value of the 'args' parameter is '" << args << L"'." << std::endl;
            return S_OK;
        }
        catch (...)
        {
            return winrt::to_hresult();
        }
    }
};

Шаг 3. Отправка app уведомления

В Windows 10 содержимое вашего app уведомления описывается с помощью адаптивного языка, который обеспечивает большую гибкость в том, как выглядит ваше уведомление. Дополнительные сведения см. в документации по содержимомуApp уведомлений.

Начнем с простого текстового уведомления. Создайте содержимое уведомления (с помощью библиотеки уведомлений) и покажите уведомление!

Important

При отправке уведомления необходимо использовать ранее упомянутый AUMID, чтобы уведомление отображалось от вашей app.

Простое текстовое уведомление
// Construct the toast template
XmlDocument doc;
doc.LoadXml(L"<toast>\
    <visual>\
        <binding template=\"ToastGeneric\">\
            <text></text>\
            <text></text>\
        </binding>\
    </visual>\
</toast>");

// Populate with text and values
doc.SelectSingleNode(L"//text[1]").InnerText(L"Andrew sent you a picture");
doc.SelectSingleNode(L"//text[2]").InnerText(L"Check this out, The Enchantments in Washington!");

// Construct the notification
ToastNotification notif{ doc };

// And send it! Use the AUMID you specified earlier.
ToastNotificationManager::CreateToastNotifier(L"MyPublisher.MyApp").Show(notif);

Шаг 4. Обработка активации

Ваш COM активатор будет запущен при щелчке по уведомлению.

Дополнительные сведения

Ограничения AUMID

Значение AUMID должно составлять не более 129 символов. Если AUMID больше 129 символов, запланированные toast уведомления не будут работать, вы получите следующее исключение при добавлении запланированного уведомления: область данных, переданная в системный вызов, слишком мала. (0x8007007A).