Compartir a través de


Envío de una notificación local app desde otros tipos de aplicaciones desempaquetadas

Este tema es para usted si está desarrollando un desempaquetado app que no es C# o C++.

Es decir, si no estás desarrollando un paquete app (consulta Crear un nuevo proyecto para un escritorio appde WinUI 3 empaquetado) y no estás desarrollando un empaquetado app con ubicación externa (consulta Conceder identidad de paquete mediante empaquetado con ubicación externa) y app no es C# ni C++.

Una notificación app es un mensaje que app puede construir y entregar al usuario cuando el usuario no está utilizando app actualmente. Este inicio rápido le guía por los pasos para crear, entregar y mostrar una notificación de Windows app . En este inicio rápido se usan las notificaciones locales, que son las más sencillas de implementar.

Note

El término "toast notificación" se va a reemplazar por "app notification". Estos términos hacen referencia a la misma característica de Windows, pero con el tiempo se eliminará el uso de "toast notificación" en la documentación.

Important

Si está escribiendo un C# app, consulte la documentación de C#. Si escribes un C++ app, consulta la documentación de C++ para UWP o C++ WRL .

Paso 1: Registrar app en el Registro

Primero debe registrar la información de tu app en el registro, incluyendo un AUMID único que identifique a tu app, el nombre para mostrar de tu app, tu icono, y un GUID de un activador 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>

Paso 2: Configurar el activador COM

Las notificaciones se pueden hacer clic en cualquier momento dado, incluso cuando app no se está ejecutando. Por lo tanto, la activación de notificaciones se controla a través de un activador COM. La clase COM debe implementar la INotificationActivationCallback interfaz . El GUID de la clase COM debe coincidir con el GUID especificado en el valor CustomActivator del registro.

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();
        }
    }
};

Paso 3: Enviar una app notificación

En Windows 10, el contenido de tu notificación app se describe mediante un lenguaje adaptable que permite una gran flexibilidad con cómo se ve tu notificación. Consulte la documentación del contenido de laApp notificación para obtener más información.

Comenzaremos con una notificación sencilla basada en texto. Construya el contenido de la notificación (mediante la biblioteca de notificaciones) y muestre la notificación.

Important

Debe usar su AUMID anterior al enviar la notificación para que esta aparezca desde su app.

Notificación de texto simple
// 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);

Paso 4: Control de la activación

El activador COM se activará cuando se haga clic en la notificación.

More details

AUMID restrictions

El AUMID debe tener como máximo 129 caracteres. Si el AUMID tiene más de 129 caracteres, las notificaciones programadas toast no funcionarán; obtendrá la siguiente excepción al agregar una notificación programada: el área de datos pasada a una llamada del sistema es demasiado pequeña. (0x8007007A).