通知の使用

提供: Appmethod Topics
移動先: 案内検索

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


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

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

Appmethod では、マルチデバイス通知を管理するための TNotificationCenter コンポーネントを提供しています。この通知センターによって、実行中のアプリケーションからメッセージを送信することができます。アプリケーションでは、通知を使用してユーザーに何かについての情報を伝えることができます。

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

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

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

項目 Windows OS X iOS Android
プラットフォーム サポート
YesC++11Feature.png

Windows 10 および Windows 8

YesC++11Feature.png

10.8 以降

YesC++11Feature.png
YesC++11Feature.png
通知領域の名前 アクション センター 通知センター 通知センター 通知ドロワー
TNotification
TNotification.Name
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
TNotification.AlertBody
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

必須

YesC++11Feature.png
TNotification.Title
YesC++11Feature.png
YesC++11Feature.png

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

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

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

YesC++11Feature.png

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

TNotification.FireDate サポートされていません。
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
TNotification.Number サポートされていません。 サポートされていません。
YesC++11Feature.png

バッジ数を設定します。

YesC++11Feature.png
TNotification.EnableSound サポートされていません。

通知音は常に有効です。

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
TNotification.AlertAction サポートされていません。
YesC++11Feature.png
YesC++11Feature.png
サポートされていません。
TNotification.HasAction サポートされていません。
YesC++11Feature.png
YesC++11Feature.png
サポートされていません。
TNotification.RepeatInterval サポートされていません。
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
TCustomNotificationCenter
TCustomNotificationCenter.ApplicationIconBadgeNumber サポートされていません。 サポートされていません。

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

YesC++11Feature.png
サポートされていません。
TCustomNotificationCenter.ScheduleNotification サポートされていません。
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
TCustomNotificationCenter.PresentNotification
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

Windows の通知

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

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

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

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

OS X の通知

OS X では、バージョン 10.8 以降で通知をサポートしています。OS X の場合の詳細は、「Mac OS X 通知センターの使用」を参照してください。

iOS の通知

通知権限

iOS で通知を使用するには、アプリケーションに通知権限を追加する必要があります。キー FMLocalNotificationPermission の値が true に設定されていることを確認してください。そうすると、該当するキーと値のペアが Appmethod によってプロジェクトの Info.plist ファイルに追加されます。

FMLocalNotificationPermission を true に設定するには:

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

通知ダイアログ

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

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

通知の作成

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

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

Object Pascal の場合:
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 を次のように設定します。

Object Pascal の場合:
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 秒後に通知を発生させるには、次のように設定します。

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

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

通知の繰り返し

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

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

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

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

通知音

通知音の有効化

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

  • OS X および iOS の場合、通知音を有効にしていても、アプリケーションがフォアグラウンドで動作している場合には通知音が鳴りません。OS X および iOS では、アプリケーションがバックグラウンドで動作しているか閉じている場合に、通知音が鳴ります。
  • Windows の場合は、EnableSound で無効にしている場合も含めて、常に通知音が鳴ります。

通知音のカスタマイズ

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

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

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

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

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

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

通知アクション

OS XiOS、または Android で通知をクリックすると、通知を送信したアプリケーションがフォアグラウンドに移動してきます。これは、アプリケーションがバックグラウンドで動作していた場合でも完全に終了していた場合でも同じです。

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

通知アクションの追加

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

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

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

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

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

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

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

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

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

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

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

ScheduleNotification

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

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

PresentNotification

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

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

通知のキャンセル

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

CancelNotification

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

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

CancelAll

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

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

通知の更新

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

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

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

関連項目

コード サンプル