[Из песочницы] Снова Google Fit. Работает ли он?

Привет! Меня зовут Виктор, я разрабатываю веб-приложение catisfit.com для анализа данных Google Fit.

Ожидания


imageБольшая часть мобильных телефонов давно научилась считать шаги. Многие носят фитнес-браслеты и часы, пользуются спортивными трекерами типа Strava, становятся по утрам на умные весы, пытаются контролировать сон и ведут дневники питания. Некоторые даже используют смарт-тонометры и ботинки.

Все связанные с этими гаджетами приложения работают внутри себя, показывают графики, подсказывают, как надо есть, как двигаться и как легче достичь цели. Общее у них одно — они все, как правило умеют синхронизироваться с приложением Google Fit и через него обмениваться данными друг с другом. Милтрекер берет ваши шаги из приложения-браслета и пересчитывает калории с учетом активности, браслет берет вес и меняет цели. А Google Fit все это любезно собирает, хранит, подсчитывает и отдает.

Это я так думал, когда решил использовать его API чтобы создать сайт, где пользователь мог бы видеть все и сразу, в разрезе аналитики и сравнения.
Под катом — суровая реальность.

Реальность


image


Итак, «испытательное снаряжение»: 2 мобильника Samsung, трекеры MiBand3 и Misfit Shine, носимые вместе и по очереди, весы Mi Scale, милтрекер MyFitnessPal

Активность


Шаги. Казалось бы, все просто: есть 3 источника истины (мобильник+2 трекера). Надо считать общее количество шагов в день. Есть у GF специальные «агрегированные» запросы на этот случай.
Теперь про разницу показаний. Это разница значений MiBand (оранжевая линия) и приложения Google Fit (зеленая):

image

Разница показаний может достигать 50–100%! Какая уж тут статистика с аналитикой?…
Я писал в GF (без ответа, само собой), писал в глобальный саппорт Xiaomi (посоветовали по-особому жестко переустановить приложение и если что, менять трекер).

Далее я понял, что все еще хуже.

Оказывается, гигантской разницы могут достигать показания в мобильном приложении Google Fit и в его же Google Fit API.Т. е. GF криво синхронизируется со своими же серверами. Народ робко вопрошает на StackOverflow и единственный совет от GF — изменить запрос (в принципе, иногда помогает если разница в значениях 1–5%, т. к. данные агрегируются по-разному).

Кстати, со временем (спустя 4–8 недель) с этими «внутренними» расхождениями происходит магия. Они как бы «сглаживаются». Другими словами, статистика за август этого года будет сильно «правдивее» ноября. На этом графике включен «проблемный» период с ссылки выше:

image

Так вот сейчас показания Android-приложения и Rest для этого периода идентичны, хотя когда я задавал вопрос, разница также была колоссальной (до 100%). Плохо лишь то, что «сглаживаются» они по совершенно непонятному закону и почти всегда в меньшую от показаний браслетов сторону.

Если запариваться — каждый вечер запускать одновременно приложения браслетов и Google Fit, ждать, чтобы они друг с другом побыли наедине в памяти и в IU — расхождений и пропусков сильно меньше.

Когда телефон в международном роуминге (в нем я отключаю мобильные данные и пользуюсь только wifi в отелях/хотспотах) — беда. Вне зависимости от количества смарт-побрякушек и показаний на них, GF «обнуляет» целые недели. Причем иногда — еще несколько дней после прилета домой. Дни катания на лодке по России при временном (не более суток) отсутствии связи и Интернета тоже часто бывают обнулены.

Вес


Это единственное, с чем нет проблем. По крайней мере, если вставать на весы один раз утром.) Нет ни пропусков, ни неточностей. Наверное, потому, что днем и вечером никто обычно не взвешивается и несколько разных весов дома не держит.

Питание


Здесь вопрос синхронизации с GF еще острее, чем с активностью. Т.е. если каждый вечер заполнять дневник питания в мобильном приложении, или на сайте, но синхронизировать с приложением — все ок. Если вы решите заполнить дневник за 3–4 прошедших дня — будьте готовы к тому, что в Google останутся только последние два:

image

Вот такие «ломаные» периоды c пропущеными днями. По факту, MyFitnessPal заполнен за весь период без пропусков.

Сон


В данных о сне, приходящих с браслета, как правило больше интересно качество, а не количество: фазы сна, продолжительность глубокого сна и пр. К сожалению, GF не различает разные фазы сна, под одним и тем же «activityType»: 72 приходят «Глубокий Сон» и «Неглубокий сон». Разница только литеральная, значит для носителя каждого отдельного языка — своя. Т.е. на данный момент из API возможно оценить только общую продолжительность.

Вот собственно и вся картина на сегодня. Остается добавить, что внутри смартфона обмен этими данными между приложениями также довольно выборочный, специфический и главное — нестабильный.

Выводы


В целом проект GF на данный момент больше похож на непрофильную поделку китайского производителя гаджетов, работающую на «отстань, маркетолог». Но не компании, которая прямо сейчас покупает Fitbit и по местным слухам хочет стать глобальным оператором медицинских данных.

Остается надеяться, что с этими изменениями у GF появятся более конкретные цели, проекту начнут уделять больше внимания, и точность данных хотя бы примерно будет соответствовать действительности.

© Habrahabr.ru