You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从Google Fit API获取移动端添加的活动位置数据问题

解决Google Fit移动端活动位置数据获取问题

嘿,我来帮你梳理下获取Google Fit位置数据的关键问题和调整方案:

首先,我注意到你请求里用了com.google.location.sample这个数据类型——这其实是Google Fit的测试示例类型,并不是存储用户实际位置数据的正式字段。这大概率是你拿不到预期数据的核心原因之一。

接下来咱们一步步调整你的请求:

1. 替换为正式的位置数据类型

com.google.location.sample换成com.google.location,这是Google Fit存储用户GPS/位置数据的标准数据类型。如果需要更连续的轨迹记录,也可以尝试com.google.location.track(适合运动轨迹类的连续位置点)。

2. 修正请求体的格式与参数

你的请求体存在两个小问题:一是JSON键名未加双引号(会导致解析错误),二是bucketBySessionminDurationMillis设为1毫秒,会返回大量细碎的会话拆分。建议调整为合理的最小值(比如60000毫秒=1分钟),避免不必要的数据冗余。

修正后的完整请求体如下:

{
  "aggregateBy": [
    {
      "dataTypeName": "com.google.location"
    },
    {
      "dataTypeName": "com.google.distance.delta"
    }
  ],
  "bucketBySession": {
    "minDurationMillis": 60000
  },
  "startTimeMillis": 1522281600000,
  "endTimeMillis": 1522368000000
}

3. 确认权限与数据源配置

  • 务必在OAuth2 Playground中申请https://www.googleapis.com/auth/fitness.location.read权限,没有这个权限是无法读取位置数据的;
  • 移动端添加的活动,位置数据可能关联到特定数据源(比如Google Fit官方app或第三方运动应用)。如果需要指定聚合后的数据源,可以在aggregateBy中补充dataSourceId,示例如下:
{
  "aggregateBy": [
    {
      "dataTypeName": "com.google.location",
      "dataSourceId": "derived:com.google.location:com.google.android.gms:merge_location"
    }
  ]
}

这个derived:开头的数据源是Google Fit自动整合后的位置数据源,适合获取统一的轨迹数据。

4. 解读响应数据格式

成功请求后,位置数据会包含在每个bucket的dataset中,数据点的经纬度以latitudeE7longitudeE7字段存储(是乘以10^7的整数,需要除以10000000得到实际经纬度),示例响应片段:

{
"point": [
{
"startTimeNanos": "1522281600000000000",
"endTimeNanos": "1522285200000000000",
"dataTypeName": "com.google.location",
"value": [
{ "intVal": 374229000 }, // 对应纬度37.4229
{ "intVal": -1220850000 } // 对应经度-122.085
]
}
]
}

如果调整后仍无数据,可能是你指定的时间范围内没有带位置数据的移动端活动(比如手动添加的活动未填写位置信息)。

内容的提问来源于stack exchange,提问作者Harikrishnan Narayanan

火山引擎 最新活动