第2章 モバイルバックエンド

2.1. MbaaS ターゲットおよび環境

2.1.1. 概要

MBaaS (Mobile Backend as a Service: サービスとしてのモバイルバックエンド) は、クラウドアプリとクラウドサービス向けのランタイムスペースです。各 MBaaS では、Node.js ランタイム、NoSQL データベース、キャッシングサーバー、およびすべての クラウド API が提供されます。

アプリケーションのライフサイクル管理をサポートするために、環境 と呼ばれる、クラウドアプリとクラウドサービス向けに提供される分離層があります。環境は、開発テスト、および実稼働 といったプロジェクトの各ライフサイクルステージ向けに設定することができます。環境にはクラウドサービスとフォームが常にデプロイされ、これらはある環境から別の環境に簡単にプロモートすることができます。

1 つの MBaaS では、1 つ以上の環境をホストすることができます。例えば、単一の MBaaS に開発環境とテスト環境を一緒にホストし、 別の MBaaS を実稼働環境専用とすることが可能です。複数の環境を MBaaS でホストしている場合でも、それらが共有するのはシステムリソースのみで、Node.js ランタイムやデータベース、キャッシングサーバーなどほとんどのレベルでは分離されており、ホスト名も別のものになります。

2.1.2. MBaaS ターゲットの作成

管理者 > MBaaS ターゲット セクションに移動します。

MBaaS ターゲットには、FeedHenryOpenShift 2 および OpenShift 3 という 3 つのタイプがあります。各タイプでは、以下に示すように独自の設定が必要になります。

注記

MBaaS ターゲットのタイプは、作成後に変更することはできません。

2.1.2.1. FeedHenry MBaaS ターゲット

  • MBaaS ID: 内部参照用の一意の ID。

    このパラメーターは、MBaaS ターゲットの作成後に変更することはできず、特殊文字や大文字を含めることはできません。

  • MBaaS ラベル: Studio 内で使用されるカスタムラベル。
  • MBaaS URL: MBaaS ターゲットのホスト名。
  • ユーザー名: インスタンスにログインする際に使用するユーザー名。
  • パスワード: インスタンスにログインする際に使用するパスワード。
  • サービスキー: FeedHenry MBaaS でシステムの特定に使用するキー。

2.1.2.2. OpenShift 2 MBaaS ターゲット

  • MBaaS ID: 内部参照用の一意の ID。

    このパラメーターは、MBaaS ターゲットの作成後に変更することはできず、特殊文字や大文字を含めることはできません。

  • MBaaS ラベル: Studio 内で使用されるカスタムラベル。
  • MBaaS URL: パブリック OpenShift インスタンスのホスト名 (例: openshift.redhat.com)。
  • ユーザー名: OpenShift 2 のユーザー名。
  • パスワード: OpenShift 2 のパスワード。
  • fh-mbaas Host: 実行中 fh-mbaas サービスのホスト名

    注記

    アプリでフォームを使用する予定の場合は、fh-mbaas Host フィールドの設定が必要になります。これには、fh-mbaas サービスを OpenShift インスタンスにデプロイする追加ステップが必要になります。詳細は、Enabling Forms support in OpenShift Targets を参照してください。

2.1.2.3. OpenShift 3 MBaaS ターゲット

  • MBaaS ID: 内部参照用の一意の ID。

    このパラメーターは、MBaaS ターゲットの作成後に変更することはできず、特殊文字や大文字を含めることはできません。

  • MBaaS ラベル: Studio 内で使用されるカスタムラベル。
  • OpenShift Master URL: OpenShift Master API が利用可能な URL。
  • ユーザー名: OpenShift 3 のユーザー名。
  • パスワード: OpenShift 3 のパスワード。
  • OpenShift Router DNS: OpenShift 3 ルーターのワイルドカード DNS エントリー。例えば、*.local.feedhenry.io
  • Automatic MBaaS Installation: 自動インストールの MBaaS は、実稼働環境で必要となる回復性と安定性において最適化されていません。実稼働での使用については、manual installation steps を参照してください。
  • MBaaS サービスキー: fh-mbaas サービスにおける FHMBAAS_KEY 環境変数の値。
  • MBaaS URL: fh-mbaas が OpenShift で実行している公開ルート

MBaaS ターゲットの設定後には、少なくとも 1 つの環境を追加する 必要があります管理者 > 環境 に移動して環境を追加します。

2.1.3. 環境の作成

管理者 > 環境 に移動します。

まず、環境の作成 ボタンを使用して新規環境を作成します。以下のパラメーターが必要になります。

  • 環境 ID: 内部参照用の一意の ID。

    このパラメーターは、環境の作成後に変更することはできず、特殊文字や大文字を含めることはできません。

  • 環境ラベル: Studio 内で使用されるカスタムラベル。
  • MBaaS ターゲット: 環境が使用する MBaaS ターゲット。1 つの環境で使用できるのは 1 つの MBaaS ターゲットのみです。

これでこの新規環境にクラウドアプリ、クラウドサービス、フォームをデプロイすることができます。

2.2. クラウドリソース

2.2.1. 概要

プラットフォームではアプリがステージまたはデプロイされるとクラウド環境と呼ばれるコンテナー内で実行されることになります。コンテナーレベルとアプリレベルの両方における環境リソースの使用率がここで管理、表示できます。

要件

ユーザーは、以下のパーミッションを持つ 1 つ以上のチームメンバーである必要があります。

  • ドメイン — クラウドリソース (表示 & 編集)
  • ドメイン — プロジェクト (表示)

2.2.2. サマリービュー

ページが読み込まれたら、リソースのサマリービューが表示されます。ドメインで利用可能なクラウド環境や環境の CPU、メモリー、およびディスクの現在の使用率が確認できます。各サマリービューは、クリックすると拡大されます。

2.2.3. リソース

このビューでは、メモリー、CPU およびディスクリソースの詳細な使用率が表示されます。「ダッシュボード」ビューにはこれら 3 つのリソースすべての概要ビューがあり、各リソースのタブには環境とアプリごとの使用率があります。

2.2.4. アプリ

環境内で現在実行中の全アプリ、それらのステータス、リソース使用率が見られるほか、それらの管理もできます。ここでは組み込みアプリ (ビルド組み込みアプリウィザードでデプロイされたもの) の制御もできることに留意してください。

2.2.5. キャッシュ

環境の現在のキャッシュ使用率が確認できるほか、キャッシュをフラッシュして最大キャッシュサイズをリセットすることができます。

2.3. プッシュ通知

2.3.1. 概要

プッシュ通知は、サーバー側のアプリケーションがモバイルのクライアントとの通信を開始するメカニズムで、サーバー上の新規コンテンツの可用性をユーザーに知らせたり、ショートメッセージを送信するものです。これは通常、メッセージングやソーシャルネットワークアプリケーションに使用されたり、ユーザーがモバイルデバイスを扱っていない場合でも常に情報提供を望んでいる場合などに使用されます。

Red Hat Mobile Application Platform ホスト型 (RHMAP) には、プッシュ通知のサポートが統合されています。単一の統合 API を使用して、全クライアントデバイスに通知を送信することができます。これは単一の関数呼び出しで複数の異なるネットワークにわたって同時に実行することができます。RHMAP のプッシュ通知サポートは、オープンソースのプロジェクトである AeroGear UnifiedPush Server (UPS) をベースにしています。

Studio では、以下の 4 つのセクションでプッシュ通知についての情報が提供されます。

  1. Analytics - 詳細は アナリティクス を参照してください。for more information
  2. Variants - 通知の対象となるデバイスグループを作成、管理します。
  3. Sender API - Sender API はサポートされており、バックエンドサーバーによるプッシュ通知の送信が可能になっています。
  4. Activity log - 全プッシュメッセージの詳細を表示します。

プッシュ通知の使用を開始するには、client API および cloud API のドキュメンテーションをご覧いただくか、ステップごとのガイドとなっている Developing An Application Using Push Notifications を参照してください。

2.3.2. サポートされるプラットフォーム

プッシュ通知は、サポートされている全モバイルプラットフォームで対応するプッシュ通知ネットワークにより利用可能となっています。

  • Android — Firebase Cloud Messaging (FCM) (以前は Google Cloud Messaging - GCM)
  • iOS — Apple Push Notification Service (APNS)
  • Windows

    • ネイティブの Windows Phone 8 アプリと Windows の Cordova アプリの場合は Microsoft Push Notification Service (MPNS)
    • ネイティブの Windows 8.1 および Windows 10 Universal Apps の場合は Windows Push Notification Service (WNS)

2.3.3. 作動方法

RHMAP 内のプッシュ通知サーバーが、クラウドアプリから個別のプッシュネットワークに通知を配布するブローカーとして機能します。個別のネットワークは、登録されたモバイルデバイスにメッセージを配布します。

プッシュ通知

  1. 初期設定

    • 各クライアントアプリごとにプッシュ通知のサポートを有効にします。
    • FCM や APNS、MPNS など、プッシュ通知ネットワークのすべてのターゲットとなる バリアント を有効し、証明書やプライベートキーなどのネットワークへのアクセスのための認証情報を提供します。個別ネットワークの設定については、Obtaining credentials for push networks を参照してください。Cordova アプリの場合は、ネイティブのクライアントアプリのように、各ターゲットプラットフォーム向けにバリアントを作成します。
  2. 登録
    起動時にクライアントアプリは $fh.push を呼び出してプッシュサーバーと登録し、通知を受信する準備が整います。登録中は、クライアントの ID と設定がサーバーに送信されます。
  3. API コールのプッシュ
    クラウドアプリは、$fh.push を呼び出してプッシュ通知を送信します。API ではすべてをターゲットとするか、またはプロジェクト内の特定のクライアントアプリのみをターゲットとすることができます。
  4. 配布
    $fh.push の呼び出しは、統合プッシュサーバーが処理し、これが対応するすべてのプッシュネットワークに通知を配布します。ただし、ターゲットとなるクライアントアプリで有効になっているバリアントに依存します。
  5. 配信
    モバイルデバイスへの実際の配信は、個別のプッシュ通知をネットワークが処理します。
  6. レポート
    メタデータは RHMAP にレポートバックされ、これには通知が配信されたことおよびエンドユーザーが通知を開いたかどうかについての情報が含まれます。
注記

プッシュ通知がサードパーティーのネットワークを経由することで、これを使用するアプリケーションの設計に以下のような影響が出てきます。

  • 配信: RHMAP ではターゲットのモバイルデバイスへの配信は保証できません。ほとんどのプッシュ通知は配信が保証されないためです。
  • セキュリティー: プッシュ通知の一部として慎重に扱うべき情報や機密情報は絶対に送信しないことが推奨されます。詳細は、セキュリティー面の留意点 を参照してください。

2.3.4. 通知の送信

一番単純なユースケースは、全体通知を全デバイスに配信する場合です。以下に例を示します。

$fh.push(
  {alert: "Hello from {ProductShortName} to all devices!"},
  {broadcast: true},
  function (err, res) {
    if (err) {
      console.log(err.toString());
    } else {
      console.log("status : " + res.status);
    }
  }
);

プラットフォームでは、全デバイス、フィルタリングしたデバイスセット、または単一デバイスなどのいくつかのモードによる配信が可能です。また、プロジェクト内のどのクライアントアプリがプッシュ通知を受信するか選択することができます。

2.3.4.1. クライアントアプリのフィルタリング

クラウド側の $fh.push 呼び出しでは、以下のいずれかの通知配信モードを明示的に選択する必要があります。

  • broadcast - 通知はプロジェクト内の全クライアントアプリに配信されます。
  • selected client apps - App ID で特定される選択したクライアントアプリのみが通知を受信します。

例と完全なドキュメントについては、 cloud Push API documentation を参照してください。

2.3.4.2. 受信者のフィルタリング

クライアントアプリをサーバーに登録する際には、その ID と設定が報告され、通知のフィルタリングを有効にします。プッシュ通知は登録した全デバイスに配信するか、以下の利用可能な基準でフィルタリングを行った特定のサブセットのみに配信するように選択できます。

  • エイリアス - ユーザー名やE メール (複数デバイスの場合あり) などのユーザー ID で表されるユーザー。
  • カテゴリー - 追加のフィルタリング基準で、publish-subscribe 通信モデルを有効にします。
  • デバイスタイプ - クライアントデバイスが自動的に設定します。モバイルデバイスハードウェアの短い識別子です。
  • バリアント ID - プラットフォームが自動的に設定します。選択したプッシュ通知の処理にのみ使用可能です。

例と完全なドキュメントについては、client Push API documentation を参照してください。

2.3.5. セキュリティー面の留意点

2.3.5.1. 通知のコンテンツ

上記で説明したように、プッシュ通知のペイロードは、Google や Apple などのサードパーティーのプッシュ通知ネットワークプロバイダーに配布されます。個人に属する慎重に扱うべき個人または機密情報 (社会保障番号、金融機関の口座もしくは取引情報など)、または個人が安全な通信を合理的に期待する情報は、プッシュ通知の一部として送信しないことが強く推奨されます。

慎重に扱うべきコンテンツをデバイスに配信する必要がある場合の推奨される方法は、サーバーで新たなコンテンツが利用可能であることをユーザーに知らせる通知のみを送信することです。そのようなコンテンツは、ユーザーが通知に反応した場合に別の信頼できるチャンネルで安全にデバイスに送信することができます。

2.3.5.2. バリアントシークレット

バリアント IDバリアントシークレット を格納している設定ファイルは、クライアントアプリバイナリーでモバイルデバイスに配布されます。これらの認証情報は、クライアントアプリがプッシュサーバーに登録する権限を付与します。これらのキーは安全に保管し、クライアントアプリバイナリー以外のチャンネルでは配信しないようにしてください。

バリアントシークレットキーの安全が侵害された場合は、これを無効にし、新たなキーで置換できます。Studio ではクライアントアプリのプッシュセクションからバリアントタブを開き、Renew Variant Secret をクリックすると、キーが更新されます。

警告

バリアントシークレットキーを更新したら、既存のインストールはプッシュ通知を使用することができなくなり、新バージョンのクライアントアプリバイナリーで新しいキーを再配布する必要があることに留意してください。

2.3.6. プッシュネットワーク用認証情報の取得

ビルトインの UnifiedPush Server (UPS) が Google、Apple および Microsoft などの個別プロバイダーのプッシュ通知ネットワークにアクセスできるようになるには、承認のための認証情報をプロバイダーのプッシュサーバーに提供する必要があります。必要な認証情報とそれらを取得する方法は、各プロバイダーによって異なります。ターゲットとなるプラットフォームのガイドにしたがい、必要な認証情報を書き留めてください。これは、アプリ用にプッシュネットワークバリアントを設定する際に RHMAP に提供する必要があります。

2.3.6.1. Android

ステップごとの指示については、Obtaining FCM Credentials Guide を参照してください。

必要な認証情報:

  • サーバー API キー
  • プロジェクト番号

2.3.6.2. iOS

ステップごとの指示については、APNs Push Notifications with AeroGear’s UnifiedPush Server Guide を参照してください。

必要な認証情報:

  • クライアント SSL 証明書
  • 証明書のパスフレーズ

ガイドでは、バンドル ID を提供することが求められます。これは iOS アプリの一意の識別子です。iOS アプリを Xcode で作成して RHMAP にインポートしている場合は、既にバンドルID が設定されている可能性が高くなります。バンドル ID と Xcode でのこの設定については、公式 Apple ドキュメンテーションにある About Bundle IDs を参照してください。

iOS アプリを RHMAP で作成している場合は、アプリにデフォルトのバンドル ID が割り当てられており、これをカスタム値に変更する必要があります。バンドル ID はプロジェクトのプロパティー一覧ファイルで設定されており、<name-of-your-project>/<name-of-your-project>-Info.plistCFBundleIdentifier キーの下にあります。

Cordova アプリの場合は、バンドル ID は手動で設定できます。エディターでアプリの config.xml ファイルを開いて、<widget id=""> フィールドの値を設定します。

警告

生成されたプッシュ通知用のクライアント SSL 証明書は、特定のバンドル ID にバインドされています。このため、バインド ID を変更すると、証明書の再生成が必要となります。

2.3.6.3. Windows

MPNS

設定は不要です。

ステップごとに指示については、WNS Push Notifications with AeroGear’s UnifiedPush Server Guide を参照してください。

必要な認証情報:

  • パッケージ SID
  • クライアントシークレット

2.3.7. アナリィティクス

クライアントアプリに送信されるプッシュ通知についての統計値は、Studio で見ることができます。クライアントアプリの プッシュ セクションから アナリティクス タブに移動します。以下の統計値が参照できます。

  • 登録デバイスに配信する統合プッシュサーバーに送信されたプッシュメッセージの数
  • プッシュネットワーク経由で登録デバイスに配信された通知の数
  • ユーザーが開いた配信済み通知の数
  • 平均オープン率
  • 現在登録されているデバイス数

プッシュアナリティクス画面では、以下の表も提示されます。

  • オープン率
  • プッシュネットワークごとの内訳

2.3.8. プッシュ通知対応の Cordova アプリの構築

Cordova アプリ内におけるプッシュ通知のサポートは、aerogear-cordova-push プラグインで提供されます。RHMAP Build Farm でプッシュ対応のアプリがビルドされる場合は、www/config.json ファイルで設定されていれば、このプラグインが特定のビルドに自動的に追加されます。RHMAP Cordova のすべてのテンプレートでは、このプラグインが設定されています。

アプリをローカルでビルドする場合は、以下のコマンドを使用して手動でプラグインを追加する必要があります。

cordova plugin add aerogear-cordova-push

詳細は、Using Cordova Plugins を参照してください。

2.3.9. コミュニティーバージョンの UnifiedPush Server

オープンソースコミュニティーバージョンの AeroGear UnifiedPush Server (UPS) はアプリでの使用が引き続き可能で、UPS を OpenShift にデプロイし、クラウドサービスの AeroGear Community Push Connector でプラットフォームに接続します。このクラウドサービスは、本目的用にプラットフォームで利用可能となっています。ただし、コミュニティーバージョンは評価目的のみで利用可能となっており、公式にはサポートされていことに注意してください。