通知の使用
マルチデバイス アプリケーションでの RTL の使用 への移動
通知とは、何かについて情報を伝えたり警告するためにアプリケーションが送信するメッセージです。
- メモ: このトピックでは、ローカル通知について説明します。これはデバイス アプリケーションが送信する通知です。リモート通知については「プッシュ通知」を参照してください。
RAD Studio では、マルチデバイス通知を管理するための TNotificationCenter コンポーネントを提供しています。この通知センターによって、実行中のアプリケーションからメッセージを送信することができます。アプリケーションでは、通知を使用してユーザーに何かについての情報を伝えることができます。
TNotification コンポーネントは、アプリケーションが通知センターに送信するメッセージで、プラットフォームごとに指定された通知領域に表示されます。
Windows 用の通知は VCL を使って、マルチデバイス アプリケーション用の通知は FireMonkey を使って作成することができます。
目次
プラットフォームごとの通知のサポート
項目 | Windows | OS X | 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 では、短時間だけ通知が表示されます。その後は、アクション センターでその通知を確認することができます。
アクション センターにアクセスして通知を見るには、タスクバーに表示されるアクション センター アイコンをクリックします。このアイコンは、未確認の通知があるかどうかに応じて変化します。
未確認の通知がある場合 | 未確認の通知がない場合 |
---|---|
OS X の通知
OS X は、バージョン 10.8 以降、通知をサポートしています。OS X の詳細については、「OS X 通知センターの使用」を参照してください。.
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 の通知数 |
---|---|
通知の発生
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
に設定されています。
- OS X および iOS の場合、通知音を有効にしていても、アプリケーションがフォアグラウンドで動作している場合には通知音が鳴りません。OS X および iOS では、アプリケーションがバックグラウンドで動作しているか閉じている場合に、通知音が鳴ります。
- Windows の場合は、
EnableSound
で無効にしている場合も含めて、常に通知音が鳴ります。
通知音のカスタマイズ
SoundName に通知用の音声を設定することで、通知音をカスタマイズすることができます。
カスタム通知音を追加する手順は以下のとおりです。
- サウンド ファイルを[プロジェクト マネージャ]内のプロジェクト名にドラッグ アンド ドロップし、確認ダイアログで[はい]をクリックします。
- [プロジェクト|配置]を開き、プラットフォームごとにファイルのリモート パスを正しく設定します。
- iOS の場合:
.\
- iOS の場合:
- カスタム通知音の名前を指定します。
SoundName
をプラットフォームに応じて設定します。
{$IFDEF IOS}
MyNotification.SoundName := 'nameOfSound.caf';
{$ENDIF}
#if defined(_PLAT_IOS)
myNotification->SoundName = "nameOfSound.caf";
#endif
- メモ: iOS のドキュメントによると、サウンド ファイルの拡張子は
aiff
、wav
、またはcaf
でなければなりません。
該当するユニットがプロジェクトに含まれていなければ追加します。
System.IOUtils;
プロジェクトに設定したカスタム通知音がデバイスで見つからない場合、iOS ではデフォルトの通知音が鳴りますが、Android では音が鳴りません。
通知アクション
OS X、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.");
}
通知アクション(OS X および iOS)
通知ダイアログにアクション ボタンを追加すると、ユーザーはそのボタンをクリックしてアプリケーションを開くことができます。この機能を使用するには、ユーザーがプロジェクトの通知スタイルを[ダイアログ]に設定しなければなりません。詳細については、OS X の通知パネルおよび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 の場合は、通知はすぐに表示されます。それ以外の場合は、通知は指定したとおりにスケジュールされます。
- 警告: Windows では
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 のインスタンスを作成します。 - 新しいインスタンスを望ましい内容に設定します。
- 通知を通知センターに送信します。
今後の通知(スケジュールされた通知および繰り返し間隔の設定された通知)を更新すると、アクション センターや通知センターや通知ドロワーに既に通知が存在していれば削除され、今後の通知は上書きれます。
関連項目
- OS X 通知センターの使用
- モバイル チュートリアル:通知を使用する(iOS および Android)
- プッシュ通知
- System.Notification.TNotification
- System.Notification.TNotificationCenter
コード サンプル
- FireMonkey 通知の送信/キャンセルのサンプル
- FireMonkey Android 通知サービスのサンプル
- FireMonkey バッジ数の設定/リセットのサンプル
- OSX Dock バッジ(Delphi)
- FireMonkey Mac 向け通知(Delphi)
- FireMonkey Mac 向け通知(C++)