Concepto clave
La integración de APIs y funcionalidades nativas en Expo transforma tu aplicación React Native de una interfaz estática a una experiencia móvil completa. Piensa en esto como agregar superpoderes a tu app: las APIs son como contratos que te permiten comunicarte con servicios externos (como el clima o pagos), mientras que las funcionalidades nativas son capacidades del dispositivo mismo (como la cámara o geolocalización) que Expo expone de forma segura y multiplataforma.
Expo actúa como un puente entre JavaScript y el código nativo del dispositivo, manejando automáticamente las diferencias entre iOS y Android. Esto significa que puedes usar una sola API de JavaScript para acceder a características como notificaciones push o sensores, sin preocuparte por las implementaciones específicas de cada sistema operativo. Es similar a cómo un traductor simultáneo te permite conversar en un idioma mientras él se encarga de las variaciones regionales.
Cómo funciona en la práctica
Para integrar una API o funcionalidad nativa con Expo, sigues un flujo de tres pasos: primero, instalas el módulo de Expo correspondiente (si es necesario); segundo, importas y configuras la funcionalidad en tu código; tercero, manejas los permisos y estados del dispositivo. Por ejemplo, para usar la cámara, no necesitas escribir código nativo, solo usar la API de expo-camera que Expo proporciona.
Paso a paso: 1) Ejecuta npx expo install expo-camera en tu terminal. 2) En tu componente React Native, importa Camera desde expo-camera. 3) Solicita permisos usando Camera.requestCameraPermissionsAsync() y maneja el estado con useState y useEffect. 4) Renderiza el componente Camera en tu interfaz. Expo se encarga de mostrar la vista de cámara nativa en ambos sistemas.
Código en acción
Aquí tienes un ejemplo funcional para acceder a la geolocalización usando expo-location, una funcionalidad nativa común en apps móviles:
import React, { useState, useEffect } from 'react';
import { View, Text, Button } from 'react-native';
import * as Location from 'expo-location';
export default function App() {
const [location, setLocation] = useState(null);
const [errorMsg, setErrorMsg] = useState(null);
useEffect(() => {
(async () => {
let { status } = await Location.requestForegroundPermissionsAsync();
if (status !== 'granted') {
setErrorMsg('Permiso de ubicación denegado');
return;
}
let location = await Location.getCurrentPositionAsync({});
setLocation(location);
})();
}, []);
let text = 'Esperando...';
if (errorMsg) {
text = errorMsg;
} else if (location) {
text = JSON.stringify(location);
}
return (
{text}
);
}Antes de refactorizar, podrías tener código que mezcla lógica de permisos y UI. Después de refactorizar para usar hooks de React y async/await, como se muestra arriba, el código es más limpio y mantenible.
Errores comunes
- Olvidar solicitar permisos: Muchas funcionalidades nativas (como cámara o ubicación) requieren permisos explícitos del usuario. Siempre llama a funciones como
requestPermissionsAsyncantes de usar la API, y maneja los casos denegados. - No manejar estados de carga o error: Las APIs nativas pueden fallar o tardar en responder. Usa estados de React para mostrar indicadores de carga o mensajes de error, evitando que la app se congele.
- Asumir que todo funciona igual en iOS y Android: Aunque Expo abstrae muchas diferencias, algunas APIs pueden tener comportamientos ligeramente distintos. Prueba en ambos dispositivos y consulta la documentación de Expo para detalles específicos.
- Usar APIs obsoletas: Expo actualiza frecuentemente sus módulos. Verifica que estás usando la versión más reciente y sigue las guías de migración si actualizas Expo SDK.
Checklist de dominio
- Puedo instalar y configurar un módulo de Expo para una funcionalidad nativa (ej.,
expo-cameraoexpo-location). - Sé solicitar y manejar permisos del usuario para APIs sensibles.
- Puedo integrar una API externa (como REST) en mi app Expo y mostrar los datos en la UI.
- Entiendo cómo depurar problemas comunes con APIs nativas usando consola y herramientas de desarrollo.
- Puedo explicar la diferencia entre APIs de Expo y APIs de React Native puras.
- Sé probar funcionalidades nativas en simuladores y dispositivos reales.
- Puedo optimizar el rendimiento al usar APIs, evitando llamadas excesivas o bloqueantes.
Integración de una API de clima y geolocalización nativa
En este ejercicio, crearás una app que muestra el clima actual basado en la ubicación del dispositivo. Usarás expo-location para obtener la ubicación nativa y una API externa (OpenWeatherMap) para los datos del clima.
- Crea un nuevo proyecto Expo con
npx create-expo-app ClimaAppy navega a la carpeta del proyecto. - Instala expo-location ejecutando
npx expo install expo-locationen tu terminal. - En
App.js, importa los módulos necesarios: React, useState, useEffect, View, Text, y expo-location. - Implementa un efecto para solicitar permisos de ubicación y obtener las coordenadas actuales usando
Location.getCurrentPositionAsync. - Usa las coordenadas (latitud y longitud) para hacer una petición HTTP a la API de OpenWeatherMap (endpoint:
https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API_KEY}&units=metric). Necesitarás una API key gratuita de su sitio web. - Muestra el clima (temperatura, descripción) en la interfaz, manejando estados de carga y error.
- Prueba la app en un simulador o dispositivo real, verificando que los permisos y la API funcionen correctamente.
- Usa async/await para manejar las operaciones asíncronas de ubicación y API.
- Guarda tu API key de OpenWeatherMap en una variable de entorno o constante, no la expongas en el código públicamente.
- Si la ubicación falla, proporciona un botón para reintentar o usa una ubicación por defecto.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.