Pull to refresh
0
DataArt
Технологический консалтинг и разработка ПО

Немного Fitbit прохладной весной

Reading time 5 min
Views 9.7K


DataArt, как и весь мир, с интересом наблюдает за новинками в сфере носимой электроники. В этой статье мы хотели бы рассмотреть разработку для Fitbit.

О Fitbit

Сейчас Fitbit выпускает множество самых разных интересных девайсов: клипсы Zip и One, браслеты Flex, Charge, ChargeHR и Surge и умные весы Aria. Последние новинки — ChargeHR и Surge.

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

О разработке

В первую очередь нужно отметить, что взаимодействовать с устройством напрямую невозможно. На самом деле, это оказывается серьезным ограничением (об этом еще поговорим ниже). Было бы полезно иметь возможность общаться через Bluetooth LE, но пока это не реализовано. Приходится использовать RESTful-сервисы Fitbit или API клиентских библиотек, доступных для ряда языков.

Для аутентификации нужно использовать протокол OAuth 1.0 (на OAuth 2.0 Fitbit пока еще не перешел). Официальная документация предлагает для этой цели не изобретать велосипед и пользоваться существующими решениями, приводя список надежных и проверенных библиотек.

Рассмотрим Temboo в связке с Java. Для начала нужно зарегистрировать свое приложение на dev.fitbit.com и Temboo (или для другой библиотеки на ваш выбор). Вы получите consumer key и consumer secret, которые понадобятся при авторизации. Необходимо сгенерировать URL авторизации, с которым приложение пройдет первый этап OAuth-процесса:

TembooSession session = new TembooSession(tembooUserName, tenbooAppName, tembooAppKey);
InitializeOAuth initializeOAuthChoreo = new InitializeOAuth(session);

// Get an InputSet object for the choreo
InitializeOAuthInputSet initializeOAuthInputs = initializeOAuthChoreo.newInputSet();

// Set inputs
initializeOAuthInputs.set_ConsumerSecret(consumerSecret);
initializeOAuthInputs.set_ConsumerKey(consumerKey);

InitializeOAuthResultSet initializeOAuthResults = initializeOAuthChoreo.execute(initializeOAuthInputs);


Вывод будет содержать AuthorizationURL, CallbackID и OAuthTokenSecret. Пользователь должен пройти по AuthorizationURL, чтобы разрешить доступ приложению. CallbackID используется для получения callback-данных, которые Temboo сохраняет, как только пользователь авторизовался. Временный OAuthTokenSecret меняется на постоянные токены на следующем шаге.

Когда доступ разрешен, можно закончить авторизацию:
FinalizeOAuth finalizeOAuthChoreo = new FinalizeOAuth(session);

// Get an InputSet object for the choreo
FinalizeOAuthInputSet finalizeOAuthInputs = finalizeOAuthChoreo.newInputSet();

// Set inputs
finalizeOAuthInputs.set_CallbackID(callbackID);
finalizeOAuthInputs.set_OAuthTokenSecret(oAuthTokenSecret);
finalizeOAuthInputs.set_ConsumerSecret(consumerSecret);
finalizeOAuthInputs.set_ConsumerKey(consumerKey);

// Execute Choreo
FinalizeOAuthResultSet finalizeOAuthResults = finalizeOAuthChoreo.execute(finalizeOAuthInputs);


В итоге получаем для пользователя access token и token secret.

Вот и все! Теперь можно читать и обновлять данные. В том числе, используя ту же библиотеку. Например, посмотрим, чем занимался пользователь в определенный день:

GetActivities getActivitiesChoreo = new GetActivities(session);

// Get an InputSet object for the choreo
GetActivitiesInputSet getActivitiesInputs = getActivitiesChoreo.newInputSet();

// Set inputs
getActivitiesInputs.setCredential(yourCredentials);
getActivitiesInputs.set_Date("2013-03-18");
getActivitiesInputs.set_ResponseFormat("json"); // or xml - optional (default is json)
getActivitiesInputs.set_UserID("123123"); // optional (default is the current user)

// Execute Choreo
GetActivitiesResultSet getActivitiesResults = getActivitiesChoreo.execute(getActivitiesInputs);


Результат будет получен в формате json или xml, парсим его и используем в своих целях.

Ввод данных выглядит примерно так же. Запишем съеденную на обед пиццу:

LogFood logFoodChoreo = new LogFood(session);

// Get an InputSet object for the choreo
LogFoodInputSet logFoodInputs = logFoodChoreo.newInputSet();

// Set inputs
logFoodInputs.setCredential(yourCredentials);
logFoodInputs.set_Amount("3");
logFoodInputs.set_MealType("Lunch");
logFoodInputs.set_Date("2011-10-14");
logFoodInputs.set_UnitID("147"); // food units; 147 is for “grams”
logFoodInputs.set_FoodID("10409"); // food id for pizza

// Execute Choreo
logFoodChoreo.execute(logFoodInputs);


Что касается Fitbit API, он включает длинный список URLов (HTTPS), которые также можно использовать для чтения и изменения данных.

We want your feedback!

Но мы хотим выжать максимум из девайсов — найти новые способы взаимодействия с ними или получать нестандартную обратную связь. Большинство Fitbit-устройств оснащены дисплеями или LED-индикаторами, могут вибрировать — все это представляется хорошим механизмом взаимодействия с пользователем.
К сожалению, есть препятствие, обозначенное ранее: нельзя напрямую обращаться к устройству, только через API.
Как можно заставить девайс откликаться? Рассмотрим на примере Fitbit Flex. Устройство вибрирует, когда:
  • достигнута дневная цель;
  • активируется будильник;
  • (де)активируется режим сна.


LEDs загораются:
  • для индикации прогресса по дневной цели;
  • когда активируется будильник;
  • когда (де)активируется режим сна;
  • когда устройство заряжается;
  • когда возникает ошибка при обновлении.


Это некрасивое решение, но можно было бы генерировать такие «искусственные» события для своих целей. Но не будем забывать, что есть еще один момент: после того как пользователь обновил настройки (поставил новую цель или будильник), нужно синхронизироваться с сервером, чтобы обновления вступили в силу. Существует несколько способов синхронизации:
  • через ПК (нужно запустить приложение Fitbit и держать девайс недалеко от компьютера);
  • через смартфон (запустить приложение, разрешить Bluetooth сщединение);
  • через NFC;
  • вручную, нажав кнопку в приложении Fitbit;
  • в бэкграунде (удостоверившись, что все запущено и работает).


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

Вместо заключения

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

Автор: Вероника Строкова
Tags:
Hubs:
+5
Comments 7
Comments Comments 7

Articles

Information

Website
www.dataart.com
Registered
Founded
Employees
1,001–5,000 employees