Google Fit para Android: Leyendo los Datos del Sensor
Google Fit es una plataforma que permite a los desarrolladores construir aplicaciones enfocadas en datos de fitness. Una de las herramientas que Google provee es Google Fit para Android, que está disponible como un paquete en Google Play Services.
Google Fit es una plataforma que permite a los desarrolladores construir aplicaciones enfocadas en datos de fitness. Una de las herramientas que Google provee es Google Fit para Android, que está disponible como un paquete en Google Play Services.
Mientras que hay muchas APIs diferentes disponibles para Google Fit, como discutimos en este artículo de Envato Tuts+, este tutorial se enfoca en iniciarte y utilizar la data del sensor de lectura de Google Fit en un dispositivo Android. Un proyecto de ejemplo para este tutorial se encuentra en GitHub.
1. Configurando la Consola de Desarrollador
Para poder utilizar Google Fit pra Android, necesitas:
Esta sección muestra como configurar tu aplicación Android y la Fitness API. Puedes empezar visitando la Consola Google Developers. Si ya tienes un proyecto para trabajar, puedes saltear el siguiente paso. Si no, continúa y crea un nuevo proyecto para tu aplicación Google Fit.
Paso 1: Crear un Proyecto
Para crear un nuevo proyecto, haz click en el botón azul Create Project en la esquina superior izquierda de la pantalla.
Esto te mostrará un diálogo que pide un nombre de proyecto. Para este tutorial, creé un proyecto llamado TutsPlusGoogleFit. Hay algunas restricciones en cuanto a cómo puedes llamar tu proyecto. Solo letras, números, comillas, guiones, espacios y signos de exclamación son permitidos.
Una vez que presionas Create, un diálogo aparece en la esquina inferior derecha de la página, indicando que el proyecto fue creado.
Paso 2: Habilitar la API de Google Fit
Con el proyecto configurado, te llevará a la página de Overview. La forma más fácil de encontrar la API de Google Fit es buscando la palabra clave "fit". Selecciona Fitness API de los resultados que aparezcan.
Haz click en Enable API para habilitar la Fitness API.
Después de habilitar la Fitness API, recibirás una alerta que te informa que también necesitas crear credenciales para utilizar la Fitness API. Afortunadamente, el alerta incluye un botón que nos lleva a la página de Credenciales.
Paso 3: Crear Credenciales
En la página de Credenciales, necesitas proveer cierta información general acerca de tu aplicación en el Credentials Wizard. Especifica que estás usando la Fitness API, que la API se llamará desde una aplicación Android, y que esa aplicación necesita acceso a User Data.
A continuación, haz click en What credentials do I need? (Qué credenciales necesito?) en la parte inferior y crea una client ID de OAuth 2.0 para tu aplicación Android. Necesitas dos piezas de información importantes para este paso:
huella de certificado de registro
nombre del paquete para la aplicación
Puedes obtener una huella de certificado de registro abriendo la terminal o la consola de comando, y navegando a la localización del certificado de registro de tu aplicación. Esto puede ser tu llave de release o el certificado por default debug.keystore que utiliza Android Studio. Una vez que hayas navegado a tu keystore, puedes generar la SHA1 necesaria con el siguiente comando, donde debug.keystore es el nombre del certificado de registro.
1
keytool -list-v-keystore debug.keystore
Pega la llave SHA1 en el campo SHA1 e ingresa com.tutsplus.googlefit en el campo de nombre del paquete.
Finalmente, necesitas configurar la pantalla de consentimiento de OAuth 2.0 Esta es la pantalla que muestra al usuario para que pueda garantizar el permiso para que tu aplicación utilice su data de fitness. Este paso requiere tu email y el nombre del producto para mostrar a los usuarios. Para este tutorial, he ingresado Tuts+ Google Fit.
Haz click en Continue, y en la siguiente página, haz click en Done para finalizar el proceso de configuración.
Paso 4: Configurar el Proyecto Android
Con tu proyecto preparado y configurado en la Consola de Google Developer, puedes comenzar a crear un nuevo proyecto Android. Asegúrate que el nombre del paquete es igual al que ingresaste en la Consola de Google Developers y configura la aplicación para que utilice aplicaciones Phone y Tablet con una versión de SDK mínima de 14. El nivel mínimo de API para Google Fit es 9. Crea una Empty Activity (Actividad Vacía) para mantener la base del proyecto limpia así te puedes enfocar en la API de Google Fit en este tutorial.
Luego de configurar el proyecto, abre el archivo build.gradle del proyecto e importa el paquete de fitness desde Google Play Services añadiendo la siguiente línea en el nodo de dependencies.
En el siguiente paso, te conectarás a Google Play Services y aprenderás cómo acceder a los datos de fitness del usuario desde tu aplicación.
2. Usando la API de Fitness
Paso 1: Conectado con Google Play Services
Con el proyecto configurado en el Android Studio y la Consola de Google Developer, es momento de sumergirnos en la API de Fitness. En el método onCreate(), confirmas que la aplicación ya está intentando autorizar con la API de Fitness. Luego inicia la instancia GoogleApiClient añadiendo la API de Fitness Sensors, definiendo un scope, y registrando los callbacks de la aplicación. Si no solicitas un scope, tu aplicación fallará al autorizar contra la API de Fitness Sensors.
Luego de iniciar la instancia de GoogleApiClient, necesitas hacerlo conectar con el backend de Google. Puedes hacer esto en onStart().
1
@Override
2
protectedvoidonStart(){
3
super.onStart();
4
mApiClient.connect();
5
}
La primera vez que el usuario corre la aplicación, la conexión con la API de Fitness fallará porque el usuario debe autorizar tu aplicación para acceder a su data de fitness. Puede escuchar este evento en onConnectionFailed() y reaccionar acorde chequeando si la autorización está en progreso. Si es así, llama a startResolutionForResult() así Google Play Services puede manejar apropiadamente al usuario garantizando el permiso para usar su información.
Si corres tu aplicación ahora, quizás se te presente un diálogo pidiendo seleccionar una cuenta de Google para utilizar si tienes más de una cuenta en tu dispositivo.
Cuando el sistema operativo sabe qué cuenta usar, tu aplicación presentará un nuevo diálogo solicitando al usuario garantizar el permiso para que la aplicación lea sus datos de fitness.
En este punto, el usuario o bien garantiza el permiso a tu aplicación para leer sus datos o cierra el diálogo, cancelando el proceso. Puedes escuchar ambos eventos en onActivityResult() y manipular el resultado. Si el usuario le otorga permiso a tu aplicación, la aplicación recibe una respuesta RESULT_OK y puede intentar conectar con el cliente de API de Google.
Log.e("GoogleFit","requestCode NOT request_oauth");
14
}
15
}
Tu aplicación ahora debe ser capaz de conectarse exitosamente a Google Play Services. Con eso fuera del camino, puedes comenzar a enfocarte en la API de Fitness.
Paso 2: Accediendo a los Datos de Pasos con la API de Fitness
Cuando tu instancia GoogleApiClient se ha conectado a Google, el callback onConnected() es disparado. En este callback, necesitas crear un nuevo objeto DataSourcesRequest que define el tipo de datos en los que tu aplicación está interesada. También necesitas crear un ResultCallback que maneja lo que la app debe hacer si los pasos pueden ser recuperados del dispositivo. Con los objetos creados, llama Fitness.SensorsApi.findDataSources() para comenzar a buscar una fuente de datos de pasos válida.
Quizás notes que el método registerFitnessDataListener() en realidad no existe. Este es un método helper que es llamado cuando la fuente de los datos para el cuenta pasos es encontrada, lo que luego crea un objeto SensorRequest para solicitar los datos del sensor cuenta pasos.
En el siguiente fragmento de código, el objeto SensorRequest intenta encontrar un conteo de pasos cada tres segundos. El Fitness.SensorApi luego agrega un request con un nuevo onDataPointListener entonces, cuando nuevos datos están disponibles, el listener es disparado. Si no se encuentran nuevos datos, el OnDataPointListener no se dispara y la API de Fitness espera otros tres segundos antes de volver a comprobar.
Cuando se detecta un cambio en el conteo de pasos, onDataPoint() es invocado. En este método, haces un bucle por los campos en el parámetro DataPoint y muestra un mensaje Toast con el nombre del campo y el valor. En este ejemplo, eso será el cuenta pasos. En tu propia app, usarás una lógica más apropiada para ejecutar tu tarea. Notarás que el comando Toast está envuelto en un Runnable que es pasado a runOnUiThread. Esto es porque el callback no se dispara en el hilo principal de UI.
Hay dos cosas más que necesitas hacer para esta prueba. El primero es desconectarte de la SensorApi y Google Play Services cuando terminaste de usarlos. En este ejemplo, haces eso cuando se llama a onStop(). La segunda es guardar el valor de authInProgress que es comprobado por onCreate() en onSavedInstanceState().
1
@Override
2
protectedvoidonStop(){
3
super.onStop();
4
5
Fitness.SensorsApi.remove(mApiClient,this)
6
.setResultCallback(newResultCallback<Status>(){
7
@Override
8
publicvoidonResult(Statusstatus){
9
if(status.isSuccess()){
10
mApiClient.disconnect();
11
}
12
}
13
});
14
}
15
16
@Override
17
protectedvoidonSaveInstanceState(BundleoutState){
18
super.onSaveInstanceState(outState);
19
outState.putBoolean(AUTH_PENDING,authInProgress);
20
}
Conclusión
En este tutorial, aprendiste como conectar con Google Play Services Fitness API y leer datos del sensor de fitness del dispositivo del usuario. Hasta algo tan simple como datos de pasos para tu usuario puede ser de increíble valor para aplicaciones como Android Wear watch faces o registradores de objetivos. Hay docenas de otros tipos de fuentes de datos que puedes usar y muchas otras APIs con Google Fit para hacer tus aplicaciones mejores todavía.
¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!