Google Health API 的访问权限通过 Google Cloud 提供。如需启用 API 并授权 Google 账号,您需要一个 Google Cloud 项目。
无论您是现有的 Fitbit API 开发者,还是 Google Health API 新手,都需要完成此步骤才能调用该 API。
创建项目和 OAuth 客户端
使用启用 API 并获取 OAuth 2.0 客户端 ID 按钮启用 Google Health API 并获取 OAuth 2.0 客户端 ID:
- 如果您有想要用于 Google Health API 的现有 Google Cloud 项目,请务必先登录该项目的管理员账号。然后,在点击该按钮后,从可用项目列表中选择现有项目。 否则,请创建一个新项目。
- 当系统询问“您从哪里致电?”时,请选择网站服务器。
- 输入 https://www.google.com 作为授权重定向 URI 的值。必须使用重定向 URI 才能通过 OAuth 2.0 获取授权代码。
- 设置完成后,复制 OAuth 2.0 客户端 ID 和客户端密钥值,并将凭据 JSON 下载到本地计算机。
如果您想手动设置 Google Cloud 项目,或验证设置并再次检索凭据,请执行以下操作:
如需详细了解如何使用 Google 控制台设置 OAuth 2.0,请参阅使用 OAuth 2.0 访问 Google API。
添加测试用户
默认情况下,新创建的 OAuth 客户端处于未验证状态,无论出于测试目的还是正式版目的,用户上限均为 100 人。如需在此期间启用授权,您必须手动将每个用户的电子邮件地址添加到项目配置中的“测试用户”列表中。
在受众群体页面上更新测试用户列表:
- 在此页面上,您应该会看到“发布状态”设置为测试,并且“用户类型”设置为外部。
- 在“测试用户”部分下,点击 + 添加用户。输入应允许向您的应用授予健康数据访问权限的任何测试用户的电子邮件地址。
- 点击保存。
如果使用 Google Health API 的用户超过 100 人,则需要完成第三方安全审核。如需了解详情,请参阅 OAuth 应用验证帮助中心。
添加范围
您必须在数据访问页面上指定客户端可以调用的范围:
- 在此页面上,点击添加或移除范围。
- 在“API”列中,搜索“Google Health API”。选择应用所需的范围。
- 选择所有需要的范围后,点击更新返回“数据访问权限”页面。
- 点击保存。
您已完成客户端 ID 的设置,现在应该可以调用 Google Health API 了。
更新范围
您可以在身份验证请求中将 prompt 参数设置为 consent,以提示用户重新授权您的应用。如果包含 prompt=consent,则每次应用请求访问范围授权时,系统都会显示同意屏幕,即使之前已向 Google API 项目授予所有范围的权限也是如此。
如需使用 prompt=consent 参数添加或更改范围,请按以下步骤操作:
确定应用所需的范围的完整列表。这应包括现有范围以及您需要添加的任何新范围。
修改授权网址中的范围参数,以包含更新后的以空格分隔的范围值列表。
将
prompt=consent附加到身份验证 URI 参数。这会强制授权服务器在向您的客户端返回信息之前提示用户征求同意。以下示例展示了向 Google 的 OAuth 2.0 授权端点发送的 HTTPS GET 请求,该请求通过附加
prompt=consent请求了多个范围:https://accounts.google.com/o/oauth2/v2/auth?client_id=client-id&redirect_uri=redirect-uri&response_type=code&access_type=offline&scope=https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly%20https://www.googleapis.com/auth/googlehealth.sleep.readonly&prompt=consent
当用户点击更新后的链接时,系统会向其显示一个列出所有请求范围的同意页面。用户点击“继续”或“允许”后,您将收到一个新的授权代码,该代码可用于交换涵盖全套范围的令牌。
仅在必要时(例如需要获取新的刷新令牌或请求的范围发生变化时)才添加
prompt=consent。
OAuth2 客户端库
如需查看可用于与热门框架集成的 OAuth2 客户端库列表,请参阅使用 OAuth 2.0 访问 Google API。
刷新令牌
为了保持对 Google API 的长期访问权限,而无需用户不断重新进行身份验证,您的应用必须使用刷新令牌。如需了解全面的实现细节(包括所需的特定 HTTP 请求和参数),请参阅 Google Identity Platform 文档。
如需将刷新令牌换成访问令牌,请向 Google OAuth 2.0 令牌端点发出 HTTPS POST 调用。以下代码段展示了请求和响应示例:
请求
curl -L -X POST 'https://oauth2.googleapis.com/token' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'client_id=client-id&client_secret=client-secret&refresh_token=refresh-token&grant_type=refresh_token'
响应
{
"access_token": "access-token",
"expires_in": 3599,
"scope": "scope-list",
"token_type": "Bearer",
"refresh_token": "refresh-token",
"refresh_token_expires_in": 112154
}测试期间的令牌行为
请注意,刷新令牌的行为取决于 Google Cloud 项目的发布状态:
- 测试模式:如果您的 OAuth 权限请求页面配置为“测试”发布状态,则系统发放的刷新令牌是基于时间的,会在 7 天后过期。在此期间,您将收到一个刷新令牌,该令牌在到期之前一直有效,可用于获取新的访问令牌。
- 已发布模式:应用移至“正式版”状态后,除非刷新令牌被撤消或长时间(通常为六个月)未使用,否则一般不会过期。
为确保用户体验顺畅,请务必在应用移至正式版环境之前发布应用,以免出现 7 天令牌过期的情况。