다음을 통해 공유


기타 유형의 패키지되지 않은 앱에서 로컬 알림 메시지 보내기

이 항목은 C# 또는 C++가 아닌 패키지되지 않은 앱을 개발하는 경우에 적합합니다.

즉, 패키지된 앱을 개발하는 경우가 아니고(패키지된 WinUI 3 데스크톱 앱을 위한 새 프로젝트 만들기 참조), 외부 위치로 패키지된 앱을 개발하지 않으며(외부 위치로 패키징하여 패키지 ID 허용 참조), 앱이 C# 또는 C++가 아닌 경우.

알림 메시지는 사용자가 현재 앱을 사용하지 않는 동안 앱이 생성하여 사용자에게 전달할 수 있는 메시지입니다. 이 빠른 시작에서는 Windows 알림 메시지를 만들고, 전달하며, 표시하는 단계를 안내합니다. 이 빠른 시작에서는 가장 간단한 구현 알림인 로컬 알림을 사용합니다.

Important

C# 앱을 작성하는 경우 C# 설명서를 참조하세요. C++ 앱을 작성하는 경우 C++ UWP 또는 C++ WRL 설명서를 참조하세요.

1단계: 레지스트리에 앱 등록

먼저 앱을 식별하는 고유한 AUMID, 앱의 표시 이름, 아이콘 및 COM 활성화자의 GUID를 포함하여 레지스트리에 앱의 정보를 등록해야 합니다.

<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 활성자 설정

앱이 실행되고 있지 않은 경우에도 언제든지 알림을 클릭할 수 있습니다. 따라서 알림 활성화는 COM 활성자를 통해 처리됩니다. COM 클래스는 INotificationActivationCallback 인터페이스를 구현해야 합니다. COM 클래스의 GUID는 레지스트리 CustomActivator 값에 지정한 GUID와 일치해야 합니다.

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 단계: 알림 보내기

Windows 10에서는 알림 모양을 유연하게 지정할 수 있게 하는 적응형 언어를 사용하여 알림 메시지 콘텐츠를 설명합니다. 자세한 내용은 알림 콘텐츠 설명서를 참조하세요.

간단한 텍스트 기반 알림을 시작합니다. 알림 라이브러리를 사용하여 알림 콘텐츠를 생성하고 알림을 표시합니다.

Important

앱에서 알림이 표시되도록 알림을 보낼 때 이전의 AUMID를 사용해야 합니다.

Simple text notification
// 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자를 초과하는 경우 예약된 알림 메시지가 작동하지 않습니다. 예약된 알림을 추가할 때 다음과 같은 예외가 발생합니다. 시스템 호출에 전달된 데이터 영역이 너무 작습니다(0x8007007A).