术语
- GTAF:Google 流量应用函数。一项 Google 服务,用于实现 Data Plan Sharing API 并代表 Google 应用与 DPA 进行交互。Google 应用可以查询 GTAF 以获取用户的流量套餐信息。或者,如果 Google 应用向 GTAF 注册,GTAF 可以发送有关用户的流量套餐的最新动态。
- MSISDN:移动站国际订阅者目录编号,移动网络中的唯一标识符。通常称为“电话号码”。
- CPID 端点:由移动网络运营商实现的一项服务,可生成运营商计划标识符 (CPID),它可用于查找用户的流量套餐信息。CPID 允许应用在不访问用户的 MSISDN 的情况下查询用户的数据计划详情。下文介绍了生成 CPID 的过程。
- 用户密钥:用户密钥是一个可用于识别用户的流量套餐的字符串。这可以是有权访问 MSISDN 的应用的 CPID 或 MSISDN。
- DPA:流量套餐代理,由移动网络运营商实现,与 GTAF 共享用户数据套餐信息。DPA 可以结合使用 Google 移动流量套餐共享 API 发送数据并实现 Data Plan Agent API,从而与 GTAF 共享信息。DPA 还可以选择充当 CPID 端点。
- UE:用户设备,用户所使用的设备。
语言要求
关键字“必须”、“不得”、“必需”、“会”、“不应该”、“应该”、“应说明”、“应知”、“应知”、“应知”、“应知”、“应知”、
移动流量套餐共享
概括来讲,移动流量套餐共享包括以下三个部分:
- 建立和更新运营商计划标识符 (CPID) 的机制,该机制可用作用户密钥。有权访问 MSISDN 和 MSISDN 的应用可以将其用作用户密钥。
- Google 移动流量套餐共享 API,可让 DPA 将有关用户的流量套餐信息发送给 Google。例如,如果 DPA 想要通知用户某项优惠,它可以通知 GTAF,而 GTAF 进而通知用户。
- 由 DPA 实现的 Data Plan Agent API,可让 GTAF 查询 DPA 以获取有关用户流量套餐的信息。例如,如果应用想要向用户显示当前流量套餐余额,它可以查询 GTAF,而后者会查询 DPA。
本页面的其余部分介绍了流量套餐术语,并详细介绍了如何设置 CPID。接下来将介绍 Google 移动流量套餐共享 API 和流量套餐代理 API 规范。
流量套餐术语
API 中定义的 planStatus 的架构必须能够表示运营商向用户提供的数据流量套餐。该 API 支持定义流量套餐,用于对发送到一组特定网址的所有流量按不同的费率收费(例如,发送到 *.acmefake.com 的所有流量均按不同的费率计费)。该 API 还支持为应用中的某些类型的操作提供不同费率的数据计划。我们将这些计划称为“子应用”流量套餐。举例来说,“子应用”流量套餐提供的功能是免费(即零费率)浏览视频,而从应用内观看视频时,系统会从订阅者的数据流量中扣除数据流量。然后,视频应用必须能够在查询流量套餐信息时了解此信息。
在这里,我们引入了一些与数据计划相关的术语。图 1 提供了代表我们要捕捉的概念的数据计划示例。
流量套餐:订阅者购买的顶级移动服务套餐。它可以很简单,可以是“10 GB 的移动数据,有效期为 30 天”,也可以定义为组件的集合,也称为模块。流量套餐具有:
- 流量套餐名称,例如“ACME 红色”。
- 流量套餐标识符,用于引用套餐,例如购买期间。
- 到期时间:流量套餐的到期时间。
- 套餐类别:套餐是预付费方案还是后付费方案。
计划模块:流量套餐的一个组成部分。具体而言,计划模块具有以下特点:
- 模块名称,例如“Free Video Nights”。
- 最大速率,此模块提供给用户的带宽。
- 灵活时间窗口,这是可向用户提供折扣的时间段。
计划模块流量类别 (PMTC),一种模块适用的数据流量的说明。PMTC 可以像 *所有互联网流量 *那样具体,也可以具体到由一个或多个应用、网站甚至是单个应用中的用户转化历程生成/消耗的流量。后者的示例有“无限音乐”、“100 MB 视频流量包 (VDP)”、“无限游戏数据”和“无限视频浏览”。为方便定义 PMTC,我们定义了以下 PMTC:
GENERIC, VIDEO, VIDEO_BROWSING, VIDEO_OFFLINE
1, MUSIC, GAMING, SOCIAL, MESSAGING
和PMTC_UNSPECIFIED.
数据量或时间限制:一旦激活,计划模块将在数据量或时间限制(如果是基于时间的计划,例如:(超过 600 分钟)在下面的图 1 中,订阅者可以购买作为“ACME Blue”的一部分提供的套餐模块,该模块会提供 1 GB 的常规用户流量,必须在激活之前的一周内使用。
图 1. 示例流量套餐。
建立 CPID
GTAF 在与 DPA 通信时使用用户密钥来识别订阅者。有权访问用户的 MSISDN 的应用可将其用作 user_key。另一方面,无权访问 MSISDN 的应用需要建立运营商计划标识符 (CPID),而无需发现用户的 MSISDN。接下来,我们将介绍 CPID 建立机制。
CPID 通话流程
图 2:建立 CPID 的调用流程。
- UE 中的 Google 应用使用 Google 内部 API 从 GTAF 检索 CPID 端点的网址。系统会使用客户端的公共 IP 地址和有效 SIM 卡的 MCC+MNC 识别运营商。对于 MVNO,Google 将使用 SPN 和 GID1 来确定 MVNO
- 客户端向 CPID 端点发出 HTTP GET 请求。运营商可以支持通过 HTTPS 发送请求。
- 运营商可以使用其深度数据包检测功能来识别请求,并将用户的电话号码作为 HTTP 标头注入该请求。
- CPID 端点接收请求,构建 CPID,并将 CPID 返回到 UE,并带有存留时间 (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 使用 Mobile Data Plan Sharing 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 端点会将客户端在 Accept-Language 标头中发送的语言 MSISDN 和高分辨率时间戳串联起来,然后使用 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 端点可以在生成 CPID 之前解密注入的标头以恢复 MSISDN。此外,运营商应保护用于生成 CPID 的密钥并根据运营商安全政策轮替此密钥。
可用性和容量要求
如果客户端无法检索 CPID,则无法从 Mobile Data Plan API 访问任何信息。因此,运营商应采取必要的措施来确保 CPID 端点的可用性。这些措施包括拥有多个 CPID 端点和 DPI 函数实例,并使这两个函数具有物理、站点和网络冗余,并确保系统资源和容量充足。此外,CPID 端点以及注入标头的 DPI 函数必须有足够的容量来处理请求 CPID 的所有 Google 客户端的负载。CPID 端点可以在 ttlSeconds 字段中使用较大的值来降低它生成 CPID 的频率。Google 建议使用 30 天的 TTL 值。
备注
-
VIDEO_OFFLINE PMTC 表示此计划仅适用于离线操作(例如,QoE 非常糟糕)。独立于 FlexTime 窗口。 ↩