По оценкам Google Fit, шаги через REST API уменьшаются во времени у некоторых пользователей.

Мы используем Googlefit REST API в процессе с тысячами пользователей, чтобы получать ежедневные шаги. У большинства пользователей процесс в порядке, хотя мы и находим некоторых пользователей с таким специфическим поведением: шаги пользователей увеличиваются в течение дня, но в какой-то момент они значительно уменьшаются.

Мы находим несколько проблем, связанных с этим, в основном с приложениями для здоровья Huawei (и некоторыми приложениями для здоровья Xiaomi).

Мы используем этот dataSourceId для получения ежедневных шагов: производное: com.google.step_count.delta: com.google.android.gms: Estimated_steps

Пример одного из наших запросов на получение данных за 15 марта (Spanish Times):

POST https://www.googleapis.com/fitness/v1/users/me/dataSources
Accept: application/json
Content-Type: application/json;encoding=utf-8
Authorization: Bearer XXXXXXX

{
  "aggregateBy": [{
    "dataTypeName": "com.google.step_count.delta",
    "dataSourceId": "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps"
  }],
  "bucketByTime": { "durationMillis": 86400000 },
  "startTimeMillis": 1615244400000,
  "endTimeMillis": 1615330800000
}

У большинства пользователей все идет хорошо (они получают те же данные, которые отображаются пользователю в приложении googlefit), но у некоторых пользователей, как описано, числа в течение дня сначала увеличиваются, а затем уменьшаются. Данные некоторых пользователей в приложении googlefit намного больше (или значительно больше), чем данные, найденные через REST API.

Мы даже проследили это у конкретного пользователя в течение дня. Используя сегменты durationMillis: 3600000, мы нарисовали гистограмму почасовых шагов за один день (с индивидуальным процессом).

Для одного и того же дня в разные моменты времени (в данном случае разница в пару часов) мы получаем это для ТОЧНОГО ЖЕСТКОГО ПОЛЬЗОВАТЕЛЯ:

  20210315-07 | ##########################################################   | 1568
  20210315-08 | ############################################################ | 1628
  20210315-09 | ##########################################################   | 1574
  20210315-10 | #######################                                      | 636
  20210315-11 | ###################################################          | 1383
  20210315-12 | ######################################################       | 1477
  20210315-13 | ###############################################              | 1284
  20210315-14 | ####################                                         | 552

по сравнению с этим, которое было получено ПАРУ ЧАСОВ СПУСТЯ:

  20210315-08 | #################                                            | 430
  20210315-09 | #########                                                    | 229
  20210315-10 | #################                                            | 410
  20210315-11 | ######################################################       | 1337
  20210315-12 | ############################################################ | 1477
  20210315-13 | ####################################################         | 1284
  20210315-14 | ######################                                       | 552

(20210315-14 означает 14.00 15 марта 2021 г.)

В первом случае это возвращаемый JSON:

 [{"startTimeNanos":"1615763400000000000","endTimeNanos":"1615763460000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":6,"mapVal":[]}]},
{"startTimeNanos":"1615788060000000000","endTimeNanos":"1615791600000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1568,"mapVal":[]}]},
{"startTimeNanos":"1615791600000000000","endTimeNanos":"1615795080000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1628,"mapVal":[]}]},
{"startTimeNanos":"1615795200000000000","endTimeNanos":"1615798500000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1574,"mapVal":[]}]},
{"startTimeNanos":"1615798860000000000","endTimeNanos":"1615802400000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":636,"mapVal":[]}]},
{"startTimeNanos":"1615802400000000000","endTimeNanos":"1615806000000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1383,"mapVal":[]}]},
{"startTimeNanos":"1615806000000000000","endTimeNanos":"1615809480000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1477,"mapVal":[]}]},
{"startTimeNanos":"1615809660000000000","endTimeNanos":"1615813200000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1284,"mapVal":[]}]},
{"startTimeNanos":"1615813380000000000","endTimeNanos":"1615815420000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":552,"mapVal":[]}]}]

В последнем случае это возвращаемый JSON:

[{"startTimeNanos":"1615788300000000000","endTimeNanos":"1615791600000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":517,"mapVal":[]}]},
{"startTimeNanos":"1615791600000000000","endTimeNanos":"1615794540000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":430,"mapVal":[]}]},
{"startTimeNanos":"1615796400000000000","endTimeNanos":"1615798200000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":229,"mapVal":[]}]},
{"startTimeNanos":"1615798980000000000","endTimeNanos":"1615802400000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":410,"mapVal":[]}]},
{"startTimeNanos":"1615802400000000000","endTimeNanos":"1615806000000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1337,"mapVal":[]}]},
{"startTimeNanos":"1615806000000000000","endTimeNanos":"1615809480000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1477,"mapVal":[]}]},
{"startTimeNanos":"1615809660000000000","endTimeNanos":"1615813200000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":1284,"mapVal":[]}]},
{"startTimeNanos":"1615813380000000000","endTimeNanos":"1615815420000000000","dataTypeName":"com.google.step_count.delta","originDataSourceId":"raw:com.google.step_count.delta:com.huawei.health:","value":[{"intVal":552,"mapVal":[]}]}]

Как видите, все точки всегда исходят из originDataSourceId: raw: com.google.step_count.delta: com.huawei.health

Похоже, что процесс Googlefit вносит какие-то корректировки, удаляя некоторые шаги или точки данных, хотя мы не можем найти способ определить, что и почему, и мы не можем объяснить пользователю, что происходит или что он или мы можем сделать с сделать данные его приложения такими же, как у нас (или наоборот). Его приложение googlefit показывает число, которое не совпадает с тем, которое показывает REST API.

Пользователь уже отключил функцию отслеживания действий в приложении googlefit.

Я хотел бы узнать или попытаться получить несколько подсказок, чтобы узнать:

  • Что я могу сделать, чтобы отладить еще больше?
  • Любой намек на то, почему это происходит?
  • Есть ли способ предотвратить это с точки зрения конфигурации (для пользователя)?
  • Есть ли способ предотвратить это с точки зрения развития?

Спасибо и привет.

ОБНОВЛЕНИЕ ПОСЛЕ вопроса Энди Тернера (спасибо за комментарий!)

Мы смогли уловить это в течение нескольких часов: 18,58 (около 6 тыс. Шагов), 21,58 (около 25 тыс. Шагов), 22,58 (около 17 тыс. Шагов), 23,58 (около 26 тыс. Шагов). Мы экспортировали наборы данных для них, и вот результат.

Еще одна важная информация: данные поступают только из raw: com.google.step_count.delta: com.huawei.health. Мы просмотрели другие наборы данных, которые могли показаться подозрительными, но все они были пустыми (кроме производных и т. Д.).

Если мы интерпретируем это правильно, возможно, это huawei, который иногда отправляет значение, а в следующий раз - другое; так что вероятно какая-то неправильная конфигурация в части huawei.

Вот экспортированные наборы данных: https://gist.github.com/jmarti-theinit/8d9849968a3a / а>

Результат GIST:

Length of 18.58 points 165
Length of 21.58 points 503
Length of 22.58 points 294
Length of 23.58 points 537
 
How many points in 21.58 that exist in 18.58 =>  165
How many points in 22.58 that exist in 18.58 =>  57
How many points in 22.58 that exist in 21.58 =>  294
How many points in 23.58 that exist in 18.58 =>  165
How many points in 23.58 that exist in 21.58 =>  503
How many points in 23.58 that exist in 22.58 =>  294

Таким образом, наша ставка на то, что очки удаляются и добавляются устройствами позади huawei (например, только 57 из них распространены в 18.58 - 22.58), и мы не можем контролировать что-либо еще со стороны googlefit. Это верно? Что еще мы могли увидеть?


person Jordi    schedule 15.03.2021    source источник
comment
Можете ли вы получить набор данных (не- агрегированы) в течение временного окна для raw:com.google.step_count.delta:com.huawei.health: источника данных, сейчас и через пару часов, и сравнить их?   -  person Andy Turner    schedule 16.03.2021
comment
Обновленный вопрос на основе комментария @AndyTurner   -  person Jordi    schedule 18.03.2021


Ответы (1)


У нас возникают аналогичные проблемы с использованием REST API.

Вот вам то, что совпадает со случаем Жорди:

  • мы тоже из Испании (и наши пользователи тоже), хотя мы используем серверы в Испании и США.
  • мы получаем то же значение ежедневных шагов, что и приложение Google Fit для некоторых пользователей, но не для других.
  • ежедневные шаги увеличиваются в течение текущего дня, но каждый следующий день мы делаем запрос, ежедневные шаги иногда уменьшаются
  • мы делаем тот же запрос, с начала дня до конца дня, с 86400000 в качестве времени ведра и того же типа данных и идентификатора источника данных

Мы находимся на финальной стадии разработки, поэтому мы тестируем только с несколькими пользователями. У наших пользователей есть устройства Xiaomi mi band.

Мы думаем, что проблема может заключаться в десинхронизации серверов, на которые мы обращаемся, потому что если мы протестируем с помощью другие приложения, подобные этому, показывают правильные значения. Мы создали еще одну учетную запись клиента oauth для облачной консоли Google и новые учетные записи электронной почты для тестирования с новыми пользователями и клиентами oauth, но результаты остались прежними.

Это рекомендуемый способ получения ежедневных шагов, и мы используем точно такой же запрос https://developers.google.com/fit/scenarios/read-daily-step-total, и даже с опцией try it в документации результаты неверны.

Что еще мы можем сделать, чтобы помочь вам решить проблему? Большое спасибо!

person Daniel González Moratona    schedule 25.03.2021
comment
В нашем случае мы почти уверены, что это из-за того, что исходное приложение (huawei health) изменяет данные в googlefit непоследовательно. Удачи. - person Jordi; 31.03.2021
comment
Большое спасибо @Jordi. Сейчас мы тестируем приложение Zepp (amazfit, но совместимо с устройствами Xiomi) и посмотрим, есть ли у нас такая же проблема или нет. Отредактирую свой пост :) - person Daniel González Moratona; 31.03.2021
comment
Когда вы говорите, что собираетесь протестировать с Zepp, вы имеете в виду, что вы синхронизируете Xiaomi с Googlefit через второе приложение, чтобы проверить, сохраняет ли оно данные как-то еще? Или вы имеете в виду, что вы просто проверяете, есть ли у них разные данные? Могу поспорить, что если приложения показывают разные данные, это потому, что вы получаете через REST API, а другие используют Googlefit Native SDK ... - person Jordi; 01.04.2021
comment
Я тестирую Zepp, потому что мне нужно проверить, удаляет ли данные приложение Xioami, и вы сказали, что в вашем случае проблема с huawei, поэтому я думаю, что в моем случае это может быть приложение XioamiMiFit для Android. Я вижу, что количество ежедневных шагов в течение дня уменьшается, и рекомендуемый Google способ получения ежедневных шагов с помощью REST API возвращает данные, отличные от данных приложения Google Fit. С помощью api dataPointChanges я вижу, что многие шаги удаляются, и если я получаю шаги во время отметок времени начала и окончания сегмента активности, он возвращает 0 для некоторых из них (если я суммирую удаленные, все в порядке). - person Daniel González Moratona; 01.04.2021