Тип данных местоположения Google Fit дает 403 Отказано в разрешении - PullRequest
0 голосов
/ 24 декабря 2018

В моем приложении я запрашиваю данные из набора данных 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."
 } 
}

Почему данные о местоположении являются частными?Произошли ли изменения на стороне API Google?Есть ли другой способ запросить данные о местоположении?

Это области, для которых мое приложение авторизовано:

 "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".

Спасибо за любые советы.

1 Ответ

0 голосов
/ 29 марта 2019

Я также пытаюсь получить данные из 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 «достаточное количество разрешений»)

...