Partilhar via


Enviar uma notificação local app a partir de outros tipos de aplicações não empacotadas

Este tópico é para ti se estiveres a desenvolver uma aplicação não empacotada app que não seja em C# ou C++.

Ou seja, se não estiveres a desenvolver uma aplicação empacotada app (ver Criar um novo projeto para uma aplicação desktop appWinUI 3 empacotada) e não estiveres a desenvolver uma aplicação empacotada app com localização externa (ver Atribuir identidade ao pacote empacotando com localização externa), e se a tua app não for em C# ou C++.

Uma app notificação é uma mensagem que um app pode construir e entregar ao usuário enquanto o usuário não está usando o seu app. Este guia de início rápido orienta você pelas etapas para criar, entregar e exibir uma notificação do Windows app . Este guia de início rápido usa notificações locais, que são a notificação mais simples de implementar.

Note

O termo "toast notificação" está a ser substituído por "app notificação". Ambos os termos se referem ao mesmo recurso do Windows, mas com o tempo eliminaremos gradualmente o uso de "toast notificação" na documentação.

Important

Se você estiver escrevendo um C# app, consulte a documentação do C#. Se você estiver escrevendo um C++ app, consulte a documentação C++ UWP ou C++ WRL .

Passo 1: Registe-se o seu app no sistema

Primeiro, precisa registar as informações do app no registo, incluindo um AUMID exclusivo que identifique o nome de exibição do app, o ícone do app e o GUID de um ativador 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>

Passo 2: Configurar o ativador COM

As notificações podem ser clicadas a qualquer momento, mesmo quando o app não está em execução. Assim, a ativação de notificações é tratada através de um ativador COM. Sua classe COM deve implementar a interface INotificationActivationCallback. O GUID para sua classe COM deve corresponder ao GUID especificado no valor CustomActivator do 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();
        }
    }
};

Etapa 3: enviar uma app notificação

No Windows 10, o app conteúdo da notificação é descrito usando uma linguagem adaptável que permite grande flexibilidade com a aparência da notificação. Consulte a documentação de conteúdo da App notificação para obter mais informações.

Começaremos com uma simples notificação baseada em texto. Construa o conteúdo da notificação (usando a biblioteca de notificações) e mostre a notificação!

Important

Você deve usar o seu AUMID anterior ao enviar a notificação para que a notificação apareça do seu app.

Notificação de texto simples
// 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);

Etapa 4: Gestão da ativação

O seu ativador COM será acionado quando a sua notificação for clicada.

More details

AUMID restrictions

O AUMID deve ter, no máximo, 129 caracteres. Se o AUMID tiver mais de 129 caracteres, as notificações agendadas toast não funcionarão - você terá a seguinte exceção ao adicionar uma notificação agendada: A área de dados passada para uma chamada do sistema é muito pequena. (0x8007007A).