在我的应用中,我使用“聚合”功能从Google Fit数据集中请求数据。这适用于心率,速度,距离等,但这对位置数据停止工作(但之前一直在工作)。
这是我正在使用的请求模板:
POST https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate
{
"aggregateBy": [
{
"dataTypeName": "com.google.location.sample"
}
],
"endTimeMillis": xxxx,
"startTimeMillis": xxxx
}
对于dataTypeName ==“com.google.location.sample”,请求返回:
403
- Show headers -
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "No permission to read data for this private data source."
}
],
"code": 403,
"message": "No permission to read data for this private data source."
}
}
为什么位置数据是私有的? Google API方面是否有变更?是否有不同的方式来请求位置数据?
这些是我的应用程序授权的范围:
"https://www.googleapis.com/auth/fitness.activity.read",
"https://www.googleapis.com/auth/fitness.body.read",
"https://www.googleapis.com/auth/fitness.location.read",
"https://www.googleapis.com/auth/fitness.nutrition.read"
请注意,该列表包含“fitness.location.read”。
谢谢你的建议。
我也尝试从Google Fit获取数据但是“步骤”,有时也会获得状态403的响应
请求:
POST https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate
$headers = [
'Authorization' => 'Bearer ' . $access_token,
'Content-Type' => 'application/json',
];
$body = [
"aggregateBy" => [
[
"dataTypeName" => "com.google.step_count.delta",
"dataSourceId" =>
"derived:com.google.step_count.delta:com.google.android.gms:estimated_steps"
],
[
"dataTypeName" => "com.google.distance.delta",
"dataSourceId" =>
"derived:com.google.distance.delta:com.google.android.gms:merge_distance_delta"
]
],
"bucketByTime" => ["durationMillis" => xxxx],
"startTimeMillis" => xxxx,
"endTimeMillis" => xxxx
];
响应:
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "datasource not found (truncated...)
POST https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate` resulted in a `403 Forbidden` response:
决议:
您可以在此处看到错误403的所有描述:https://developers.google.com/analytics/devguides/reporting/core/v3/errors
要解决此问题,您可以尝试执行此算法:https://developers.google.com/analytics/devguides/reporting/core/v3/errors#backoff或您的用户应具有足够的权限(403“不足的权限”)