通知の使用

提供: RAD Studio
移動先: 案内検索

マルチデバイス アプリケーションでの RTL の使用 への移動


通知とは、何かについて情報を伝えたり警告するためにアプリケーションが送信するメッセージです。

メモ: このトピックは、ローカル通知、つまりデバイス アプリケーションが送信にする通知についてです。リモート通知については、「プッシュ通知」を参照してください。

RAD Studio は、マルチデバイス通知を管理するための、TNotificationCenter コンポーネントを提供します。通知センターでは、実行しているアプリケーションからメッセージを送信することができます。アプリケーションは、通知を使用して、なんらかの事柄に対してユーザーに通達することができます。

TNotification コンポーネントは、アプリケーションが通知センターに送信するメッセージで、プラットフォームごとに指定された通知領域に表示されます。

Windows 用の通知は VCL を使って、マルチデバイス アプリケーション用の通知は FireMonkey を使って作成することができます。

プラットフォームごとの通知のサポート

項目 Windows macOS iOS Android
プラットフォーム サポート
Checkmark.svg

Windows 10 および Windows 8

Checkmark.svg

10.8 以降

Checkmark.svg
Checkmark.svg
通知領域の名前 アクション センター 通知センター 通知センター 通知ドロワー
TNotification
TNotification.Name
Checkmark.svg
Checkmark.svg
Checkmark.svg
Checkmark.svg
TNotification.AlertBody
Checkmark.svg
Checkmark.svg
Checkmark.svg

必須

Checkmark.svg
TNotification.Title
Checkmark.svg
Checkmark.svg

タイトルが設定されていなければ、アプリケーション名がタイトルとして使用されます。

サポートされていません。

アプリケーション名がタイトルとして使用されます。

Checkmark.svg

タイトルが設定されていなければ、アプリケーション名がタイトルとして使用されます。

TNotification.FireDate サポートされていません。
Checkmark.svg
Checkmark.svg
Checkmark.svg
TNotification.Number サポートされていません。 サポートされていません。
Checkmark.svg

バッジ数を設定します。

Checkmark.svg
TNotification.EnableSound
Checkmark.svg
Checkmark.svg
Checkmark.svg
Checkmark.svg
TNotification.AlertAction サポートされていません。
Checkmark.svg
Checkmark.svg
サポートされていません。
TNotification.HasAction サポートされていません。
Checkmark.svg
Checkmark.svg
サポートされていません。
TNotification.RepeatInterval サポートされていません。
Checkmark.svg
Checkmark.svg
Checkmark.svg
TCustomNotificationCenter
TCustomNotificationCenter.ApplicationIconBadgeNumber サポートされていません。 サポートされていません。

OS X バッジのサンプルを参照。

Checkmark.svg
サポートされていません。
TCustomNotificationCenter.ScheduleNotification サポートされていません。
Checkmark.svg
Checkmark.svg
Checkmark.svg
TCustomNotificationCenter.PresentNotification
Checkmark.svg
Checkmark.svg
Checkmark.svg
Checkmark.svg

Windows の通知

トースト通知は、以下のバージョンの Windows で使用できます。

  • Windows 8: Windows 8 では、短時間だけ通知が表示されます。その後でユーザーがその通知にアクセスすることはできません。
  • Windows 10: Windows 10 では、短時間だけ通知が表示されます。その後は、アクション センターでその通知を確認することができます。

アクション センターにアクセスして通知を見るには、タスクバーに表示されるアクション センター アイコンをクリックします。このアイコンは、未確認の通知があるかどうかに応じて変化します。

未確認の通知がある場合 未確認の通知がない場合
W10-NotificationsPending.png W10-NoNotificationsPending.png

macOS の通知

macOS は、バージョン 10.8 以降、通知をサポートしています。 macOS についての詳しい情報については、「macOS 通知センターの使用」を参照してください。

iOS の通知

通知権限

iOS 上で通知を使用するには、通知権限をアプリケーションに追加します:

  1. [プロジェクト|オプション...|バージョン情報を選択します。
  2. 適切な iOS ターゲット プラットフォームを選択します。
  3. キー/値リストボックスで、FMLocalNotificationPermissionTrue に設定します。
FMLocalNotificationPermission.png

通知ダイアログ

iOS では、アプリケーションの通知をバナーとダイアログのどちらで表示するかを、ユーザーが設定することができます。バナーは短時間だけ画面に表示されて消えますが、ダイアログはユーザーが確認するまで画面に表示され続けます。

通知をダイアログとして表示させるには、エンド ユーザーが iOS デバイスでアプリケーションの通知設定を開き、 [ロックされていないときの通知のスタイル]の設定を[ダイアログ]に変更する必要があります。

通知の作成

通知メッセージを作成するには TNotification クラスを使用します。TNotification のインスタンスを管理するための TNotificationCenter コンポーネントが必要です。

フォームに TNotificationCenter コンポーネントを配置したら、TNotification 変数を宣言し、CreateNotification メソッドを呼び出して通知を作成することができます。

Delphi の場合:
MyNotification:= NotificationCenter1.CreateNotification;
C++ の場合:
TNotification *MyNotification = NotificationCenter1->CreateNotification();

通知を作成したら、少なくとも次のフィールドを設定することをお勧めします。

  • Name: 通知を識別するための一意の名前を設定します。
  • AlertBody: 通知のテキストを設定します。iOS では AlertBody フィールドは必須です。

その他に、通知の次の設定を管理することができます。

  • Title: 通知のタイトルを設定します。この Title フィールドは iOS では使われません。iOS では常にアプリケーション名がタイトルとして表示されます。
  • Number: このフィールドを使用して、Android の通知数や iOS のアプリケーション バッジ数を更新します。
  • ApplicationIconBadgeNumber: このプロパティを使用して iOS のアプリケーション バッジ数を更新します。
iOS のバッジ数 Android の通知数
IOSNotification.PNG Android Notification with number.png

通知チャネルの作成

メモ: Android 8.0 リリースより、すべての「通知」を 通知チャネル に割り当てる必要があります。

フォールバック「通知チャネル」は、次の場合でのみ作成されます:

  • アプリケーションが、「gcm.notification.android_channel_id」キーが設定されていない「プッシュ通知ペイロード」を受信したとき、デフォルトの「通知チャンネル ID」が設定されていない場合
  • アプリケーションが、「gcm.notification.android_channel_id」キーが設定されていない「プッシュ通知ペイロード」を受信したとき、デフォルトの「通知チャンネル ID」は設定されているが、デフォルトの「通知チャンネル」がコードで作成されていない場合
  • アプリケーションが、「gcm.notification.android_channel_id」キーが設定されている「プッシュ通知ペイロード」を受信したとき、その「通知チャンネル」はコードで作成されておらず、デフォルトの「通知チャンネル ID」が設定されていない場合
  • アプリケーションが、「gcm.notification.android_channel_id」キーが設定されている「プッシュ通知ペイロード」を受信したとき、その「通知チャンネル」はコードで作成されておらず、デフォルトの「通知チャンネル ID」は設定されているが、デフォルトの「通知チャンネル」がコードで作成されていない場合

「通知チャネル」の操作は、TNotificationCenter クラスの次のメソッドで行われます:

function CreateChannel: TChannel; overload;
function CreateChannel(const AId: string; const ATitle: string; const ADescription: string = ''): TChannel; overload;
procedure CreateOrUpdateChannel(const AChannel: TChannel);
procedure DeleteChannel(const AChannelId: string);
procedure GetAllChannels(const AChannels: TChannels);

カスタム「通知チャンネル」を作成し、それをデフォルトに設定する

フォールバック「通知チャンネル」の「説明」を変更する必要はなく、次の手順に従って、作成を回避すればいい点に留意してください:

1. カスタム「通知チャンネル」をコードで作成します:

procedure CreateDefaultNotificationChannel;
var
 NotificationChannel: TChannel;
begin
 NotificationChannel := NotificationCenter.CreateChannel;
 NotificationChannel.Id := 'custom_notification_channel';
 NotificationChannel.Title := 'Custom notification channel';
 NotificationChannel.Description := 'Notification channel used for Firebase';
 NotificationChannel.Importance := TImportance.High; // NOTE: This is a 'heads-up notification'.
 
 NotificationCenter.CreateOrUpdateChannel(NotificationChannel);
end;

2. デフォルト「通知チャンネル ID」をプロジェクト オプションで設定します:

  • [プロジェクト|オプション...]メニュー項目をクリック
  • [アプリケーション|サービス]オプション ページに移動
  • [デフォルトのローカル通知チャネル ID]を[custom_notification_channel]に変更
  • プロジェクト オプションへの変更を保存

3. 新しいプロジェクト オプションが有効になっていることを確認します:

  • アプリケーションをビルドおよび配置
  • 生成された AndroidManifest.xml ファイルを開く
  • 次の meta-data 宣言を検索

<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="custom_notification_channel" />

4. 「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信します:

  • Android デバイス上で...
    • アプリケーションを起動します
    • テスト デバイスの[設定]アプリを開きます
    • 設定項目[アプリと通知]をタップします
    • アプリに該当するリスト項目をタップします
    • 設定項目[通知]をタップします
    • 「Custom notification channel」が[通知チャンネル]のリストにあることを確認してください。
  • Windows ホスト上で...
    • 「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信し、「デバイスの登録トークン」を設定します。
  • Android デバイスに戻って...
    • テスト デバイスの[設定]アプリを開きます
    • 設定項目[アプリと通知]をタップします
    • アプリに該当するリスト項目をタップします
    • 設定項目[通知]をタップします
    • 「Notification channel for Firebase」が[通知チャンネル]のリストにないことを確認してください。
メモ: フォールバックの「通知チャネル」を作成しないようにするのに、「プッシュ通知ペイロード」で「通知チャネル ID」を設定して、「プッシュ通知」をデフォルトの「通知チャネル」に割り当てる必要はありません。

複数の「通知チャネル」を作成し、それらに「プッシュ通知」を割り当てる

複数の「通知チャネル」を作成するには、コードで複数の「通知チャネル」を作成し、「プッシュ通知ペイロード」内で「通知チャネル ID」を設定する必要があります。

複数の「通知チャネル」を作成し、それらに「プッシュ通知」を割り当てるには、次の手順に従ってください。以下は、「プッシュ通知」を「通知チャネル」に割り当てるために使用できるすべての方法で、「プッシュ通知ペイロード」で「通知チャネル ID」を設定するか、プロジェクト オプションでデフォルトの「通知チャネル ID」を設定します。

コードで複数の「通知チャネル」を作成するには、次の手順に従ってください:

procedure CreateNotificationChannel(const Id: string; const Title: string; const Description: string; Importance: TImportance);
var
 NotificationChannel: TChannel;
begin
 NotificationChannel := NotificationCenter.CreateChannel;
 NotificationChannel.Id := Id;
 NotificationChannel.Title := Title;
 NotificationChannel.Description := Description;
 NotificationChannel.Importance := Importance;
 NotificationCenter.CreateOrUpdateChannel(NotificationChannel);
end;

「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信するには、次の手順に従います:

  1. まず、Windows ホストで、アプリケーションをビルドし起動します。
  2. Android デバイス上で:
    1. テスト デバイスの[設定]アプリを開きます。
    2. 設定項目[アプリと通知]をタップします
    3. アプリに該当するリスト項目をタップします
    4. 設定項目[通知]をタップします
    5. 自分の複数の通知チャネルがリストに表示されているか確認してください。
  3. Windows ホスト上で:
    1. 「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信し、「デバイスの登録トークン」と「通知チャンネル ID」を設定します。

「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信するために使用するアプローチに応じて、適切なものを設定します:

再び、Android デバイス上で:

  1. テスト デバイスの[設定]アプリを開きます
  2. 設定項目[アプリと通知]をタップします
  3. アプリに該当するリスト項目をタップします
  4. 設定項目[通知]をタップします
  5. 「Notification channel for Firebase」が[通知チャンネル]のリストにないことを確認してください。

通知の発生

FireDate を使用して、通知を発生させる日時を設定することができます。

通知を発生させる時間という観点で、作成する通知は次の 2 種類に分けることができます。

即時通知

デフォルトで、FireDateNow に設定されます。つまり、FireDate の値を変更しなければ通知がすぐに発生します。

予約通知

任意の時刻に発生するよう通知をスケジュールすることができます。通知を発生させたい日時FireDate を設定してください。

特定の日時に通知を発生させる

特定の日時に通知が発生するよう設定することができます。たとえば 2015年12月16日午後5時30分に通知を発生させるには、FireDate を次のように設定します。

Delphi の場合:
MyNotification.FireDate := EncodeDateTime(2015, 12, 16, 17, 30, 00, 00);
C++ の場合:
MyNotification->FireDate = System::Dateutils::EncodeDateTime(2015, 12, 16, 17, 30, 00, 00);

特定の日時に通知をスケジュールする場合、設定した FireDate が既に過ぎていれば通知がすぐに発生することに注意してください。

ある時間が過ぎたら通知を発生させる

ある時間が過ぎたら通知が発生するよう設定することができます。たとえば、1分30秒後に通知を発生させるには、次のように設定します。

Delphi の場合:
MyNotification.FireDate := Now + EncodeTime(0, 1, 30, 0);
C++ の場合:
MyNotification->FireDate = Now() + EncodeTime(0, 1, 30, 0);

通知をスケジュールした後、同じ名前の別の通知(予約通知でもそうでなくても)を作成すると、先にスケジュールされているその名前の通知は上書きされます。

通知の繰り返し

RepeatInterval を使用して、ある時間ごとに繰り返すよう通知をスケジュールすることができます。TRepeatInterval に定義された間隔の種類(NoneSecondMinuteHourDayWeekWeekdayMonthQuarterYearEra)のいずれかを使用することができます。

警告: RepeatInterval を使用してある時間ごとに繰り返すよう通知をスケジュールすると、アプリケーションが終了した後でも通知が繰り返し発生します。必ず通知のキャンセルを適切に行ってください。

たとえば、1 時間ごとに通知を繰り返すには、次のように設定します。

Delphi の場合:
MyNotification.RepeatInterval := TRepeatInterval.Hour;
C++ の場合:
MyNotification->RepeatInterval = TRepeatInterval::Hour;

通知音

通知音の有効化

通知音は、EnableSound を使って有効または無効にすることができます。デフォルトで EnableSoundTrue に設定されています。

  • macOS および iOS の場合、通知音を有効にしていても、アプリケーションがフォアグラウンドで動作している場合には通知音が鳴りません。macOS および iOS では、アプリケーションがバックグラウンドで動作しているか閉じている場合に、通知音が鳴ります。
  • Windows の場合、EnableSoundTrue(無効)になっていても、通知音はなります。この音を無効にするには、これを False(無効)に設定します。

通知音のカスタマイズ

SoundName に通知用の音声を設定することで、通知音をカスタマイズすることができます。

カスタム通知音を追加する手順は以下のとおりです。

  1. サウンド ファイルを、プロジェクト ウィンドウで、プロジェクト名にドラッグ&ドロップし、確認ダイアログで[はい]をクリックします。
  2. [プロジェクト|配置を開き、プラットフォームごとにファイルのリモート パスを正しく設定します。
    • iOS の場合:.\
  3. カスタム通知音の名前を指定します。SoundName をプラットフォームに応じて設定します。
Delphi の場合:
{$IFDEF IOS}
MyNotification.SoundName := 'nameOfSound.caf';
{$ENDIF}
C++ の場合:
#if defined(_PLAT_IOS)
myNotification->SoundName = "nameOfSound.caf";
#endif
メモ: iOS ドキュメントによると、サウンド ファイルの拡張子は、aiffwavcaf でなければなりません。

該当するユニットがプロジェクトに含まれていなければ追加します。

Delphi の場合: uses 句に System.IOUtils を追加します。
System.IOUtils;
C++ の場合: プロジェクトのヘッダー ファイル .hSystem.IOUtils.hpp を追加します。
#include <System.IOUtils.hpp>

プロジェクトに設定したカスタム通知音がデバイスで見つからない場合、iOS ではデフォルトの通知音が鳴りますが、Android では音が鳴りません。

通知アクション

macOSiOSAndroid で通知をクリックすると、通知を送信したアプリケーションが正面にきます(そのアプリケーションが、バックグランドで実行されていたり、完全に閉じられていたとしても)。

Windows でユーザーが通知をクリックした場合、特別な動作は行われません。

通知アクションの追加

ユーザーが通知をクリックしたときにアクションを実行することができます。ユーザーが通知をクリックすると、イベント OnReceiveLocalNotification が発生します。イベント ハンドラを記述してアクションを定義してください。

OnReceiveLocalNotification イベントのイベント ハンドラは、ユーザーがクリックした TNotitication を ANotification パラメータとして受け取ります。この ANotification パラメータを使用して、ユーザーがクリックした通知の詳細情報を取得できます。

次のようなコードで、ユーザーがクリックした通知に応じてメッセージを表示することができます。

Delphi の場合:
if ANotification.Name='ProcessCompleted' then
	ShowMessage('The process is completed.');
C++ の場合:
if (ANotification->Name == "ProcessCompleted") {
	ShowMessage("The process is completed.");
}

通知アクション(macOS および iOS)

通知ダイアログにアクション ボタンを追加すると、ユーザーはそのボタンをクリックしてアプリケーションを開くことができます。 この機能を使用するには、ユーザーがプロジェクトの通知スタイルを[ダイアログ]に設定しなければなりません。詳細については、macOS の通知パネル および iOS の通知ダイアログ の設定方法を参照してください。

アクション ボタンを追加するには、HasAction フィールドを True に設定します。AlertAction フィールドを使ってボタンのテキストを指定します。

Delphi の場合:
MyNotification.HasAction := True;
MyNotification.AlertAction := 'Open App';
C++ の場合:
MyNotification->HasAction = True;
MyNotification->AlertAction = "Open App";

通知センターへの通知の送信

通知の設定がすべて済んだら、通知を通知センターに送信して処理させなければなりません。

通知を通知センターに送信するには、次の 2 つのメソッドのいずれかを使用します。

ScheduleNotification

ScheduleNotification は予約通知を通知センターに送信します。FireDateNow の場合や、FireDate が過去の TDateTime の場合は、通知はすぐに表示されます。それ以外の場合は、通知は指定したとおりにスケジュールされます。

警告: Windows は ScheduleNotification をサポートしていません。
Delphi の場合:
NotificationCenter1.ScheduleNotification(MyNotification);
C++ の場合:
NotificationCenter1->ScheduleNotification(MyNotification);

PresentNotification

PresentNotification は、FireDate の値に関係なく、すぐに通知を表示します。

Delphi の場合:
NotificationCenter1.PresentNotification(MyNotification);
C++ の場合:
NotificationCenter1->PresentNotification(MyNotification);

通知のキャンセル

スケジュールした通知や繰り返しの通知をキャンセルすることができます。また、アクション センターや通知センターや通知ドロワーに既に表示されている通知を削除することもできます。

CancelNotification

CancelNotification を使用すると、スケジュールした通知や繰り返しの通知をキャンセルすることができます。キャンセルするには通知の Name が必要です。

Delphi の場合:
NotificationCenter1.CancelNotification('MyNotificationName');
C++ の場合:
NotificationCenter1->CancelNotification("MyNotificationName");

CancelAll

CancelAll を使用すると、すべての通知がキャンセルされます。

  • スケジュールされた通知は発生しなくなります。
  • 繰り返し間隔の設定された通知はキャンセルされます。
  • アクション センターや通知センターや通知ドロワーに表示されているこのアプリケーションの通知は削除されます。
Delphi の場合:
NotificationCenter1.CancelAll;
C++ の場合:
NotificationCenter1->CancelAll();

通知の更新

発生前の通知は、通知の一意の識別子である Name を指定して更新することができます。通知を更新する手順は以下のとおりです:

  1. 更新したい通知と同じ Name を持つ TNotification のインスタンスを作成します。
  2. 新しいインスタンスを望ましい内容に設定します。
  3. 通知を通知センターに送信します。

今後の通知(スケジュールされた通知および繰り返し間隔の設定された通知)を更新すると、アクション センターや通知センターや通知ドロワーに既に通知が存在していれば削除され、今後の通知は上書きれます。

関連項目

コード サンプル