Serie React Native y BLE: Parte 2 - Construyendo un framework BLE para Android

Cuando se trata de tecnología móvil, iOS y Android son los dos sistemas operativos dominantes que impulsan la mayoría de smartphones y tablets en todo el mundo. Como desarrolladores, es esencial que tengamos el conocimiento y las herramientas para trabajar con ambas plataformas de manera efectiva. Esto es especialmente cierto cuando se trata de utilizar la tecnología Bluetooth, que es un componente crucial de muchas aplicaciones móviles modernas.
En la parte 1 de esta serie de tutoriales, creamos un framework BLE (Bluetooth Low Energy) que podía conectarse a la UI usando React Native. Sin embargo, este framework solo funcionaba en iOS, lo que significaba que necesitábamos desarrollar una solución separada para Android.
En la parte 2 de esta serie de tutoriales, nos enfocaremos en definir un nuevo SDK para Android y vincularlo a la UI, tal como hicimos en iOS. Esto nos permitirá soportar completamente ambos sistemas operativos y proporcionar una experiencia Bluetooth fluida para todos los usuarios, independientemente de su dispositivo de elección.
Crear nuevo SDK de Android
El primer paso es crear tu propia biblioteca Bluetooth. Normalmente, los ingenieros tienden a usar una biblioteca de código abierto como RxAndroidBle o Android-BLE-Library powered by Nordic. Sin embargo, el objetivo principal de este tutorial es guiarte sobre cómo crear un nuevo módulo Android y vincularlo a React Native. Esto no solo aplica a Bluetooth sino también a cualquier biblioteca que necesites usar en tu aplicación. El otro objetivo es obtener conocimiento fundamental de Android BLE en caso de que necesites modificar algo o crear tu propia característica que no ha sido soportada en el mercado.
Al crear tu propia biblioteca Bluetooth, tienes la libertad de personalizar y adaptar la biblioteca a tus necesidades específicas. Esto puede proporcionar ventajas significativas sobre usar bibliotecas preexistentes, ya que puedes optimizar la biblioteca para tu caso de uso particular y evitar posibles problemas de compatibilidad.
Desde tu proyecto, ve a File > New > New Module > Completa la información.
Se agregará una nueva biblioteca a tu proyecto.


Una cosa muy diferente de Android e iOS es que desde Android 6.0, Google requiere que el Location Permission esté habilitado para el escaneo Bluetooth Low Energy (Ver más Android 6.0 Changes).
A continuación, agrega los siguientes permisos a tu AndroidManifest.xml en android/app/src/main/AndroidManifest.xml
1 | <uses-permission android:name="android.permission.BLUETOOTH" /> |
1 | Android 12 update: |
Para propósitos de demostración, el SDK expone solo 2 APIs simples startScan para comenzar a escanear dispositivos cercanos e isBluetoothOn para verificar si el Bluetooth está encendido.
1 | /* |
1 | /* |
Para solicitar permisos en React Native, vamos a usar este módulo https://github.com/zoontek/react-native-permissions para obtener los permisos que la aplicación necesita.
Construir y lanzar módulo SDK de Android
A continuación, distribuyamos el módulo para que otras aplicaciones puedan usarlo.
Desde la carpeta raíz, ejecuta ./gradlew kTrackingSDK:assembleRelease para generar un archivo .aar.
El archivo de salida estará ubicado en ./KTrackingSDK/build/outputs/aar, luego puedes importar el archivo .aar al proyecto android.
Conectar a la parte de React Native
Ahora, ya tenemos la biblioteca Bluetooth. El siguiente paso es vincular el módulo a la parte de React Native.
Primero, la parte de React Native necesita entender el módulo Nativo. Agrega la siguiente configuración a tu /src/main/java
1 | class BLEManager(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) { |
Creando un nuevo archivo para definir el BLEManagerPackage
1 | class BLEManagerPackage: ReactPackage { |
A continuación, agrégalo a la lista de paquetes en MainApplication.java
1 | public class MainApplication extends Application implements ReactApplication { |
Resultado
Dado que usamos el mismo código para Android e iOS en la parte de React Native, no hay necesidad de modificar el código de React Native del tutorial anterior. Mientras sigas el protocolo que definimos, todo debería funcionar según lo previsto.
Al mantener un protocolo consistente en ambas plataformas, podemos asegurar que el código sea fácilmente portable y que cualquier cambio realizado en una plataforma no afecte a la otra. Esto puede simplificar significativamente el proceso de desarrollo y reducir el riesgo de errores o problemas de compatibilidad.

Conclusión
Después de pasar incontables horas investigando y experimentando, finalmente hemos aprendido cómo crear nuestra propia biblioteca Bluetooth y usarla en nuestro proyecto React Native. Con este nuevo conocimiento, el proceso de agregar nuevas características se ha vuelto significativamente más fácil y eficiente. Solo necesitamos implementar la lógica en Código Nativo en lugar de tener que desarrollar la parte de UI dos veces.
Esto no solo nos ha ahorrado una tremenda cantidad de tiempo y esfuerzo, sino que también nos ha permitido enfocarnos más en mejorar la funcionalidad de nuestra aplicación. Ahora podemos dedicar más recursos a desarrollar nuevas características, optimizar las existentes y mejorar la experiencia general del usuario.
Además, nuestra nueva capacidad de crear bibliotecas personalizadas ha abierto un mundo completamente nuevo de posibilidades para nuestro equipo de desarrollo. Ahora podemos aprovechar nuestro conocimiento de React Native para crear características aún más avanzadas e innovadoras, todo mientras mantenemos un proceso de desarrollo simplificado.
¡Feliz codificación!