术语
- 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 中的描述进行解读。
移动数据流量套餐共享
从总体上讲,移动数据流量套餐共享功能包含三个部分:
- 用于建立和更新运营商方案标识符 (CPID) 的机制,该标识符可用作用户密钥。有权访问 MSISDN 的应用可以使用 MSISDN 作为用户密钥。
- 一种 Google 移动流量套餐共享 API,可让 DPA 向 Google 发送有关用户流量套餐的信息。例如,如果 DPA 想要通知用户某项优惠,它可以通知 GTAF,然后由 GTAF 通知用户。
- 由 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_OFFLINE
1, MUSIC, GAMING, SOCIAL, MESSAGING
和PMTC_UNSPECIFIED.
流量或时间限制,一旦激活,当流量或时间限制(如果是基于时间的方案,例如600 分钟的上网时间)已超出。在下图 1 中,订阅者可以购买“ACME Blue”中的一个方案模块,该模块提供 1 GB 的一般用户流量,必须在激活后一周内使用,否则就会过期。
图 1. 示例数据方案。
建立 CPID
在与 DPA 通信时,GTAF 使用用户密钥来标识订阅者。有权访问用户 MSISDN 的应用可以使用该 MSISDN 作为 user_key。另一方面,无法访问 MSISDN 的应用需要在不发现用户 MSISDN 的情况下建立运营商方案标识符 (CPID)。下面将介绍建立 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,并向 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 值。
备注
-
VIDEO_OFFLINE PMTC 表示此方案仅适用于离线(例如,流式传输 QoE 非常差)。它与 FlexTime 窗口无关。 ↩