マルチデバイス アプリケーションでのプッシュ通知の受信

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

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

Android と iOS のどちらにも使用できる要素を使用して、プッシュ通知を受信する基本のアプリケーションを作成し、それから特定のプラットフォームに特有のコードを追加します。

メモ: このトピックの実装は REST BAAS フレームワーク上に作成します。そのため、Appmethod で iOS または Android アプリケーションを作成する場合、使用できるサービス プロバイダは以下のいずれかです。
  • Kinvey
  • Parse
  • EMS

プッシュ通知を受信するアプリケーションを作成する前に、必ず以下の 2 つの必須手順を実施してください。

ユーザー インターフェイスの設計とセットアップ

  1. 次のいずれかを選択してマルチデバイス アプリケーションを作成します。
    [ファイル|新規作成|マルチデバイス アプリケーション - Object Pascal|空のアプリケーション]
    [ファイル|新規作成|マルチデバイス アプリケーション - C++|空のアプリケーション]
  2. TCheckBox コンポーネントをフォーム上にドロップします。
    [オブジェクト インスペクタ]で、CheckBox のプロパティを次のように設定します。
    1. AlignTop に設定します。
    2. IsChecked プロパティを False に設定します。
    3. Text を「Active」に設定します。
  3. TMemo コンポーネントをフォームに追加し、その Align プロパティを Client に設定します。
  4. TPushEvents オブジェクトをドロップします。
  5. AutoActivateFalse に設定します。
  6. [LiveBinding デザイナ]で、PushEventsActive から CheckBoxIsChecked へのリンクを追加します。こうすると、CheckBox コンポーネントをオンにしたときに、PushEventsActive プロパティが True に設定されます。
    Link.png
  7. 使用するサービス プロバイダに合わせて、以下を追加します。
    1. TKinveyProvider を使用する場合(iOS または Android)
      KinveyProvider.png
      [オブジェクト インスペクタ]で、KinveyProvider のプロパティを次のように設定します。
      KnvProv.png
    2. TParseProvider を使用する場合(iOS または Android)
      ParseProvider.png
      [オブジェクト インスペクタ]で、ParseProvider のプロパティを次のように設定します。
      メモ: Android アプリケーションの開発時に Parse を使用する場合、GCM AppID を追加する必要はありません。
      ParsePorviderSett.png
    3. TEMSProvider の使用(iOS または Android)
      EMSProvider.png
      [オブジェクト インスペクタ]で、EMSProvider のプロパティを次のように設定します。
      EMSProv.png

イベント ハンドラの作成

  1. フォームで PushEvents1 を選択し、オブジェクト インスペクタに移動します。
    • Provider プロパティが、使用するプロバイダに合わせて KinveyProvider1ParseProvider1、または EMSProvider1 に設定されているかを確認します。
    • [イベント]タブを開き、値のフィールドをダブルクリックして各イベントのイベント ハンドラを作成します。
    PushEvents.png
  2. F12 キーを押して[コード]タブに切り替えます。
  3. イベント ハンドラを次のように定義します。
    Object Pascal の場合:
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.PushEvents1DeviceRegistered(Sender: TObject);
    begin
      Memo1.Lines.Add('Device Registered');
      Memo1.Lines.Add('');
    end;
    
    procedure TForm1.PushEvents1DeviceTokenReceived(Sender: TObject);
    begin
      Memo1.Lines.Add('Device Token Received');
      Memo1.Lines.Add('');
    end;
    
    procedure TForm1.PushEvents1DeviceTokenRequestFailed(Sender: TObject;
      const AErrorMessage: string);
    begin
      Memo1.Lines.Add('Device Token Request Failed');
      Memo1.Lines.Add(AErrorMessage);
      Memo1.Lines.Add('');
    end;
    
    procedure TForm1.PushEvents1PushReceived(Sender: TObject;
      const AData: TPushData);
    begin
      Memo1.Lines.Add('Device push received');
      Memo1.Lines.Add(AData.Message);
      Memo1.Lines.Add('');
    end;
    
    end.
    
    C++ の場合:
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1DeviceRegistered(TObject *Sender)
    {
       Memo1->Lines->Add("Device Registered");
       Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1DeviceTokenReceived(TObject *Sender)
    {
       Memo1->Lines->Add("Device Token Received");
       Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1DeviceTokenRequestFailed(TObject *Sender, const UnicodeString AErrorMessage)
    
    {
      Memo1->Lines->Add("Device Token Request Failed");
      Memo1->Lines->Add(AErrorMessage);
      Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::PushEvents1PushReceived(TObject *Sender, TPushData * const AData)
    
    {
      Memo1->Lines->Add("Push Received");
      Memo1->Lines->Add(AData->Message);
      Memo1->Lines->Add("");
    }
    //--------------------------------------------------------------------------
    

Android の設定

メモ: お使いの Android デバイスが GCM に対応しているかどうかは、GCM の概要を参照して確認してください。

プロジェクトの設定

アプリケーションでリモート通知を受信できるようにするには:

  1. [プロジェクト マネージャ]でプロジェクトを右クリックします。
  2. [プロジェクト|オプション...|資格リスト]を選択します。
  3. [プッシュ通知の受信]の値を True に設定します。


メモ: リモート通知が届いたときにアプリケーションが動作していなくても通知を受信できるようにするには、サービス クラスを登録する必要があります。この Java サービス クラスでは、Android デバイスの通知センターにエントリを作成します。通知センターに項目を作成する必要がない、または作成したくない場合には、この手順を省略してもかまいません。

AndroidManifest.template.xml をカスタマイズして、プロジェクトの AndroidManifest.xml にエントリを追加する必要があります。プロジェクトの AndroidManifest.template.xml ファイルで、以下のタグを検索します。

<%receivers%>

その下に、次のコードを追加します。

<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />

iOS の設定

プロジェクトの設定

  1. [プロジェクト マネージャ]でプロジェクトを右クリックします。
  2. [プロジェクト|オプション...|バージョン情報]を選択し、CFBundleIdentifier キーを設定します。これは、App ID の識別子と同じでなければなりません。「Apple デベロッパ プログラムで iOS アプリケーション ID を作成する」セクションの[Bundle ID]です。
VersionInfo.png

モバイル デバイス上でのアプリケーションの実行

これで、シミュレータまたは接続したモバイル デバイスの上でアプリケーションを実行する準備ができました。
アプリケーションを実行するには:

  1. [プロジェクト マネージャ]でターゲット プラットフォームを選択します。
  2. 次のいずれかのコマンドを選択します。
    • [実行|実行]
    • [実行|デバッガを使わずに実行]
  3. [Active]チェック ボックスをクリックします。
  4. Parse、Kinvey、または EMS プッシュメッセージの送信に移動して、新しいプッシュを送信します:
    メモ: 独自の EMS アプリケーションを使用して EMS プッシュ通知メッセージを送信することができます。
    Parse

    ParseHello.png

    Kinvey

    HelloKinvey.png

    EMS

    HelloEMS.png

  5. モバイル デバイスに戻ります。
    iOS

    IosDevice.png

    Android

    AndroidHello.png

    iOS EMS

    IOSEMSHello.png


  6. アプリケーションをバックグラウンドに移動し、Parse または Kinvey から別のプッシュ通知を送信します。通知を開きます。
    iOS

    Pushios.png

    Android

    AndNotificationCenter.png

関連項目

コード サンプル