モバイル チュートリアル:通知を使用する(iOS および Android)
目次
- 1 3 つの基本的な通知(警告)方法
- 2 モバイル デバイスの通知センター
- 3 通知サービスへのアクセス
- 4 FMLocalNotificationPermission の追加(iOS)
- 5 コードからのアイコンのバッジ番号および通知番号の設定
- 6 通知のスケジュール設定
- 7 通知メッセージの繰り返し
- 8 スケジュールされたまたは繰り返された通知メッセージの更新またはキャンセル
- 9 通知メッセージの即時表示
- 10 通知音のカスタマイズ
- 11 通知バナーと通知ダイアログ
- 12 通知ダイアログへのアクションの追加(iOS のみ)
- 13 通知へのアクションの追加
- 14 アプリケーションの実行
- 15 関連項目
モバイル チュートリアル:モバイル アプリケーション開発(iOS および Android) への移動
このチュートリアルでは、モバイル デバイス上で通知を使用する基本的な手順を説明します。 詳細については、「通知の利用」を参照してください。
3 つの基本的な通知(警告)方法
ユーザーがモバイル デバイスでアプリケーションの通知を設定している場合には、ここに示す 3 つの基本的な方法でアプリケーションから通知を配信できます。 バナーは一定時間で消えますが、警告ダイアログ ボックスはユーザーが消す必要があります。
モバイル デバイスの通知バナー
iOS |
---|
Android |
---|
警告ダイアログ:iOS バッジ番号と Android 通知番号
iOS バッジ番号 | |
---|---|
Android 通知番号 |
---|
モバイル デバイスの通知センター
次に示すのは、iPad の通知センターおよび Android の通知ドロワーです。ユーザーがリストをプルダウンすると最近の通知すべてを見ることができます。
iOS |
---|
Android |
---|
通知サービスへのアクセス
RAD Studio により、通知サービスに簡単にアクセスするための TNotificationCenter コンポーネントが用意されています。
通知サービスにアクセスするには、次の作業を行います。
- モバイル アプリケーションを新規作成します。
- Delphi の場合: [ファイル|新規作成|マルチデバイス アプリケーション - Delphi]
- C++ の場合: [ファイル|新規作成|マルチデバイス アプリケーション - C++Builder]
- ツール パレットで TNotificationCenter コンポーネントを選択し、フォーム デザイナ上にドロップします。
- 次のユニットが自動的にプロジェクトに追加されているかどうかをチェックします:
- Delphi アプリケーションの場合、次のユニットが uses 句に含まれていなければ追加します。
uses System.Notification;
- C++ アプリケーションの場合、プロジェクト ヘッダー ファイル(.h ファイル)に以下の #include を追加します。
#include <System.Notification.hpp>
System.Notification.TNotificationCenter.CreateNotification メソッドにより、TNotification クラス オブジェクトのインスタンスを作成することができます。
FMLocalNotificationPermission の追加(iOS)
iOS 8+ デバイスの通知を使用するには、[<プロジェクト名> のプロジェクト オプション]の[バージョン情報]ページで FMLocalNotificationPermission のキーと値のペアを有効にする必要があります。
- [プロジェクト|オプション...|バージョン情報]を選択します。
- [ターゲット]フィールドで、[Debug 構成 - iOS デバイス - 64 ビット プラットフォーム]を選択します。
- FMLocalNotificationPermission の[値]フィールドを true に設定します。
- このように FMLocalNotificationPermission を設定すると、iOS 8+ デバイスでのローカル通知が有効になります。
コードからのアイコンのバッジ番号および通知番号の設定
TNotification.Number は、アイコンのバッジ数(iOS デバイスの場合)、または、通知数(Android デバイスの場合)を定義します。
iOS のアイコン バッジ番号または Android の通知番号を設定するには、対応するメソッドを実装する必要があります。
- フォームに TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを SetNumber に変更します。
- SetNumber ボタンをダブルクリックして、OnClick イベントを作成します。
- SetNumber ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.SetNumberClick(Sender: TObject); var MyNotification: TNotification; begin // TNotification のインスタンスを作成する MyNotification := NotificationCenter1.CreateNotification; try // --- 必要なコードをここに記述する --- // アイコンまたは通知の番号を設定する MyNotification.Number :=18; // 警告メッセージを設定する MyNotification.AlertBody := 'Delphi for your mobile device is here!'; // メモ:アイコン バッジ番号を表示するには、通知を通知センターに送信する必要がある NotificationCenter1.PresentNotification(MyNotification); finally MyNotification.DisposeOf; end; end;
- C++ の場合:
void __fastcall TForm1::SetNumberClick(TObject *Sender) { if (NotificationCenter1->Supported()) { TNotification *myNotification = NotificationCenter1->CreateNotification(); __try { myNotification->Number = 18; myNotification->AlertBody = "C++ for your mobile device is here!"; NotificationCenter1->PresentNotification(myNotification); } __finally { myNotification->DisposeOf(); } } }
- Delphi の場合:
アプリケーションの実行後(F9 キーを押す)、SetNumber ボタンをクリックすると、次のとおりになります。
通知のスケジュール設定
ScheduleNotification メソッドで通知メッセージのスケジュールを設定することもできます。このメソッドは、TNotificationCenter クラスが TCustomNotificationCenter から継承したものです。
通知メッセージを表示するには、TNotification クラスのインスタンスを作成し、Name、AlertBody、FireDate の各フィールドを定義する必要があります。
- フォームに新しい TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを ScheduleNotification に変更します。
- ScheduleNotification ボタンをダブルクリックして、OnClick イベントを作成します。
- ScheduleNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.ScheduleNotificationClick(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'MyNotification'; MyNotification.AlertBody := 'Delphi for your mobile device is here!'; // 10 秒後に発生する MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0); // 通知センターに通知を送信する NotificationCenter1.ScheduleNotification(MyNotification); finally MyNotification.DisposeOf; end; end;
- C++ の場合:
void __fastcall TForm1::ScheduleNotificationClick(TObject *Sender) { if (NotificationCenter1->Supported()) { TNotification *myNotification = NotificationCenter1->CreateNotification(); __try { myNotification->Name = "MyNotification"; myNotification->AlertBody = "C++ for your mobile device is here!"; // Fire in 10 seconds myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0); // Send notification to the notification center NotificationCenter1->ScheduleNotification(myNotification); } __finally { myNotification->DisposeOf(); } } }
アプリケーションの実行後(F9 キーを押す)、ScheduleNotification ボタンをクリックし、10 秒待機すると、デバイスのホーム画面の上部に通知メッセージ(AlertBody)が表示されます。 iOS デバイスでは、画面のメッセージは次のようになります:
通知メッセージの繰り返し
TNotification オブジェクトの RepeatInterval プロパティを使用して通知メッセージを繰り返すこともできます。
通知メッセージを繰り返すには、TNotification クラスのインスタンスを作成し、Name、AlertBody、FireDate の各フィールドを定義する必要があります。
また、ScheduleNotification メソッドを使用し、RepeatInterval プロパティを設定する必要もあります。 以下のコードで、繰り返される間隔を分単位で設定します。
- フォームに新しい TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを RepeatedNotification に変更します。
- RepeatedNotification ボタンをダブルクリックして、OnClick イベントを作成します。
- RepeatedNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.RepeatedNotificationClick(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Title := 'MyNotification'; MyNotification.AlertBody := 'Repeating notification each minute!'; // 10 秒後に発生する MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0); // 1分毎に繰り返す MyNotification.RepeatInterval := TRepeatInterval.Minute; // 通知センターに通知を送信する NotificationCenter1.ScheduleNotification(MyNotification); finally MyNotification.Free; end; end;
- C++ の場合:
void __fastcall TForm1::RepeatedNotificationClick(TObject *Sender) { if (NotificationCenter1->Supported()) { TNotification *myNotification = NotificationCenter1->CreateNotification(); __try { myNotification->Name = "MyNotification"; myNotification->AlertBody = "Repeating notification each minute!"; // Fire in 10 seconds myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0); // Repeated each minute myNotification->RepeatInterval = TRepeatInterval::Minute; // Send notification to the notification center NotificationCenter1->ScheduleNotification(myNotification); } __finally { myNotification->Free(); } } }
アプリケーションの実行後(F9 キーを押す)、RepeatedNotification ボタンをクリックすると、デバイスのホーム画面の上部に通知メッセージ(AlertBody)が表示されます。iOS デバイスでは、画面のメッセージは次のようになります。
スケジュールされたまたは繰り返された通知メッセージの更新またはキャンセル
スケジュール設定された個別の通知メッセージは、TNotification オブジェクトの Name プロパティで識別できます。
スケジュール設定された通知を更新するには、同じ名前(Name プロパティ)を持つ ScheduleNotification のインスタンスを引数にして メソッドをもう一度呼び出すだけです。
スケジュールされた通知をキャンセルするには、使用した識別子を引数にして CancelNotification メソッドを呼び出すだけです。
- フォームに新しい TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを CancelNotification に変更します。
- CancelNotification ボタンをダブルクリックして、OnClick イベントを作成します。
- CancelNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.CancelNotificationClick(Sender: TObject); begin NotificationCenter1.CancelNotification('MyNotification'); end;
- C++ の場合:
void __fastcall TForm1::CancelNotificationClick(TObject *Sender) { NotificationCenter1->CancelNotification("MyNotification"); }
通知メッセージの即時表示
PresentNotification 関数を使用して、通知メッセージをすぐに表示することもできます。
通知メッセージを表示するには、TNotification クラスのインスタンスを作成し、Name、AlertBody の各フィールドを定義します。
- フォームに新しい TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを PresentNotification に変更します。
- PresentNotification ボタンをダブルクリックして、OnClick イベントを作成します。
- PresentNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.PresentNotificationClick(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'MyNotification'; MyNotification.AlertBody := 'Delphi for your mobile device is here!'; // アイコン バッジ番号(iOS の場合)またはメッセージ番号(Android の場合)も設定する MyNotification.Number := 18; MyNotification.EnableSound := False; // 通知センターにメッセージを送信する NotificationCenter1.PresentNotification(MyNotification); finally MyNotification.DisposeOf; end; end;
- C++ の場合:
void __fastcall TForm1::PresentNotificationClick(TObject *Sender) { if (NotificationCenter1->Supported()) { TNotification *myNotification = NotificationCenter1->CreateNotification(); __try { myNotification->Name = "MyNotification"; myNotification->AlertBody = "C++ for your mobile device is here!"; // Set Icon Badge Number (for iOS) or message number (for Android) as well myNotification->Number = 18; myNotification->EnableSound = False; // Send notification to the notification center NotificationCenter1->PresentNotification(myNotification); } __finally { myNotification->DisposeOf(); } } }
通知音のカスタマイズ
TNotification オブジェクトの SoundName プロパティを使用して、通知メッセージのカスタマイズした音をすぐに使用することができます。
TNotification クラスのインスタンスを作成し、EnableSound プロパティと SoundName プロパティを定義する必要があります。 また、サウンド ファイルとファイル拡張子の完全パスを指定する必要もあります。
- フォームに新しい TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを SoundNotification に変更します。
- SoundNotification ボタンをダブルクリックして、OnClick イベントを作成します。
- SoundNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.SoundNotificationClick(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'MyNotification'; MyNotification.AlertBody := 'Delphi for your mobile device is here!'; MyNotification.EnableSound := True; MyNotification.SoundName := GetSoundName; MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0); // 通知センターにメッセージを送信する NotificationCenter1.ScheduleNotification(MyNotification); finally MyNotification.Free; end; end;
- C++ の場合:
- .cpp ファイルに以下のコードを追加します。
void __fastcall TForm1::SoundNotificationClick(TObject *Sender) { TNotification *myNotification = NotificationCenter1->CreateNotification(); __try { myNotification->Name = "MyNotification"; myNotification->AlertBody = "C++ for your mobile device is here!"; myNotification->EnableSound = true; myNotification->SoundName = GetSoundName(); myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0); // Send notification to the notification center NotificationCenter1->ScheduleNotification(myNotification); } __finally { myNotification->Free(); } }
- GetSoundName 関数を宣言します。
- Delphi の場合:
- ユニットの private セクションに GetSoundName 宣言を設定します。
- System.IOUtils をプロジェクトの uses 句に追加します。
uses System.IOUtils; private function GetSoundName: string;
- C++ の場合:
- ヘッダー ファイル(.h ファイル)に以下の宣言を追加します。
- ユニットの private セクションに GetSoundName 宣言を設定します。
System.IOUtils.hpp
をプロジェクトの uses 句にインクルードします。
#include <System.IOUtils.hpp> private: // User declarations __fastcall UnicodeString GetSoundName ();
- Delphi の場合:
- GetSoundName 関数を実装します。
メモ: サウンド データを異なるファイル拡張子にすべきかは、ターゲット オペレーティング システムによります。- Delphi の場合:
{$R *.fmx} function TForm1.GetSoundName: string; begin {$IFDEF IOS} Result := 'myiOSSound.caf'; {$ENDIF} {$IFDEF ANDROID} Result := TPath.Combine(TPath.GetSharedDocumentsPath, 'myAndroidSound.mp3'); {$ENDIF} end;
- C++ の場合:
- .cpp ファイルに以下のコードを追加します。
UnicodeString __fastcall TForm1::GetSoundName () { UnicodeString result; #if defined(_PLAT_IOS) result = "myiOSSound.caf"; #endif #if defined(__ANDROID__) result = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDocumentsPath(), "myAndroidSound.mp3"); #endif return result; // }
- サウンド ファイルをプロジェクトに追加します。
- Windows エクスプローラで myAndroidSound.mp3 と myiOSSound.caf ファイルを探し、それらをプロジェクト ウィンドウにドラッグします。 それらをプロジェクトの名前の上にドロップします。
メモ: サウンド ファイル myAndroidSound.mp3 および myiOSSound.caf は、RAD Studio インストール ファイルに含まれていません。 お持ちの好きな MP3 や CAF ファイルを使用して構いませんが、上記のコード スニペットでの名前を、それらファイルの名前に変更することは忘れないでください。 MP3 ファイルから CAF 形式への変更方法については、このリンクを参照してください: How to convert MP3 to CAF- [確認]ダイアログで[はい]をクリックし、サウンド ファイルをプロジェクトに追加します。
- 配置マネージャを開き、サウンド ファイルがアプリケーションと一緒に配置されていることを確認します。[リモート パス]列で対応するエントリを確認することができます。
- iOS の場合:
StartUp\Documents
(iOS アプリケーションでのファイルの配置を参照) - Android の場合:
assets\internal
(Android アプリケーションでのファイルの配置を参照)
- iOS の場合:
- 配置マネージャで追加したファイルのリモート パスを変更します。
- iOS の場合:
.\
- Android の場合:
assets\
- iOS の場合:
通知バナーと通知ダイアログ
デフォルトでは、通知バナーがアプリケーションにより表示されます。
通知バナーではなく通知ダイアログを使用するには(iOS デバイスのみ)、エンド ユーザーが[通知センター]の構成ページ(デバイスの[設定]から利用可能)で[通知のスタイル]を[ダイアログ]に変更する必要があります。
通知ダイアログへのアクションの追加(iOS のみ)
アプリケーションを開くアクション ボタンを追加して、ダイアログをカスタマイズすることもできます。
ダイアログのアクションをカスタマイズするには、AlertAction フィールドをアクション ボタン名に設定し、その後、HasAction フィールドを True に設定します。コードは次のとおりです。
- フォームに新しい TButton をドロップします。
- [オブジェクト インスペクタ]で Name プロパティを ActionNotification に変更します。
- ActionNotification ボタンをダブルクリックして、OnClick イベントを作成します。
- ActionNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.ActionNotificationClick(Sender: TObject); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'MyNotification'; MyNotification.AlertBody := 'Delphi for iOS is here! '; MyNotification.Number := 2; MyNotification.AlertAction := 'Launch'; MyNotification.HasAction := True; MyNotification.FireDate := Now + EncodeTime(0, 0, 20, 0); NotificationCenter1.ScheduleNotification(MyNotification); finally MyNotification.DisposeOf; end; end;
- C++ の場合:
void __fastcall TForm1::ActionNotificationClick(TObject *Sender) { if (NotificationCenter1->Supported()) { TNotification *myNotification = NotificationCenter1->CreateNotification(); __try { myNotification->Name = "MyNotification"; myNotification->AlertBody = "C++ for iOS is here!"; myNotification->Number = 2; myNotification->AlertAction = "Launch"; myNotification->HasAction = True; myNotification->FireDate = Now() + EncodeTime(0,0,20,0); NotificationCenter1->ScheduleNotification(myNotification); } __finally { myNotification->DisposeOf(); } } }
通知ダイアログは、FireDate フィールドで指定されたときに開きます。
通知へのアクションの追加
TNotificationCenter クラスは、onReceiveLocalNotification イベント ハンドラでは、ユーザーが通知センターで通知メッセージをクリックした際の、レスポンスを記述することができます。 レスポンスを記述するには、フォーム デザイナ上の TNotificationCenter コンポーネントをダブルクリックし、OnReceiveLocalNotification イベント ハンドラを実装します。
次のコードでは、"The <Notification name>" notification clicked."(<通知名> の通知がクリックされました。)というメッセージ ボックスを表示する応答を実装しています。
- Delphi の場合:
procedure TForm1.NotificationCenter1ReceiveLocalNotification(Sender: TObject; ANotification: TNotification);
begin
ShowMessage('The ' + ANotification.Name + ' notification clicked.' );
end;
- C++ の場合:
void __fastcall TForm1::NotificationCenter1ReceiveLocalNotification(TObject *Sender, TNotification *ANotification)
{
ShowMessage("The " + ANotification->Name + " notification clicked.");
}
アプリケーションの実行
アプリケーションを実行するには、[実行|実行]を選択するか、F9 キーを押します。別のボタンをクリックすると、デバイスで通知のスケジュール設定や表示を行うことができます。
関連項目
- 通知の利用
- モバイル チュートリアル:写真を撮って共有する、テキストを共有する(iOS および Android)
- モバイル チュートリアル:位置センサを使用する(iOS および Android)
- モバイル チュートリアル:リモート通知を使用する(iOS および Android)
- モバイル サンプル コード:通知
- イベントの作成:インデックス
- macOS 通知センターの利用
- MP3 から CAF への変換方法(英語版)
サンプル
- FireMonkey Send Cancel Notification サンプル
- FireMonkey Android Notification Service サンプル
- FireMonkey Set Reset Badge Number サンプル
- OSX Dock Badges (Delphi)
- FireMonkey Notificaton Mac (Delphi)