用語
- GTAF: Google トラフィック アプリケーション関数。Data Plan Sharing API を実装し、Google アプリケーションに代わって DPA を操作する Google サービス。Google アプリケーションは、ユーザーのデータプラン情報を GTAF に照会できます。Google アプリが GTAF に登録されている場合、GTAF はユーザーのデータプランに関する最新情報を送信できます。
- MSISDN: Mobile Station International Subscriber Directory Number(モバイル ステーションの国際加入者ディレクトリ番号)。モバイル ネットワーク内のサブスクリプションを一意に識別する番号です。電話番号とも呼ばれます。
- CPID エンドポイント: 携帯通信会社のネットワーク実装者が実装するサービス。携帯通信会社のプラン識別子(CPID)を生成します。CPID は、ユーザーのデータプラン情報の検索に使用できます。CPID を使用すると、アプリケーションはユーザーの MSISDN にアクセスしなくても、ユーザーのデータプランの詳細をクエリできます。以下では、CPID を生成する手順を説明します。
- ユーザーキー: ユーザーキーは、ユーザーのデータプランの識別に使用できる文字列です。MSISDN にアクセスできるアプリケーションの場合は、CPID または MSISDN のいずれかです。
- DPA: データプラン エージェント。ユーザーデータ プランの情報を GTAF と共有するモバイル ネットワーク事業者が実装するサービスです。DPA は、Google Mobile Data Plan Sharing API を使用してデータを送信し、Data Plan Agent API を実装することで、GTAF と情報を共有できます。必要に応じて、DPA を CPID エンドポイントとして機能させることができます。
- UE: ユーザーの機器、ユーザーが使用するデバイス。
言語の要件
キーワード「必須」「必須」「必須」「定型的」および「推奨」
モバイルデータ プランの共有
モバイルデータ プランの共有は、大きく分けて 3 つの部分で構成されます。
- ユーザーキーとして使用できる携帯通信会社プラン識別子(CPID)を設定および更新するメカニズム。MSISDN にアクセスできるアプリは、MSISDN をユーザーキーとして使用できます。
- DPA がユーザーのデータプランに関する情報を Google に送信できるようにする Google Mobile Data Plan Sharing API。たとえば、DPA がユーザーに特典を通知することを希望する場合は、GTAF に通知し、GTAF はユーザーに通知します。
- DPA によって実装された Data Plan Agent API。これにより、GTAF は DPA にクエリを実行して、ユーザーのデータプランに関する情報を取得できます。たとえば、アプリケーションで現在のデータプランの残高をユーザーに表示する場合、GTAF に対してクエリを実行し、DPA に対してクエリを実行できます。
このページの残りの部分では、データプランの用語と、CPID を確立する方法について詳しく説明します。Google Mobile Data Plan Sharing API とデータプラン エージェント API の仕様は次のとおりです。
データプランの用語
API で定義された planStatus のスキーマは、オペレーターがユーザーに提供するデータプランを表すことができなければなりません。この API では、特定の URL セットに対するすべてのトラフィックについて、異なるレートでユーザーに対して課金するデータプランの定義がサポートされています(たとえば、*.acmefake.com へのトラフィックはすべて異なるレートで課金されます)。この API は、アプリ内の特定のタイプのアクションに対して異なる料金を提供するデータプランもサポートしています。このようなデータを「サブアプリ」データプランと呼びます。たとえば、サブアプリデータ プランでは、アプリ内の動画を視聴しながら、定期購入ユーザーのデータ残高からデータを減算しながら、無料の(ゼロレートの)動画ブラウジングを行うことができます。動画アプリは、データプラン情報をクエリするときに、この情報を学習しなければなりません。
ここでは、データプランに関連する用語を紹介します。図 1 は、キャプチャするコンセプトを表すデータプランの例です。
データプラン: 定期購入者が購入するトップレベルのモバイル サービス パッケージ。「10 GB のモバイルデータ、30 日間」のようにシンプルにすることも、コンポーネントの集合(モジュールとも呼ばれます)として定義することもできます。データプランには、次のものがあります。
- データプラン名(「ACME Red」など)
- データプラン ID。購入時などにプランを参照するために使用されます。
- 有効期限: データプランの有効期限。
- プランカテゴリ: プランが前払いプランか後払いプランか。
Plan(計画)モジュール: データプランのコンポーネント。具体的には、プラン モジュールには次の要素が含まれます。
- Module Name(「無料動画ナイト」など)
- 最大レート: このモジュールによってユーザーに提供される帯域幅。
- フレックス タイム ウィンドウ: ユーザーに割引を提供できる時間枠。
Plan Module Traffic Category(PMTC)。モジュールに適用されるデータ トラフィックの説明。PMTC には、*すべてのインターネット トラフィック*、または 1 つ以上のアプリケーション、ウェブサイト、または 1 つのアプリケーション内でのユーザー ジャーニーにより生成/消費されるトラフィックほど一般的なものを指定できます。 後者の例としては、「無制限の音楽データ」、「100 MB の動画データパック(VDP)」、「無制限のゲームデータ」、「無制限の動画ブラウジング」などがあります。PMTC の定義を容易にするために、次の PMTC を定義しました:
GENERIC, VIDEO, VIDEO_BROWSING, VIDEO_OFFLINE
1, MUSIC, GAMING, SOCIAL, MESSAGING
およびPMTC_UNSPECIFIED.
データ量または制限時間: 有効にすると、データ量または時間制限(たとえば、時間ベースの計画の場合、600 分以下のインターネット アクセス)を超過した。以下の図 1 では、定期購入者は「ACME Blue」の一部としてプラン モジュールを購入できます。これは、有効期限が切れるまで 1 週間以内に使用する必要がある 1 GB の一般的なユーザー トラフィックを提供します。
図 1. サンプルのデータプラン。
CPID の設定
GTAF は、ユーザーキーを使用して DPA と通信するときにサブスクライバーを識別します。ユーザーの MSISDN にアクセスできるアプリは、user_key として使用できます。一方、MSISDN にアクセスできないアプリでは、ユーザーの MSISDN を検出せずにキャリアプラン識別子(CPID)を設定する必要があります。以下では、CPID を確立するメカニズムについて説明します。
CPID 通話フロー
図 2: CPID を確立するための呼び出しフロー。
- UE の Google アプリケーションは、Google 内部 API を使用して GTAF から CPID エンドポイントの URL を取得します。オペレーターは、クライアントのパブリック IP アドレスと、有効な SIM カードの MCC + MNC を使用して識別されます。MVNO の場合、Google は SPN と GID1 を使用して MVNO を決定します。
- クライアントは CPID エンドポイントに HTTP GET リクエストを発行します。オペレータは、HTTPS を介したリクエストの送信をサポートしても構いません。
- オペレーターは、詳細なパケット検査機能を使用してリクエストを識別し、ユーザーの電話番号を HTTP ヘッダーとしてリクエストに挿入しても構いません。
- CPID エンドポイントはリクエストを受信し、CPID を作成して、UE がこの CPID を使用できる期間を示す有効期間(TTL)とともに CPID を返します。
オペレーターは、必要に応じて CPID エンドポイント URL でドメイン名の代わりに IP アドレスを使用しても構いません。IP アドレスはプライベート アドレス空間にあっても構いませんが、オペレーター ネットワーク内の Google クライアントが到達可能である必要があります。
事業者は、オンボーディング プロセスの一環として以下の情報を Google に提供する必要があります。 1. アプリが CPID を取得するために利用する CPID_URL。1 つの CPID_URL は必須ですが、オペレーターは複数の URL を指定して可用性を高めることができます。 1. オペレーターが所有する IP プレフィックスと、オペレーターが指定した CPID_URL にマッピングするモバイル カントリー コード(MCC)とモバイル ネットワーク コード(MNC)のリスト。オペレーターが SPN または GID1 を使用してネットワーク内の MVNO を区別する場合、オペレーターもこの情報を提供する必要があります。図 2 のステップ 1 に示すように、この情報を使用して、クライアントと対応する CPID エンドポイントを照合します。
リクエストの形式は次のとおりです。
GET CPID_URL
従来の理由から、CPID エンドポイントは次のようなリクエストをサポートできる必要があります。
GET CPID_URL?app={app_id}
CPID エンドポイントは、CPID を生成する際、{app_id}
URL パラメータを無視できます。しかし、パラメータを含むリクエストを処理できなければなりません。
CPID エンドポイントへのリクエストには、Accept-Language
ヘッダーが含まれても構いません。ヘッダーが含まれる場合、DPA が Mobile Data Plan Sharing API を使用して送信する更新に、人が読める形式の文字列を含める必要があります。その際、CPID リクエストで指定された設定を使用しなければなりません。
GET CPID_URL リクエストを発行するたびに、クライアントは新しい CPID を受信しなければなりません。CPID の作成が成功した場合、CPID エンドポイントは 200 OK レスポンスを返さなければなりません。レスポンスの本文には CPIDResponse のインスタンスが含まれなければなりません。
{
"cpid": "<CPID_string>",
"ttlSeconds": 2592000
}
返された CPID は、ttlSeconds 秒間有効でなければなりません。GTAF は、DPA への後続の呼び出しで RFC2396 に従って CPID をエンコードします。
エラーが発生した場合、CPID エンドポイントは、ErrorResponse のインスタンスを含むレスポンス本文を持つ HTTP エラーを返さなければなりません。考えられる原因の値と HTTP のエラーコードのリストについては、こちらをご覧ください。
{
"errorMessage": "<error message>",
"cause": "INVALID_NUMBER"
}
特に、オペレーター ネットワークに属していないユーザー(別のオペレーターに属するものの、この CPID エンドポイントによって提供されるネットワークをローミングしているユーザーなど)について CPID リクエストを受け取った場合、またはデータプラン情報を Google と共有する設定を選択していないユーザーについて、CPID エンドポイントが HTTP ステータス コード 403 を返さなければなりません。
CPID 生成
CPID エンドポイントで CPID を作成するための推奨方法は次のとおりです。
CPID_string = Base64(AES(MSISDN + TimeStamp + language, secret))
CPID エンドポイントは、MSISDN、クライアントが Accept-Language ヘッダーで送信した言語、および高解像度のタイムスタンプを連結し、secret
キーを使用して AES によって暗号化します。タイムスタンプは CPID が期限切れになる時刻に対応すべきです。暗号化された出力は Base64 でエンコードされます。さらに、URL で CPID を使用する場合、Base64 で使用される特殊文字(/+=)を処理するために、URL エンコードする必要があります。特に、GTAF が DPA を呼び出す場合、または DPA が Mobile Data Plan Sharing API を呼び出すときは、CPID が URL エンコードされている必要があります。この方法を使用して CPID を生成するメリットは、DPA と CPID エンドポイントに有効な CPID と MSISDN のデータベースが必要ないことです。
特定のオペレーターの状況に応じて、CPID エンドポイントを実装することは容易な場合があります。頻繁に発生する課題は、CPID エンドポイントで MSISDN にアクセスすることです。オンボーディング オペレーターから得られた教訓を共有できることを嬉しく思います。問題が発生した場合はご連絡ください。
セキュリティ要件
オペレーターは、登録者の個人情報を保護するために必要に応じた予防措置を講じなければなりません。具体的には、サブスクライバーの電話番号の露出を最小限に抑えるために、CPID エンドポイントはセキュリティ境界内にあるべきです。さらに、オペレーターが DPI を採用している場合、オペレーターは MSISDN を HTTP リクエストに挿入する前に MSISDN を暗号化すべきです。CPID エンドポイントがセキュリティ境界でない場合(たとえば、CPID エンドポイントがパブリック クラウドにデプロイされている場合)、オペレーターは公共のインターネットを介して MSISDN を伝送せずにクリアすべきではありません。オペレーターは、DPI と CPID エンドポイントの間に VPN を確立するか(図 1 を参照)、MSISDN を暗号化してからヘッダーに挿入します。後者のアプローチでは、CPID エンドポイントが挿入されたヘッダーを復号し、CPID を生成する前に MSISDN を復元できることを前提としています。さらに、オペレーターは、オペレーターのセキュリティ ポリシーに従って、CPID の生成に使用される秘密鍵を保護し、この鍵をローテーションしなければなりません。
可用性と容量の要件
クライアントが CPID を取得できない場合、Mobile Data Plan API から情報にアクセスできません。このため、オペレーターは CPID エンドポイントの可用性を確保するために必要な措置を講じなければなりません。このような対策としては、CPID エンドポイントと DPI 関数の複数のインスタンスを用意し、両方の機能に物理、サイト、ネットワークの冗長性を確保し、システム リソースと容量を十分に確保することが必要です。さらに、CPID エンドポイントと、ヘッダーを挿入する DPI 関数が、CPID をリクエストするすべての Google クライアントの負荷を処理するのに十分な容量を備えている必要があります。CPID エンドポイントでは、ttlSeconds フィールドにより大きな値を使用して CPID を生成する頻度を減らすことができます。TTL 値は 30 日に設定することをおすすめします。
備考
-
VIDEO_OFFLINE PMTC は、このプランがオフラインのみに適していることを意味します(ストリーミング QoE が非常に悪いなど)。FlexTime ウィンドウとは関係ありません。 ↩