Мы используем 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. Это верно? Что еще мы могли увидеть?
raw:com.google.step_count.delta:com.huawei.health:
источника данных, сейчас и через пару часов, и сравнить их? - person Andy Turner   schedule 16.03.2021