通知の使用
マルチデバイス アプリケーションでの RTL の使用 への移動
通知とは、何かについて情報を伝えたり警告するためにアプリケーションが送信するメッセージです。
RAD Studio は、マルチデバイス通知を管理するための、TNotificationCenter コンポーネントを提供します。通知センターでは、実行しているアプリケーションからメッセージを送信することができます。アプリケーションは、通知を使用して、なんらかの事柄に対してユーザーに通達することができます。
TNotification コンポーネントは、アプリケーションが通知センターに送信するメッセージで、プラットフォームごとに指定された通知領域に表示されます。
Windows 用の通知は VCL を使って、マルチデバイス アプリケーション用の通知は FireMonkey を使って作成することができます。
目次
プラットフォームごとの通知のサポート
項目 | Windows | macOS | iOS | Android |
---|---|---|---|---|
プラットフォーム サポート | ![]() Windows 10 および Windows 8 |
![]() 10.8 以降 |
![]() |
![]() |
通知領域の名前 | アクション センター | 通知センター | 通知センター | 通知ドロワー |
TNotification | ||||
TNotification.Name | ![]() |
![]() |
![]() |
![]() |
TNotification.AlertBody | ![]() |
![]() |
![]() 必須 |
![]() |
TNotification.Title | ![]() |
![]() タイトルが設定されていなければ、アプリケーション名がタイトルとして使用されます。 |
サポートされていません。
アプリケーション名がタイトルとして使用されます。 |
![]() タイトルが設定されていなければ、アプリケーション名がタイトルとして使用されます。 |
TNotification.FireDate | サポートされていません。 | ![]() |
![]() |
![]() |
TNotification.Number | サポートされていません。 | サポートされていません。 | ![]() バッジ数を設定します。 |
![]() |
TNotification.EnableSound | ![]() |
![]() |
![]() |
![]() |
TNotification.AlertAction | サポートされていません。 | ![]() |
![]() |
サポートされていません。 |
TNotification.HasAction | サポートされていません。 | ![]() |
![]() |
サポートされていません。 |
TNotification.RepeatInterval | サポートされていません。 | ![]() |
![]() |
![]() |
TCustomNotificationCenter | ||||
TCustomNotificationCenter.ApplicationIconBadgeNumber | サポートされていません。 | サポートされていません。
OS X バッジのサンプルを参照。 |
![]() |
サポートされていません。 |
TCustomNotificationCenter.ScheduleNotification | サポートされていません。 | ![]() |
![]() |
![]() |
TCustomNotificationCenter.PresentNotification | ![]() |
![]() |
![]() |
![]() |
Windows の通知
トースト通知は、以下のバージョンの Windows で使用できます。
- Windows 8: Windows 8 では、短時間だけ通知が表示されます。その後でユーザーがその通知にアクセスすることはできません。
- Windows 10: Windows 10 では、短時間だけ通知が表示されます。その後は、アクション センターでその通知を確認することができます。
アクション センターにアクセスして通知を見るには、タスクバーに表示されるアクション センター アイコンをクリックします。このアイコンは、未確認の通知があるかどうかに応じて変化します。
未確認の通知がある場合 | 未確認の通知がない場合 |
---|---|
![]() |
![]() |
macOS の通知
macOS は、バージョン 10.8 以降、通知をサポートしています。 macOS についての詳しい情報については、「macOS 通知センターの使用」を参照してください。
iOS の通知
通知権限
iOS 上で通知を使用するには、通知権限をアプリケーションに追加します:
- [プロジェクト|オプション...|バージョン情報]を選択します。
- 適切な iOS ターゲット プラットフォームを選択します。
- キー/値リストボックスで、
FMLocalNotificationPermission
をTrue
に設定します。
通知ダイアログ
iOS では、アプリケーションの通知をバナーとダイアログのどちらで表示するかを、ユーザーが設定することができます。バナーは短時間だけ画面に表示されて消えますが、ダイアログはユーザーが確認するまで画面に表示され続けます。
通知をダイアログとして表示させるには、エンド ユーザーが iOS デバイスでアプリケーションの通知設定を開き、 [ロックされていないときの通知のスタイル]の設定を[ダイアログ]に変更する必要があります。
通知の作成
通知メッセージを作成するには TNotification クラスを使用します。TNotification のインスタンスを管理するための TNotificationCenter コンポーネントが必要です。
フォームに TNotificationCenter コンポーネントを配置したら、TNotification
変数を宣言し、CreateNotification メソッドを呼び出して通知を作成することができます。
MyNotification:= NotificationCenter1.CreateNotification;
TNotification *MyNotification = NotificationCenter1->CreateNotification();
通知を作成したら、少なくとも次のフィールドを設定することをお勧めします。
その他に、通知の次の設定を管理することができます。
- Title: 通知のタイトルを設定します。この
Title
フィールドは iOS では使われません。iOS では常にアプリケーション名がタイトルとして表示されます。
- Number: このフィールドを使用して、Android の通知数や iOS のアプリケーション バッジ数を更新します。
- ApplicationIconBadgeNumber: このプロパティを使用して iOS のアプリケーション バッジ数を更新します。
iOS のバッジ数 | Android の通知数 |
---|---|
![]() |
通知チャネルの作成
フォールバック「通知チャネル」は、次の場合でのみ作成されます:
- アプリケーションが、「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」を設定します。
コードで複数の「通知チャネル」を作成するには、次の手順に従ってください:
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」サーバーに送信するには、次の手順に従います:
- まず、Windows ホストで、アプリケーションをビルドし起動します。
- Android デバイス上で:
- テスト デバイスの[設定]アプリを開きます。
- 設定項目[アプリと通知]をタップします
- アプリに該当するリスト項目をタップします
- 設定項目[通知]をタップします
- 自分の複数の通知チャネルがリストに表示されているか確認してください。
- Windows ホスト上で:
- 「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信し、「デバイスの登録トークン」と「通知チャンネル ID」を設定します。
「プッシュ通知ペイロード」を「Firebase Cloud Messaging」サーバーに送信するために使用するアプローチに応じて、適切なものを設定します:
-
- HTTP v1 API:「channel_id」キーを設定します。
- XMPP サーバー:「android_channel_id」キーを設定します。
- Legacy HTTP サーバー:「android_channel_id」キーを設定します。
再び、Android デバイス上で:
- テスト デバイスの[設定]アプリを開きます
- 設定項目[アプリと通知]をタップします
- アプリに該当するリスト項目をタップします
- 設定項目[通知]をタップします
- 「Notification channel for Firebase」が[通知チャンネル]のリストにないことを確認してください。
通知の発生
FireDate を使用して、通知を発生させる日時を設定することができます。
通知を発生させる時間という観点で、作成する通知は次の 2 種類に分けることができます。
即時通知
デフォルトで、FireDate は Now に設定されます。つまり、FireDate の値を変更しなければ通知がすぐに発生します。
予約通知
任意の時刻に発生するよう通知をスケジュールすることができます。通知を発生させたい日時に FireDate を設定してください。
特定の日時に通知を発生させる
特定の日時に通知が発生するよう設定することができます。たとえば 2015年12月16日午後5時30分に通知を発生させるには、FireDate を次のように設定します。
MyNotification.FireDate := EncodeDateTime(2015, 12, 16, 17, 30, 00, 00);
MyNotification->FireDate = System::Dateutils::EncodeDateTime(2015, 12, 16, 17, 30, 00, 00);
特定の日時に通知をスケジュールする場合、設定した FireDate
が既に過ぎていれば通知がすぐに発生することに注意してください。
ある時間が過ぎたら通知を発生させる
ある時間が過ぎたら通知が発生するよう設定することができます。たとえば、1分30秒後に通知を発生させるには、次のように設定します。
MyNotification.FireDate := Now + EncodeTime(0, 1, 30, 0);
MyNotification->FireDate = Now() + EncodeTime(0, 1, 30, 0);
通知をスケジュールした後、同じ名前の別の通知(予約通知でもそうでなくても)を作成すると、先にスケジュールされているその名前の通知は上書きされます。
通知の繰り返し
RepeatInterval を使用して、ある時間ごとに繰り返すよう通知をスケジュールすることができます。TRepeatInterval に定義された間隔の種類(None
、Second
、Minute
、Hour
、Day
、Week
、Weekday
、Month
、Quarter
、Year
、Era
)のいずれかを使用することができます。
RepeatInterval
を使用してある時間ごとに繰り返すよう通知をスケジュールすると、アプリケーションが終了した後でも通知が繰り返し発生します。必ず通知のキャンセルを適切に行ってください。たとえば、1 時間ごとに通知を繰り返すには、次のように設定します。
MyNotification.RepeatInterval := TRepeatInterval.Hour;
MyNotification->RepeatInterval = TRepeatInterval::Hour;
通知音
通知音の有効化
通知音は、EnableSound を使って有効または無効にすることができます。デフォルトで EnableSound
は True
に設定されています。
- macOS および iOS の場合、通知音を有効にしていても、アプリケーションがフォアグラウンドで動作している場合には通知音が鳴りません。macOS および iOS では、アプリケーションがバックグラウンドで動作しているか閉じている場合に、通知音が鳴ります。
- Windows の場合、
EnableSound
がTrue
(無効)になっていても、通知音はなります。この音を無効にするには、これをFalse
(無効)に設定します。
通知音のカスタマイズ
SoundName に通知用の音声を設定することで、通知音をカスタマイズすることができます。
カスタム通知音を追加する手順は以下のとおりです。
- サウンド ファイルを、プロジェクト ウィンドウで、プロジェクト名にドラッグ&ドロップし、確認ダイアログで[はい]をクリックします。
- [プロジェクト|配置]を開き、プラットフォームごとにファイルのリモート パスを正しく設定します。
- iOS の場合:
.\
- iOS の場合:
- カスタム通知音の名前を指定します。
SoundName
をプラットフォームに応じて設定します。
{$IFDEF IOS}
MyNotification.SoundName := 'nameOfSound.caf';
{$ENDIF}
#if defined(_PLAT_IOS)
myNotification->SoundName = "nameOfSound.caf";
#endif
aiff
、wav
、caf
でなければなりません。該当するユニットがプロジェクトに含まれていなければ追加します。
System.IOUtils;
プロジェクトに設定したカスタム通知音がデバイスで見つからない場合、iOS ではデフォルトの通知音が鳴りますが、Android では音が鳴りません。
通知アクション
macOS、iOS、Android で通知をクリックすると、通知を送信したアプリケーションが正面にきます(そのアプリケーションが、バックグランドで実行されていたり、完全に閉じられていたとしても)。
Windows でユーザーが通知をクリックした場合、特別な動作は行われません。
通知アクションの追加
ユーザーが通知をクリックしたときにアクションを実行することができます。ユーザーが通知をクリックすると、イベント OnReceiveLocalNotification が発生します。イベント ハンドラを記述してアクションを定義してください。
OnReceiveLocalNotification
イベントのイベント ハンドラは、ユーザーがクリックした TNotitication を ANotification
パラメータとして受け取ります。この ANotification
パラメータを使用して、ユーザーがクリックした通知の詳細情報を取得できます。
次のようなコードで、ユーザーがクリックした通知に応じてメッセージを表示することができます。
if ANotification.Name='ProcessCompleted' then
ShowMessage('The process is completed.');
if (ANotification->Name == "ProcessCompleted") {
ShowMessage("The process is completed.");
}
通知アクション(macOS および iOS)
通知ダイアログにアクション ボタンを追加すると、ユーザーはそのボタンをクリックしてアプリケーションを開くことができます。 この機能を使用するには、ユーザーがプロジェクトの通知スタイルを[ダイアログ]に設定しなければなりません。詳細については、macOS の通知パネル および iOS の通知ダイアログ の設定方法を参照してください。
アクション ボタンを追加するには、HasAction フィールドを True
に設定します。AlertAction フィールドを使ってボタンのテキストを指定します。
MyNotification.HasAction := True;
MyNotification.AlertAction := 'Open App';
MyNotification->HasAction = True;
MyNotification->AlertAction = "Open App";
通知センターへの通知の送信
通知の設定がすべて済んだら、通知を通知センターに送信して処理させなければなりません。
通知を通知センターに送信するには、次の 2 つのメソッドのいずれかを使用します。
ScheduleNotification
ScheduleNotification は予約通知を通知センターに送信します。FireDate が Now の場合や、FireDate
が過去の TDateTime の場合は、通知はすぐに表示されます。それ以外の場合は、通知は指定したとおりにスケジュールされます。
ScheduleNotification
をサポートしていません。NotificationCenter1.ScheduleNotification(MyNotification);
NotificationCenter1->ScheduleNotification(MyNotification);
PresentNotification
PresentNotification は、FireDate の値に関係なく、すぐに通知を表示します。
NotificationCenter1.PresentNotification(MyNotification);
NotificationCenter1->PresentNotification(MyNotification);
通知のキャンセル
スケジュールした通知や繰り返しの通知をキャンセルすることができます。また、アクション センターや通知センターや通知ドロワーに既に表示されている通知を削除することもできます。
CancelNotification
CancelNotification を使用すると、スケジュールした通知や繰り返しの通知をキャンセルすることができます。キャンセルするには通知の Name が必要です。
NotificationCenter1.CancelNotification('MyNotificationName');
NotificationCenter1->CancelNotification("MyNotificationName");
CancelAll
CancelAll を使用すると、すべての通知がキャンセルされます。
-
- スケジュールされた通知は発生しなくなります。
- 繰り返し間隔の設定された通知はキャンセルされます。
- アクション センターや通知センターや通知ドロワーに表示されているこのアプリケーションの通知は削除されます。
NotificationCenter1.CancelAll;
NotificationCenter1->CancelAll();
通知の更新
発生前の通知は、通知の一意の識別子である Name
を指定して更新することができます。通知を更新する手順は以下のとおりです:
- 更新したい通知と同じ
Name
を持つ TNotification のインスタンスを作成します。 - 新しいインスタンスを望ましい内容に設定します。
- 通知を通知センターに送信します。
今後の通知(スケジュールされた通知および繰り返し間隔の設定された通知)を更新すると、アクション センターや通知センターや通知ドロワーに既に通知が存在していれば削除され、今後の通知は上書きれます。
関連項目
- macOS 通知センターの利用
- モバイル チュートリアル:通知を使用する(iOS および Android)
- プッシュ通知
- System.Notification.TNotification
- System.Notification.TNotificationCenter
コード サンプル
- FireMonkey 通知の送信/キャンセルのサンプル
- FireMonkey Android 通知サービスのサンプル
- FireMonkey バッジ数の設定/リセットのサンプル
- OSX Dock バッジ(Delphi)
- FireMonkey Mac 向け通知(Delphi)
- FireMonkey Mac 向け通知(C++)