本指南介绍了如何排查使用 Google Health API 时遇到的常见问题。
4xx 客户端错误
当客户端应用代码中存在问题时,系统会返回 4xx 状态代码。如需详细了解问题,请查看响应正文元素。
400 无效请求
| 消息 | 说明 | 建议 |
|---|---|---|
| 请求中包含无效的参数。 | 不支持数据类型 ID {value}。 | 验证端点是否支持所引用的数据类型。 |
| 收到的 JSON 载荷无效。八进制/十六进制数字不是有效的 JSON 值。 | dailyRollUp 端点不支持分别以 MM 或 DD 表示的月份和日期值。 个位数不应以 0(零)开头。 |
|
| 资源名称中的项目编号无效 | 当您在请求网址中使用 Google Cloud 项目 ID 而不是项目编号来删除或更新订阅者时。这适用于使用 projects.subscribers 端点的 Webhook 订阅。 |
在请求网址中使用 Google Cloud 项目编号,而不是项目 ID。 |
401 未经授权
| 消息 | 说明 | 建议 |
|---|---|---|
| 请求所带的身份验证凭据无效。应提供 OAuth 2 访问令牌、登录 Cookie 或其他有效的身份验证凭据。 | INVALID_AUTHENTICATOR:令牌已过期 | 您的访问令牌已过期。使用刷新令牌获取新的访问令牌和刷新令牌,或者用户应重新向应用授予许可。 |
403 禁止访问
| 消息 | 说明 | 建议 |
|---|---|---|
| 调用方无权限 | 当您在请求网址中使用 Google Cloud 项目 ID 而不是项目编号来创建或列出订阅者时。这适用于使用 projects.subscribers 端点的 Webhook 订阅。 |
在请求网址中使用 Google Cloud 项目编号,而不是项目 ID。 |
| 调用方无权限。 | 无法通过 GaiaMint 生成 UberMint。 | 用户能够完成授权流程,但端点调用失败。当旧版 Fitbit 账号向应用授予许可而不是 Google 账号时,可能会发生这种情况。如需解决此错误,请执行以下操作:
|
404 未找到
| 消息 | 说明 | 建议 |
|---|---|---|
在此服务器上找不到请求的网址 /v4/users/me/dataTypes/{dataType}/dataPoints。 |
可能的原因:
|
检索 Fitbit 用户 ID
为了帮助排查用户问题,您可能需要验证用户登录 Fitbit 移动应用时使用的 Google 账号。
如需查找 Fitbit 用户 ID,请执行以下操作:
- 打开 Fitbit 移动应用。
- 按右下角的我 图标。
- 按包含用户姓名和加入日期的顶部图块中的修改个人资料 链接。
- 转到页面底部。在您的账号 部分中,分配给 ID 的值就是 Fitbit 用户 ID。(例如:CV5TKH)
撤消向应用授予的许可
在帮助用户排查其与您的应用的 OAuth2 连接问题时,您可能需要用户解除其账号与您的应用的关联,然后再次完成您的授权流程。
如需让用户解除其 Google 账号与您的应用的关联,请执行以下操作:
- 打开 Fitbit 移动应用。
- 按右上角的 Fitbit 用户个人资料图标。
- 按管理您的 Google 账号 。
- 选择数据和隐私设置 图块。
- 向下滚动到**您使用的应用和服务中的数据** 部分。 在应用和服务 下,选择第三方应用和服务。
- 在已关联的应用列表中查找您的应用名称,并让用户选择该应用。
- 按撤消您与<应用名称>之间的所有关联 。
- 让用户按“确认”以撤消向您的应用授予的许可。
撤消流程完成后,用户将返回到第三方应用和服务 页面列表。用户可能需要刷新该页面,才能看到应用名称已从列表中移除。
排查设备同步延迟问题
在调试与用户数据缺失或延迟相关的问题时,检查用户配对的设备型号及其上次同步日期会很有帮助。
型号信息(例如 Fitbit 跟踪器或智能手表型号)和上次同步日期对于排查问题以及在同步延迟后提取历史数据非常有用。
例如,如果您发现数据传送中存在意外的间断或延迟,请执行以下操作:
- 验证您查询的用户 ID 是否与登录移动应用的 Fitbit 账号的用户 ID 一致。如需在移动应用中获取用户 ID,请参阅检索 Fitbit 用户 ID。如需从访问令牌获取用户 ID,请调用
getIdentity端点。 - 检查上次同步时间,以确定用户设备上次与 Google Health 移动应用同步的时间。
- 如果设备最近未同步,则表示延迟很可能是由于设备处于离线状态或未与移动应用同步,而不是 API 问题。
- 用户打开移动应用并同步其设备后,您可以提取自上次同步时间以来的历史数据。
如需检索用户配对的设备信息,请调用
users.pairedDevices.list
端点。这会返回一个设备列表,其中包含:
deviceVersion:设备的产品名称或型号(例如“Charge 6”)。lastSyncTime:上次成功同步的时间戳。