モバイル チュートリアル:通知を使用する(iOS および Android)

提供: RAD Studio
移動先: 案内検索

モバイル チュートリアル:モバイル アプリケーション開発(iOS および Android) への移動


このチュートリアルでは、モバイル デバイス上で通知を使用する基本的な手順を説明します。 詳細については、「通知の利用」を参照してください。

3 つの基本的な通知(警告)方法

ユーザーがモバイル デバイスでアプリケーションの通知を設定している場合には、ここに示す 3 つの基本的な方法でアプリケーションから通知を配信できます。 バナーは一定時間で消えますが、警告ダイアログ ボックスはユーザーが消す必要があります。

モバイル デバイスの通知バナー

iOS

IOSNotificationBanner.PNG

Android

Android Notification.png


警告ダイアログ:iOS バッジ番号と Android 通知番号

iOS バッジ番号
iPad
Android 通知番号
Android

モバイル デバイスの通知センター

次に示すのは、iPad の通知センターおよび Android の通知ドロワーです。ユーザーがリストをプルダウンすると最近の通知すべてを見ることができます。

iOS

IOSNotificationCenter.PNG

Android

Android Notification Center.png

通知サービスへのアクセス

RAD Studio により、通知サービスに簡単にアクセスするための TNotificationCenter コンポーネントが用意されています。

通知サービスにアクセスするには、次の作業を行います。

  1. モバイル アプリケーションを新規作成します。
  2. ツール パレットTNotificationCenter コンポーネントを選択し、フォーム デザイナ上にドロップします。
  3. 次のユニットが自動的にプロジェクトに追加されているかどうかをチェックします:
    • Delphi アプリケーションの場合、次のユニットが uses 句に含まれていなければ追加します。
    uses
      System.Notification;
    
    • C++ アプリケーションの場合、プロジェクト ヘッダー ファイル(.h ファイル)に以下の #include を追加します。
    #include <System.Notification.hpp>
    

System.Notification.TNotificationCenter.CreateNotification メソッドにより、TNotification クラス オブジェクトのインスタンスを作成することができます。

FMLocalNotificationPermission の追加(iOS)

iOS 8+ デバイスの通知を使用するには、[<プロジェクト名> のプロジェクト オプション]の[バージョン情報]ページで FMLocalNotificationPermission のキーと値のペアを有効にする必要があります。

  1. [プロジェクト|オプション...|バージョン情報を選択します。
  2. [ターゲット]フィールドで、[Debug 構成 - iOS デバイス - 32 ビット プラットフォーム]を選択します。
  3. FMLocalNotificationPermission[値]フィールドを true に設定します。
    このように FMLocalNotificationPermission を設定すると、iOS 8+ デバイスでのローカル通知が有効になります。
FMLocalNotificationPermission.png

コードからのアイコンのバッジ番号および通知番号の設定

TNotification.Number は、アイコンのバッジ数(iOS デバイスの場合)、または、通知数(Android デバイスの場合)を定義します。

iOS のアイコン バッジ番号(Delphi および C++)または Android の通知番号(Delphi アプリケーションのみ)を設定するには、対応するメソッドを実装する必要があります。

  1. フォームTButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを SetNumber に変更します。
  3. SetNumber ボタンをダブルクリックして、OnClick イベントを作成します。
  4. SetNumber ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
    • Delphi の場合:
    procedure TForm1.SetNumberClick(Sender: TObject);
    var
      MyNotification: TNotification;
    begin
      // TNotification のインスタンスを作成する
      MyNotification&nbsp;:= NotificationCenter1.CreateNotification;
      try
          // --- 必要なコードをここに記述する ---
          // アイコンまたは通知の番号を設定する
          MyNotification.Number&nbsp;:=18;
          // 警告メッセージを設定する
          MyNotification.AlertBody&nbsp;:= '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();
                    }
            }
    
    }
    

アプリケーションの実行後(F9 キーを押す)、SetNumber ボタンをクリックすると、次のとおりになります。

  • アプリケーション アイコンのバッジ(iOS ホーム画面):
    IOSNotification.PNG

  • 通知センターの通知メッセージのとなりにある番号(Android):
    Android

通知のスケジュール設定

ScheduleNotification メソッドで通知メッセージのスケジュールを設定することもできます。このメソッドは、TNotificationCenter クラスが TCustomNotificationCenter から継承したものです。

通知メッセージを表示するには、TNotification クラスのインスタンスを作成し、NameAlertBodyFireDate の各フィールドを定義する必要があります。

  1. フォームに新しい TButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを ScheduleNotification に変更します。
  3. ScheduleNotification ボタンをダブルクリックして、OnClick イベントを作成します。
  4. ScheduleNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
    • Delphi の場合:


    procedure TForm1.ScheduleNotificationClick(Sender: TObject);
    var
      MyNotification: TNotification;
    begin
      MyNotification&nbsp;:= NotificationCenter1.CreateNotification;
      try
        MyNotification.Name&nbsp;:= 'MyNotification';
        MyNotification.AlertBody&nbsp;:= 'Delphi for your mobile device is here!';
        // 10 秒後に発生する
        MyNotification.FireDate&nbsp;:= 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 ボタンをクリックすると、デバイスのホーム画面の上部に通知メッセージ(AlertBody)が表示されます。iOS デバイスでは、画面のメッセージは次のようになります。

IOS7NotificationBanner.png

通知メッセージの繰り返し

TNotification オブジェクトの RepeatInterval プロパティを使用して通知メッセージを繰り返すこともできます。

通知メッセージを繰り返すには、TNotification クラスのインスタンスを作成し、NameAlertBodyFireDate の各フィールドを定義する必要があります。

また、ScheduleNotification メソッドを使用し、RepeatInterval プロパティを設定する必要もあります。 以下のコードで、繰り返される間隔を分単位で設定します。

  1. フォームに新しい TButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを RepeatedNotification に変更します。
  3. RepeatedNotification ボタンをダブルクリックして、OnClick イベントを作成します。
  4. RepeatedNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
    • Delphi の場合:


    procedure TForm1.RepeatedNotificationClick(Sender: TObject);
    var
      MyNotification: TNotification;
    begin
      MyNotification&nbsp;:= NotificationCenter1.CreateNotification;
      try
        MyNotification.Title&nbsp;:= 'MyNotification';
        MyNotification.AlertBody&nbsp;:= 'Repeating notification each minute!';
     // 10 秒後に発生する
        MyNotification.FireDate&nbsp;:= Now + EncodeTime(0, 0, 10, 0);
     // 1分毎に繰り返す
        MyNotification.RepeatInterval&nbsp;:= 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 デバイスでは、画面のメッセージは次のようになります。

IOS7RepeatedNotificationBannerCpp.png

スケジュールされたまたは繰り返された通知メッセージの更新またはキャンセル

スケジュール設定された個別の通知メッセージは、TNotification オブジェクトの Name プロパティで識別できます。

メモ: iOS プラットフォームの場合、CancelNotification および ScheduleNotification でキャンセルまたは更新できるのは、まだ提示されていない通知だけです。

スケジュール設定された通知を更新するには、同じ名前(Name プロパティ)を持つ ScheduleNotification のインスタンスを引数にして メソッドをもう一度呼び出すだけです。

スケジュールされた通知をキャンセルするには、使用した識別子を引数にして CancelNotification メソッドを呼び出すだけです。

  1. フォームに新しい TButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを CancelNotification に変更します。
  3. CancelNotification ボタンをダブルクリックして、OnClick イベントを作成します。
  4. 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 クラスのインスタンスを作成し、NameAlertBody の各フィールドを定義します。

  1. フォームに新しい TButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを PresentNotification に変更します。
  3. PresentNotification ボタンをダブルクリックして、OnClick イベントを作成します。
  4. PresentNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
    • Delphi の場合:


    procedure TForm1.PresentNotificationClick(Sender: TObject);
    var
      MyNotification: TNotification;
    begin
      MyNotification&nbsp;:= NotificationCenter1.CreateNotification;
      try
        MyNotification.Name&nbsp;:= 'MyNotification';
        MyNotification.AlertBody&nbsp;:= 'Delphi for your mobile device is here!';
        // アイコン バッジ番号(iOS の場合)またはメッセージ番号(Android の場合)も設定する
        MyNotification.Number&nbsp;:= 18;
        MyNotification.EnableSound&nbsp;:= 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 プロパティを定義する必要があります。 また、サウンド ファイルとファイル拡張子の完全パスを指定する必要もあります。

  1. フォームに新しい TButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを SoundNotification に変更します。
  3. SoundNotification ボタンをダブルクリックして、OnClick イベントを作成します。
  4. SoundNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
    • Delphi の場合:


    procedure TForm1.SoundNotificationClick(Sender: TObject);
    var
      MyNotification: TNotification;
    begin
      MyNotification&nbsp;:= NotificationCenter1.CreateNotification;
      try
        MyNotification.Name&nbsp;:= 'MyNotification';
        MyNotification.AlertBody&nbsp;:= 'Delphi for your mobile device is here!';
        MyNotification.EnableSound&nbsp;:= True;
        MyNotification.SoundName&nbsp;:= GetSoundName;
    MyNotification.FireDate&nbsp;:= 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();
            }
    }
    
  5. 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 ();
    
  6. 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;
      //
    }
    
  7. サウンド ファイルをプロジェクトに追加します。
    • Windows エクスプローラで myAndroidSound.mp3 ファイルと myiOSSound.caf ファイルを検索し、それらを[プロジェクト マネージャ]にドラッグします。それらをプロジェクト名上にドロップします。
      メモ: myAndroidSound.mp3 と myiOSSound.caf のサウンド ファイルは、RAD Studio のインストール時には含まれていません。お持ちの MP3 ファイルや CAF ファイルを使用してください。ただし、上記コード スニペット上でのファイル名はお使いのファイル名に変更することを留意する必要があります。MP3 ファイルから CAF 形式への変換方法についての詳細は、「How to convert MP3 to CAF(MP3 から CAF への変換方法)」(英語版)を参照してください。
    • [確認]ダイアログで[はい]をクリックし、サウンド ファイルをプロジェクトに追加します。
  8. 配置マネージャを開き、サウンド ファイルがアプリケーションと一緒に配置されていることを確認します。[リモート パス]列で対応するエントリを確認することができます。
  9. 配置マネージャで追加したファイルのリモート パスを変更します。
    • iOS の場合: .\
    • Android の場合: assets\

通知バナーと通知ダイアログ

デフォルトでは、通知バナーがアプリケーションにより表示されます。

  • iPad の通知バナー
    IOSNotificationBanner.PNG
  • Android デバイスの通知バナー
    Android
  • 通知ダイアログ(iOS デバイスのみ)
    IOSNotificationAlert.PNG

通知バナーではなく通知ダイアログを使用するには(iOS デバイスのみ)、エンド ユーザーが[通知センター]の構成ページ(デバイスの[設定]から利用可能)で[通知のスタイル][ダイアログ]に変更する必要があります。

IOSNotificationCenterOption.PNG

通知ダイアログへのアクションの追加(iOS のみ)

アプリケーションを開くアクション ボタンを追加して、ダイアログをカスタマイズすることもできます。

ダイアログのアクションをカスタマイズするには、AlertAction フィールドをアクション ボタン名に設定し、その後、HasAction フィールドを True に設定します。コードは次のとおりです。

  1. フォームに新しい TButton をドロップします。
  2. [オブジェクト インスペクタ]Name プロパティを ActionNotification に変更します。
  3. ActionNotification ボタンをダブルクリックして、OnClick イベントを作成します。
  4. ActionNotification ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
    • Delphi の場合:


    procedure TForm1.ActionNotificationClick(Sender: TObject);
    var
      MyNotification: TNotification;
    begin
       MyNotification&nbsp;:= NotificationCenter1.CreateNotification;
      try
        MyNotification.Name&nbsp;:= 'MyNotification';
        MyNotification.AlertBody&nbsp;:= 'Delphi for iOS is here! ';
        MyNotification.Number&nbsp;:= 2;
        MyNotification.AlertAction&nbsp;:= 'Launch';
        MyNotification.HasAction&nbsp;:= True;
        MyNotification.FireDate&nbsp;:= 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();
               }
       }
     }
    

メモ: 通知ダイアログ機能をサポートしているのは iOS デバイスだけです。

通知ダイアログは、FireDate フィールドで指定されたときに開きます。

IOSNotificationAlert.PNG

通知へのアクションの追加

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.");
}



MyNotification iOS.png

アプリケーションの実行

アプリケーションを実行するには、[実行|実行]を選択するか、F9 キーを押します。別のボタンをクリックすると、デバイスで通知のスケジュール設定や表示を行うことができます。

関連項目

サンプル