通知の使用

提供: 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

通知の発生

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. 通知を通知センターに送信します。

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

関連項目

コード サンプル