モバイルデータ プランの共有を始める

用語

  • GTAF: Google Traffic Application Function。データプラン共有 API を実装し、Google アプリケーションに代わって DPA とやり取りする Google サービス。Google アプリケーションは、GTAF にクエリを実行してユーザーのデータプラン情報を取得できます。また、Google アプリケーションが GTAF に登録されている場合、GTAF はユーザーのデータプランに関する更新情報を送信できます。
  • MSISDN: Mobile Station International Subscriber Directory Number(モバイル ステーション国際加入者ディレクトリ番号)。モバイル ネットワークでサブスクリプションを一意に識別する番号。電話番号とも呼ばれます。
  • CPID エンドポイント: 携帯通信会社が実装するサービス。ユーザーのデータプラン情報を検索するために使用できる携帯通信会社プラン ID(CPID)を生成します。CPID を使用すると、アプリはユーザーの MSISDN にアクセスすることなく、ユーザーのデータプランの詳細をクエリできます。CPID を生成する手順は以下のとおりです。
  • ユーザーキー: ユーザーキーは、ユーザーのデータプランを識別するために使用できる文字列です。これは、MSISDN にアクセスできるアプリの CPID または MSISDN のいずれかになります。
  • DPA: Data Plan Agent。モバイル ネットワーク事業者が実装するサービスで、ユーザーのデータプラン情報を GTAF と共有します。DPA は、Google Mobile Data Plan Sharing API を使用してデータを送信し、Data Plan Agent API を実装することで、GTAF と情報を共有できます。DPA は、必要に応じて CPID エンドポイントとしても機能できます。
  • UE: User Equipment(ユーザー機器)、ユーザーが使用するデバイス。

言語の要件

これらのガイドのキーワード「しなければならない」、「してはならない」、「要求される」、「するものとする」、「しないものとする」、「すべきである」、「すべきではない」、「推奨される」、「しても構わない」、「任意」は、RFC 2119 に記載されているように解釈されます。

モバイルデータ プランの共有

モバイルデータ プランの共有は、大まかに次の 3 つの部分で構成されています。

  1. ユーザーキーとして使用できる携帯通信会社のプラン ID(CPID)を確立して更新するメカニズム。MSISDN にアクセスできるアプリは、MSISDN をユーザーキーとして使用できます。
  2. DPA がユーザーのデータプランに関する情報を Google に送信できるようにする Google モバイル データプラン共有 API。たとえば、DPA がユーザーに特典を通知したい場合、GTAF に通知できます。GTAF はユーザーに通知します。
  3. DPA によって実装されるデータプラン エージェント API。GTAF はこの API を使用して、ユーザーのデータプランに関する情報を DPA にクエリできます。たとえば、アプリケーションが現在のデータプランの残高をユーザーに表示したい場合、GTAF にクエリを実行できます。GTAF は DPA にクエリを実行します。

このページの残りの部分では、データプランの用語を紹介し、CPID を確立する方法について詳しく説明します。Google Mobile Data Plan Sharing API と Data Plan Agent API 仕様については、以下をご覧ください。

データプランの用語

API で定義される planStatus のスキーマは、事業者がユーザーに提供するデータプランを表すことができなければなりません。この API は、特定の URL セットへのすべてのトラフィックに対して異なるレートでユーザーに課金するデータプランの定義をサポートしています(例: *.acmefake.com へのすべてのトラフィックに対して異なるレートで課金)。この API は、アプリ内の特定のアクションに対して異なる料金を設定するデータプランもサポートしています。このようなデータプランをサブアプリ データプランと呼びます。サブアプリ データプランの例としては、動画の閲覧は無料(料金ゼロ)で、アプリ内で動画を視聴すると加入者のデータ残高からデータが差し引かれる、といったものがあります。動画アプリは、データプラン情報をクエリする際に、この情報を取得できなければなりません。

ここでは、データプランに関連する用語を紹介します。図 1 は、キャプチャするコンセプトを代表するデータプランの例を示しています。

データプラン: 加入者が購入する最上位のモバイル サービス パッケージ。「30 日間 10 GB のモバイルデータ」のように単純な場合もあれば、モジュールとも呼ばれるコンポーネントの集合として定義される場合もあります。データプランには次のものがあります。

  • データプラン名(「ACME Red」など)。
  • プランを参照するために使用されるデータプラン ID(購入時など)。
  • データプランの有効期限が切れる有効期限
  • プランのカテゴリ: プランが前払いプランか後払いプランか。

プラン モジュール: データプランのコンポーネント。具体的には、プラン モジュールには次のものがあります。

  • モジュール名(例: 「無料動画ナイト」)。
  • 最大レート: このモジュールがユーザーに提供する帯域幅。
  • フレックス時間枠: ユーザーに割引を提供できる時間枠。
  • プラン モジュール トラフィック カテゴリ(PMTC): モジュールが適用するデータ トラフィックの説明。PMTC は、*すべてのインターネット トラフィック *のように一般的なものにすることも、1 つ以上のアプリケーション、ウェブサイト、または単一のアプリケーション内のユーザー ジャーニーによって生成または消費されるトラフィックのように具体的なものにすることもできます。後者の例としては、「音楽無制限」、「100 MB 動画データパック(VDP)」、「ゲームデータ無制限」、「動画閲覧無制限」などがあります。PMTC の定義を容易にするため、GENERIC, VIDEO, VIDEO_BROWSING, VIDEO_OFFLINE1, MUSIC, GAMING, SOCIAL, MESSAGINGPMTC_UNSPECIFIED. の PMTC を定義しました。

  • データ量または時間制限: 有効にすると、データ量または時間制限(時間ベースのプランの場合、例: 600 分)を超えた場合。下の図 1 では、加入者は「ACME Blue」の一部として、有効化から 1 週間以内に使用する必要がある 1 GB の一般ユーザー トラフィックを提供するプラン モジュールを購入できます。

Data Plan API サンプルプラン

図 1. データプランの例。

CPID の確立

GTAF は、DPA との通信時にユーザーキーを使用してサブスクライバーを識別します。ユーザーの MSISDN にアクセスできるアプリは、それを user_key として使用できます。一方、MSISDN にアクセスできないアプリは、ユーザーの MSISDN を検出せずに携帯通信会社のプラン ID(CPID)を確立する必要があります。以降では、CPID を確立するメカニズムについて説明します。

CPID コールフロー

図 2: CPID を確立するためのコールフロー。

  1. UE の Google アプリケーションは、Google 内部 API を使用して GTAF から CPID エンドポイントの URL を取得します。事業者は、クライアントのパブリック IP アドレスとアクティブな SIM カードの MCC+MNC を使用して識別されます。MVNO の場合、Google は SPNGID1 を使用して MVNO を特定します。
  2. クライアントが CPID エンドポイントに HTTP GET リクエストを発行します。オペレーターは、HTTPS 経由でのリクエストの送信をサポートしても構いません。
  3. 事業者は、ディープ パケット インスペクション機能を使用してリクエストを特定し、ユーザーの電話番号を HTTP ヘッダーとしてリクエストに挿入しても構いません。
  4. CPID エンドポイントはリクエストを受信し、CPID を構築して、UE がこの CPID を使用できる期間を示す有効期間(TTL)とともに CPID を UE に返します。

オペレーターは、必要に応じて、CPID エンドポイント URL でドメイン名の代わりに IP アドレスを使用しても構いません。IP アドレスはプライベート アドレス空間に存在しても構いませんが、オペレーターのネットワーク内の Google クライアントからアクセスできる必要があります。

事業者は、オンボーディング プロセスの一環として、Google に以下の情報を提供しなければなりません。 1. アプリが CPID を取得するために接続する CPID_URL。CPID_URL は 1 つ必須ですが、可用性を高めるために複数の URL を指定できます。1. 事業者が所有する IP 接頭辞のリストと、事業者が指定された CPID_URL にマッピングしたいモバイル カントリー コード(MCC)とモバイル ネットワーク コード(MNC)のリスト。ネットワーク内の MVNO を区別するために SPN または GID1 を使用している場合、事業者はこの情報も提供しなければなりません。Google はこの情報を使用して、図 2 のステップ 1 に示すように、クライアントを対応する CPID エンドポイントに照合します。

リクエストの形式は GET CPID_URL です。以前の理由により、CPID エンドポイントは次のようなリクエストをサポートできる必要があります。

GET CPID_URL?app={app_id}

CPID エンドポイントは、CPID の生成時に {app_id} URL パラメータを無視できます。ただし、パラメータを含むリクエストを処理できなければなりません。

CPID エンドポイントへのリクエストには、Accept-Language ヘッダーを含めても構いません。ヘッダーが含まれている場合、DPA がモバイル データプラン共有 API を使用して送信する更新の人間が読める文字列は、CPID リクエストで提供された設定を使用しなければなりません。

クライアントが GET CPID_URL リクエストを発行するたびに、新しい CPID を受け取らなければなりません。CPID の作成が成功した場合、CPID エンドポイントは 200 OK レスポンスを返さなければなりません。レスポンスの本文には、CPIDResponse のインスタンスが含まれていなければなりません。

{
    "cpid": "<CPID_string>",
    "ttlSeconds": 2592000
}

返される CPID は ttlSeconds 秒間有効でなければなりません。GTAF は、DPA への後続の呼び出しで RFC2396 に従って CPID をエンコードします。

エラーが発生した場合、CPID エンドポイントは HTTP エラーを返さなければなりません。レスポンス本文には ErrorResponse のインスタンスが含まれていなければなりません。考えられる cause 値と HTTP エラーコードの一覧は、こちらで確認できます。

{
    "errorMessage": "<error message>",
    "cause": "INVALID_NUMBER"
}

特に、事業者ネットワークに属していないユーザー(別の事業者に属しているが、この CPID エンドポイントが提供するネットワークでローミングしているユーザーなど)や、Google とのデータプラン情報の共有をオプトインしていないユーザーに対して CPID リクエストが受信された場合、CPID エンドポイントは HTTP ステータス コード 403 を返さなければなりません。

CPID の生成

CPID エンドポイントが CPID を作成する推奨方法は次のとおりです。

CPID_string = Base64(AES(MSISDN + TimeStamp + language, secret))

CPID エンドポイントは、MSISDN、クライアントが Accept-Language ヘッダーで送信した言語、高解像度のタイムスタンプを連結し、secret キーを使用して AES で暗号化します。タイムスタンプは、CPID の有効期限に対応しているべきです。暗号化された出力は Base64 でエンコードされます。さらに、CPID を URL で使用する場合は、Base64 で使用される特殊文字(/+=)を処理するために URL エンコードしなければなりません。特に、GTAF が DPA を呼び出す場合、または DPA がモバイル データ プラン共有 API を呼び出す場合、CPID は URL エンコードされなければなりません。この方法で CPID を生成する利点は、DPA と CPID エンドポイントに有効な CPID と MSISDN のデータベースが不要になることです。

特定の事業者の状況によっては、CPID エンドポイントの実装が容易でない場合があります。頻繁に発生する課題として、CPID エンドポイントで MSISDN にアクセスすることが挙げられます。オペレーターのオンボーディングで得られた教訓をご紹介します。ご不明な点がございましたら、お気軽にお問い合わせください。

セキュリティ要件

事業者は、加入者の個人情報を保護するために必要なあらゆる予防措置を講じなければなりません。具体的には、加入者の電話番号の露出を最小限に抑えるため、CPID エンドポイントはセキュリティ境界内に配置すべきです。また、事業者が DPI を使用している場合、事業者は MSISDN を HTTP リクエストに挿入する前に暗号化すべきです。CPID エンドポイントがセキュリティ境界でない場合(CPID エンドポイントがパブリック クラウドにデプロイされている場合など)、事業者は MSISDN を公共のインターネット上でクリアテキストで送信すべきではありません。事業者は、DPI と CPID エンドポイントの間に VPN を確立するか(図 1 を参照)、MSISDN を暗号化してからヘッダーに挿入できます。後者のアプローチでは、CPID エンドポイントが挿入されたヘッダーを復号して MSISDN を復元してから CPID を生成できることを前提としています。さらに、事業者は CPID の生成に使用される秘密鍵を保護し、事業者のセキュリティ ポリシーに従ってこの鍵をローテーションしなければなりません。

可用性と容量の要件

クライアントが CPID を取得できない場合、モバイル データプラン API からの情報を取得することはできません。そのため、オペレーターは CPID エンドポイントの可用性を確保するために必要な措置を講じなければなりません。このような対策には、CPID エンドポイントと DPI 機能の複数のインスタンスを用意し、両方の機能に物理、サイト、ネットワークの冗長性を持たせ、システム リソースと容量が十分であることを確認することが含まれます。また、ヘッダーを挿入する DPI 関数と同様に、CPID エンドポイントには、CPID をリクエストするすべての Google クライアントの負荷を処理するのに十分な容量が必要です。CPID エンドポイントでは、ttlSeconds フィールドでより大きな値を使用して、CPID の生成頻度を減らすことができます。TTL 値は 30 日にすることをおすすめします。

メモ


  1. VIDEO_OFFLINE PMTC は、このプランがオフライン専用であることを意味します(ストリーミングの QoE が非常に低いなど)。FlexTime ウィンドウとは独立しています。