移动数据流量套餐共享功能使用入门

术语

  • GTAF:Google Traffic Application Function。一种 Google 服务,用于实现数据流量共享 API 并代表 Google 应用与 DPA 进行交互。Google 应用可以查询 GTAF 以获取用户的数据流量方案信息。或者,如果 Google 应用向 GTAF 注册,GTAF 可以发送有关用户数据流量套餐的更新。
  • MSISDN:移动站国际用户目录号码,用于在移动网络中唯一标识订阅的号码。更常称为电话号码。
  • CPID 端点:由移动网络运营商实现的一项服务,用于生成运营商方案标识符 (CPID),该标识符可用于查找用户的数据方案信息。CPID 允许应用查询用户的数据流量套餐的详细信息,而无需访问用户的 MSISDN。下面介绍了生成 CPID 的流程。
  • 用户密钥用户密钥是一个字符串,可用于标识用户的数据流量方案。对于有权访问 MSISDN 的应用,此值可以是 CPID 或 MSISDN。
  • DPA:数据流量方案代理,一种由移动网络运营商实现的服务,可与 GTAF 共享用户数据流量方案信息。DPA 可以通过以下方式与 GTAF 共享信息:使用 Google Mobile Data Plan Sharing API 发送数据,并实现 Data Plan Agent API。DPA 也可以选择充当 CPID 端点。
  • UE:用户设备,用户使用的设备。

语言要求

这些指南中的关键字“必须”“不得”“必需”“会”“不会”“应”“不应”“建议”“可以”和“可选”应按照 RFC 2119 中的描述进行解读。

移动数据流量套餐共享

从总体上讲,移动数据流量套餐共享功能包含三个部分:

  1. 用于建立和更新运营商方案标识符 (CPID) 的机制,该标识符可用作用户密钥。有权访问 MSISDN 的应用可以使用 MSISDN 作为用户密钥
  2. 一种 Google 移动流量套餐共享 API,可让 DPA 向 Google 发送有关用户流量套餐的信息。例如,如果 DPA 想要通知用户某项优惠,它可以通知 GTAF,然后由 GTAF 通知用户。
  3. 由 DPA 实现的数据流量方案代理 API,允许 GTAF 向 DPA 查询有关用户数据流量方案的信息。例如,如果应用想要向用户显示当前流量套餐余额,它可以查询 GTAF,而 GTAF 又会查询 DPA。

本页面的其余部分将介绍数据规划术语,并详细说明如何建立 CPID。接下来是 Google Mobile Data Plan Sharing API 和 Data Plan Agent API 规范。

流量套餐术语

API 中定义的 planStatus 的架构必须能够表示运营商向用户提供的数据流量方案。该 API 支持定义流量套餐,这些套餐会针对特定网址集的所有流量以不同的费率向用户收费(例如,针对 *.acmefake.com 的所有流量以不同的费率收费)。该 API 还支持针对应用中某些类型的操作提供不同费率的数据流量套餐。我们将这些数据流量套餐称为子应用数据流量套餐。子应用数据流量套餐的一个示例是提供免费(即零费率)视频浏览,而观看应用内的视频会从订阅者的数据流量余额中扣除数据流量。然后,视频应用在查询流量套餐信息时必须能够获知此信息。

下面,我们将介绍一些与流量套餐相关的术语。图 1 提供了一些流量套餐示例,这些示例代表了我们想要涵盖的概念。

数据流量方案:订阅者购买的顶级移动服务套餐。它可以简单到“10 GB 移动数据流量,有效期 30 天”,也可以定义为一组组件(也称为模块)。数据流量套餐包含:

  • 数据方案名称,例如“ACME Red”。
  • 数据流量方案标识符,用于指代相应方案,例如在购买期间。
  • 到期时间,即数据流量套餐的到期时间。
  • 方案类别,指方案是预付费方案还是后付费方案。

方案模块:数据方案的组成部分。具体来说,方案模块具有以下特征:

  • 模块名称,例如“免费视频之夜”。
  • 最大速率,相应模块向用户提供的带宽。
  • 弹性时间窗口,即可以向用户提供折扣的时间窗口。
  • 计划模块流量类别 (PMTC),模块所应用的数据流量的说明。PMTC 可以像“所有互联网流量”一样宽泛,也可以像一个或多个应用、网站甚至单个应用中的用户历程所产生/消耗的流量一样具体。 后一种类型的示例包括“无限量音乐”“100 MB 视频流量包 (VDP)”“无限量游戏流量”和“无限量视频浏览”。为了便于定义 PMTC,我们定义了以下 PMTC:GENERIC, VIDEO, VIDEO_BROWSING, VIDEO_OFFLINE1, MUSIC, GAMING, SOCIAL, MESSAGINGPMTC_UNSPECIFIED.

  • 流量或时间限制,一旦激活,当流量或时间限制(如果是基于时间的方案,例如600 分钟的上网时间)已超出。在下图 1 中,订阅者可以购买“ACME Blue”中的一个方案模块,该模块提供 1 GB 的一般用户流量,必须在激活后一周内使用,否则就会过期。

数据流量方案 API 示例方案

图 1. 示例数据方案。

建立 CPID

在与 DPA 通信时,GTAF 使用用户密钥来标识订阅者。有权访问用户 MSISDN 的应用可以使用该 MSISDN 作为 user_key。另一方面,无法访问 MSISDN 的应用需要在不发现用户 MSISDN 的情况下建立运营商方案标识符 (CPID)。下面将介绍建立 CPID 的机制。

CPID 通话流程

图 2:用于建立 CPID 的调用流程。

  1. UE 中的 Google 应用使用 Google 内部 API 从 GTAF 检索 CPID 端点的网址。系统会使用客户端的公共 IP 地址和有效 SIM 卡的 MCC+MNC 来识别运营商。对于 MVNO,Google 将使用 SPNGID1 来确定 MVNO
  2. 客户端向 CPID 端点发出 HTTP GET 请求。运营商可以支持通过 HTTPS 发送请求。
  3. 运营商可以使用其深度数据包检测功能来识别请求,并将用户的电话号码作为 HTTP 标头注入到请求中。
  4. CPID 端点接收请求,构建 CPID,并向 UE 返回 CPID,同时返回一个存留时间 (TTL),用于指示 UE 可以使用此 CPID 的时长。

如果运营商愿意,也可以在 CPID 端点网址中使用 IP 地址而不是域名。IP 地址可能位于专用地址空间中,但必须可供运营商网络内的 Google 客户端访问。

运营商应在初始配置流程中向 Google 提供以下信息: 1. 应用将联系以获取 CPID 的 CPID_网址。一个 CPID_网址 是必需的,但运营商可以提供多个网址来提高可用性。 1. 运营商拥有的 IP 前缀列表,以及运营商希望映射到所提供的 CPID_网址 的移动设备国家/地区代码 (MCC) 和移动网络代码 (MNC)。如果运营商使用 SPN 或 GID1 来区分其网络中的 MVNO,则运营商还应提供此信息。 Google 将使用此信息将客户端与相应的 CPID 端点进行匹配,如图 2 的第 1 步所示。

请求的格式为: GET CPID_URL 出于旧版原因,CPID 端点应能够支持如下请求:

GET CPID_URL?app={app_id}

CPID 端点可以在生成 CPID 时忽略 {app_id} 网址参数。但是,它必须能够处理包含该参数的请求。

对 CPID 端点的请求可以包含 Accept-Language 标头。如果包含此标头,则 DPA 使用移动数据流量共享 API 发送的更新中的人类可读字符串必须使用 CPID 请求中提供的设置。

每次客户端发出 GET CPID_网址 请求时,都必须收到新的 CPID。如果 CPID 创建成功,则 CPID 端点必须返回 200 OK 响应。响应正文必须包含一个 CPIDResponse 实例。

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

返回的 CPID 必须在 ttlSeconds 秒内有效。在后续对 DPA 的调用中,GTAF 将根据 RFC2396 对 CPID 进行编码。

如果发生错误,CPID 端点必须返回 HTTP 错误,且响应正文必须包含 ErrorResponse 的实例。如需查看可能的原因值和 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 编码。此外,当 CPID 用于网址中时,必须进行网址编码,以处理 Base64 中使用的特殊字符 (/+=)。特别是当 GTAF 调用 DPA 或 DPA 调用移动数据流量共享 API 时,CPID 必须进行网址编码。使用此方法生成 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 功能实例,为这两个功能提供物理、站点和网络冗余,并确保系统资源和容量充足。此外,CPID 端点以及注入标头的 DPI 函数必须具有足够的容量来处理请求 CPID 的所有 Google 客户端的负载。CPID 端点可以在 ttlSeconds 字段中使用更大的值,以降低生成 CPID 的频率。Google 建议使用 30 天的 TTL 值。

备注


  1. VIDEO_OFFLINE PMTC 表示此方案仅适用于离线(例如,流式传输 QoE 非常差)。它与 FlexTime 窗口无关。