次の方法で共有


他の種類のパッケージ化されていないアプリからローカル トースト通知を送信する

このトピックは、C# または C++ 以外のパッケージ化されていないアプリを開発する場合に適しています。

つまり、パッケージ化されたアプリを開発 (パッケージ化された WinUI 3 デスクトップ アプリの新しいプロジェクトを作成するを参照してください)、外部の場所でパッケージ 化されたアプリを開発していない場合 (外部の場所でパッケージ化Grant パッケージ ID を参照)、アプリは C# または C++ ではありません。

トースト通知は、ユーザーが現在アプリを使用していないときに、アプリが構築してユーザーに配信できるメッセージです。 このクイック スタートでは、Windows トースト通知を作成、配信、表示する手順について説明します。 これらのクイック スタートでは、実装する最もシンプルな通知であるローカル通知を使用します。

重要

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 では、トースト通知コンテンツはアダプティブ言語を使用して記述され、通知の表示方法を柔軟に設定できます。 詳細については、 toast コンテンツのドキュメント を参照してください。

まず、シンプルなテキストベースの通知から始めます。 (通知ライブラリを使用して) 通知のコンテンツを作成し、通知を表示します。

重要

アプリから通知が表示されるように、通知を送信するときは、先ほどの AUMID を使用する必要があります。

単純なテキスト通知
// 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)。"