Ir al contenido principal

Caso de éxito · Redes sociales · Tecnología de consumo

Caso de éxito JoyJet: plataforma social para iOS y Android con radar geográfico

Publicado el · Actualizado el · Por YuSMP Group Engineering

Caso de éxito JoyJet: cómo lanzamos una plataforma social en producción —en App Store y Google Play, activa en EE. UU., la UE y más allá— que combina un feed de contenido curado por intereses, un Radar de proximidad geográfica para descubrir personas, mensajería cifrada y una economía virtual completa de monedas, regalos y suscripciones premium.

SectorRedes sociales · Tecnología de consumo
Año del proyecto2022–actualidad
ColaboraciónPrecio cerrado + entrega continua de funciones
Plataforma social JoyJet: pantalla de descubrimiento geográfico con Radar en iOS

El reto: una plataforma social que hace más que un feed

El equipo de producto de JoyJet quería una plataforma social que fuera más allá de un feed de fotos y vídeos. La idea clave era que las apps sociales existentes atendían poco el descubrimiento —encontrar personas interesantes, no solo contenido—. Los SDK sociales estándar y las plataformas de comunidad de marca blanca ofrecían feeds y mensajería, pero no tenían ningún marco para el emparejamiento por proximidad geográfica en tiempo real, y ninguna admitía una economía virtual por capas capaz de recompensar tanto a los creadores como a los miembros más implicados de la comunidad. Construimos JoyJet desde cero como una aplicación nativa para iOS y Android: una plataforma de contenido con un feed curado por intereses, un Radar que muestra a las personas cercanas que coinciden con sus intereses, mensajería cifrada rápida, Stories y un nivel de suscripción JJPremium respaldado por un marketplace de monedas y regalos. El resultado es un producto social que se publica en App Store y Google Play, disponible en inglés, ruso, español y chino tradicional para públicos de Estados Unidos, la Unión Europea y más allá.

Aspectos destacados del proyecto

Feed de contenido curado por intereses Descubrimiento con Radar de proximidad geográfica Mensajería cifrada en tiempo real Stories y JJVideo Suscripción JJPremium Monedas virtuales, regalos y marketplace Economía de creadores JJFans Publicada en App Store + Google Play · 4 idiomas

En cifras

Un resumen de lo que aportó el desarrollo de JoyJet en iOS y Android durante su primer ciclo de producción.

2plataformas nativas: iOS y Android, con bases de código totalmente separadas y optimizadas para cada plataforma
4tipos de contenido —vídeos, fotos, Stories y JJLikes— con clasificación del feed basada en intereses
4idiomas en el lanzamiento: inglés, ruso, español y chino tradicional
<100 msentrega típica de mensajes mediante conexión persistente WebSocket en LTE y Wi-Fi móviles
20+pantallas de interfaz distintas que cubren el feed, el Radar, el chat, el perfil, premium, el mercado (Market) y la incorporación
16–24 sem.plazo de entrega típico de un MVP comparable de plataforma social en ambas tiendas
Pantalla de Radar de JoyJet: descubrimiento de personas por proximidad geográfica con filtros de intereses en iOS

Por qué un desarrollo nativo a medida en lugar de SDK sociales de marca blanca

Ninguna plataforma social estándar —Sharetribe, Circle, Mighty Networks o las marcas blancas de comunidades— combina en un único paquete móvil nativo un feed de contenido basado en intereses, un radar de proximidad geográfica en tiempo real, mensajería por WebSocket y una economía de monedas virtuales. Los SDK existentes atan a los equipos a esquemas fijos y plantillas de interfaz, lo que hace técnicamente imposible la coincidencia continua de ubicación en segundo plano del Radar dentro de sus modelos de permisos y de ciclo de vida. Construir JoyJet sobre un SDK social habría supuesto bifurcarlo de forma sustancial, y en ese punto el SDK no aporta ninguna ventaja y todas sus suposiciones se convierten en pasivos. Elegimos un desarrollo nativo desde cero con Swift / SwiftUI para iOS y Kotlin / Jetpack Compose para Android, de modo que cada función —Radar, clasificación del feed, monedas, push— es propia de principio a fin sin restricciones de proveedor.

El algoritmo del feed, en particular, exigió un modelo de puntuación a medida: el contenido se clasifica mediante una combinación de coincidencia de etiquetas de interés, afinidad entre cuentas, decaimiento por antigüedad y peso de la señal de JJLike. Esa lógica de puntuación se ejecuta en el servidor, en un servicio Node.js respaldado por conjuntos ordenados de Redis para la caché de contenido popular, con PostgreSQL como fuente de verdad de las etiquetas de interés y del historial de interacciones. El algoritmo fijo de una solución de marca blanca habría hecho imposible la personalización por intereses —el principal elemento diferenciador del producto frente a Instagram y TikTok— sin reescribir el motor de inferencia del proveedor.

Nativo a medida frente a React Native frente a SDK social de marca blanca: vista rápida
CriterioNativo a medida (JoyJet)React Native / FlutterSDK social de marca blanca
Precisión del Radar de proximidad geográficaCoreLocation nativo + Foreground Service: precisión totalEl puente JS añade latencia; escaneo en segundo plano limitadoNo disponible
Algoritmo de clasificación del feedTotalmente a medida: etiquetas de interés, afinidad, antigüedad, señal de JJLikeBackend a medida posible; la capa de interfaz es multiplataformaAlgoritmo fijo del proveedor: no configurable
Mensajería en tiempo realWebSocket nativo + BGAppRefresh: entrega en <100 msAceptable; depende de la calidad del módulo nativoIncluida en el SDK, con personalización limitada
Economía virtual (monedas, regalos)Máquina de estados totalmente a medida + StoreKit / Play BillingRequiere un backend a medida en cualquier casoNo admitida
Control del cumplimiento de App StoreDirecto: se controla cada solicitud de permiso y cada etiquetaParcial: el envoltorio puede provocar un escrutinio adicionalControlado por el proveedor: los retrasos de revisión se propagan
Procesamiento en segundo planoBGAppRefreshTask / ForegroundService nativos: fiableLimitado por la suspensión del entorno de ejecución JSVaría según el SDK
Coste de propiedad a largo plazoCoste inicial más alto; sin licencias de SDK ni dependencia del proveedorCoste inicial más bajo; mantenimiento de una base de código compartidaCoste inicial bajo; coste continuo elevado de licencias y restricciones

Referencias de la plataforma: Apple CoreLocation, servicios en primer plano de Android, framework Apple BackgroundTasks.

Feed de contenido de JoyJet: descubrimiento de fotos y vídeos curado por intereses en iOS

Desarrollo para iOS: feed en SwiftUI, Stories y Radar con CoreLocation

El cliente de iOS está construido íntegramente en Swift, con SwiftUI para la capa de interfaz y UIKit para las superficies críticas para el rendimiento —en concreto el feed de vídeo de desplazamiento infinito, donde el pre-roll de AVPlayer y el momento de reutilización de las celdas exigen un control directo que los stacks perezosos de SwiftUI aún no ofrecen de forma fiable a escala—. El feed de contenido obtiene del servidor lotes paginados ya clasificados, guarda en memoria la ventana activa y precarga el siguiente lote cuando el usuario está a tres celdas del final. Las etiquetas de interés elegidas en la incorporación alimentan el modelo de clasificación inicial; las señales de JJLike y de compartir lo refinan de forma continua sin exigir un flujo explícito de reconfiguración.

La función Radar funciona con CoreLocation y un monitor de cambios significativos de ubicación para las actualizaciones en segundo plano: una alternativa de bajo consumo al sondeo continuo del GPS que sigue manteniendo actualizada la lista de usuarios cercanos a medida que se mueve el dispositivo. Las coordenadas del usuario se cuantifican en una cuadrícula gruesa en el propio dispositivo antes de la transmisión, de modo que el servidor nunca recibe posiciones GPS en bruto: recibe identificadores de celda. El emparejamiento se ejecuta en el servidor contra otros identificadores de celda activos, con la coincidencia de intereses como criterio secundario de ordenación. Los perfiles que devuelve el Radar muestran nombre, intereses y franja de distancia («a menos de 500 m / 1 km / 5 km»), nunca coordenadas exactas. El mismo cliente de iOS gestiona el desarrollo de aplicaciones móviles en toda la superficie de funciones: feed, Radar, lista de hilos de chat, edición del perfil, incorporación y flujo de suscripción a JJPremium.

Pantalla de suscripción JJPremium de JoyJet: desbloqueo de funciones avanzadas en Android

Desarrollo para Android: Kotlin, servicios en primer plano y mensajería siempre activa

El cliente de Android está escrito en Kotlin con Jetpack Compose para la interfaz y un servicio en primer plano para la mensajería persistente y la sincronización del Radar en segundo plano. El servicio en primer plano es obligatorio: en las familias de dispositivos Samsung, Xiaomi, OnePlus y Pixel, los optimizadores de batería agresivos matan en pocos minutos los servicios que solo se ejecutan en segundo plano. El servicio en primer plano muestra una notificación mínima que mantiene vivo el proceso a lo largo de los ciclos del modo Doze, y la sincronización del Radar aprovecha la misma ventana de proceso para no despertar el dispositivo dos veces. WorkManager gestiona las operaciones no urgentes —limpieza de caché, vaciado de telemetría, renovación del token de push— con una semántica de reintento con espera que respeta los estados de ahorro de batería de Android 10 a Android 14.

La mensajería está construida sobre WebSocket con reconexión automática. En Android, la lógica de reconexión se ejecuta dentro del servicio en primer plano, de modo que una breve pérdida de conectividad (traspaso del operador entre Wi-Fi y LTE, habitual en los despliegues urbanos de EE. UU. y la UE) se recupera en menos de dos segundos sin intervención del usuario. El orden de los mensajes usa ID de secuencia monótonos asignados por el servidor en lugar de marcas de tiempo del cliente, una fuente habitual de errores de orden en el chat distribuido que eliminamos en la fase de arquitectura. La misma base de código de Android sirve a toda la paridad de funciones de ingeniería para iOS y Android: feed, Radar, Stories, JJPremium, market, estadísticas de JJFans y el flujo de incorporación de varias pantallas.

Marketplace de monedas virtuales de JoyJet: regalos y economía de mercado en iOS

Arquitectura centrada en la privacidad: ubicación efímera, chat cifrado y enfoque sin registros

El enfoque de privacidad declarado de JoyJet —sin recopilación persistente de datos de usuario— orientó la arquitectura desde el primer sprint. Los datos de ubicación se cuantifican en el dispositivo antes de salir del teléfono (celdas de cuadrícula gruesa, no coordenadas GPS), de modo que el servidor nunca ve la posición exacta del usuario. Los tokens de sesión son de corta duración y se rotan cada vez que la app pasa a primer plano; el servicio de emparejamiento del Radar solo trabaja con las celdas de cuadrícula gruesa presentes en la sesión actual y no construye un historial de ubicaciones. Los mensajes de chat se almacenan en el servidor para la sincronización del historial, pero se identifican con ID de mensaje acotados a la sesión; el esquema se diseñó desde el primer día para permitir conversaciones en modo efímero cuyo historial se descarta al terminar la sesión, sin una migración retroactiva.

Las notificaciones push de mensajes usan APNs (iOS) y FCM (Android) con cargas solo de notificación: el cuerpo de la notificación se construye en el cliente tras descifrar la carga del servicio de mensajería, de modo que el proveedor de notificaciones nunca ve el contenido de los mensajes. La declaración de privacidad de App Store del desarrollador, de cero recopilación de datos, refleja esta arquitectura: en el desarrollo no se incluyó ningún SDK de analítica, ningún informador de fallos con datos personales, ninguna red publicitaria ni ninguna integración con intermediarios de datos de terceros. Este enfoque es compatible tanto con los requisitos del RGPD en la Unión Europea como con los requisitos de la CCPA / CPRA en California y otros estados de EE. UU.

Enfoque de cumplimiento: alineado con el RGPD · preparado para ISO 27001 · SOC 2 Type II en curso · apto para HIPAA · CCPA contemplada.

Metodología de entrega

Un desarrollo en cinco fases que llevó a JoyJet de la especificación del producto a producción en iOS, Android y un backend en tiempo real.

Fase 1

Descubrimiento y arquitectura

Taxonomía de funciones (feed, Radar, chat, economía), mapeo del flujo de datos de privacidad, enfoque RGPD + CCPA, auditoría de capacidades de la plataforma (CoreLocation frente a ForegroundService de Android), diseño del esquema de la API.

Fase 2

Desarrollo de la plataforma central

Cliente iOS en Swift / SwiftUI y cliente Android en Kotlin / Jetpack Compose: incorporación, selección de intereses, feed de contenido con clasificación, perfiles de usuario, mensajería básica por WebSocket.

Fase 3

Radar y sistemas en tiempo real

Motor de proximidad geográfica con CoreLocation + Foreground Service, cuantificación en cuadrícula gruesa, servicio de emparejamiento por coincidencia de intereses, mensajería siempre activa en primer plano, Stories, notificaciones push con APNs + FCM.

Fase 4

Economía y premium

Suscripción JJPremium mediante Apple StoreKit + Google Play Billing, flujos de compra de monedas virtuales, marketplace de regalos, pagos a creadores de JJFans, herramientas de moderación de contenido, panel de administración.

Fase 5

Lanzamiento e iteración

Envío a App Store y Google Play en las tiendas de EE. UU. y la UE, QA multilingüe (EN / RU / ES / ZH-TW), monitorización de sesiones sin fallos, rotación de guardias, framework de pruebas A/B de la clasificación del feed.

JJPremium, monedas, regalos y la economía virtual

El modelo de monetización de JoyJet va más allá de una simple suscripción. JJPremium desbloquea filtros avanzados del feed, descubrimiento de alcance ampliado con el Radar, cargas de medios en mayor resolución y prioridad en la clasificación dentro de los resultados del Radar de otros usuarios. La facturación dentro de la app pasa por Apple StoreKit en iOS y Google Play Billing en Android, con validación de recibos en el servidor contra los endpoints de verificación de ambas tiendas y un único registro de derechos de acceso por usuario que resuelve el estado de la suscripción entre dispositivos y reinstalaciones. Además de la suscripción, una economía de monedas virtuales permite a los usuarios comprar monedas mediante compra dentro de la app y gastarlas en regalos virtuales enviados en el chat: una capa de señal social que impulsa la participación sin depender de la publicidad. El marketplace de regalos se implementa como un catálogo respaldado por PostgreSQL con caché de Redis para la lista de artículos populares, y el envío de un regalo es un commit en dos fases (two-phase commit): el descuento de monedas y la entrega del regalo son atómicos, de modo que una conexión WebSocket interrumpida no puede provocar un doble cobro ni la pérdida de un regalo. JJFans, una capa de economía de creadores, permite a los usuarios ganar monedas de los seguidores más implicados, con un sistema de pagos diseñado para admitir en el futuro la retirada en moneda de curso legal mediante la integración con un procesador de pagos. Toda la economía se construyó desde cero pensando en la extensibilidad: añadir nuevos SKU de monedas, tipos de regalo o niveles premium requiere un cambio de configuración y no una versión de código.

Lanzamiento en EE. UU. y la UE: App Store, Google Play y legislación regional de privacidad

JoyJet se lanzó en Apple App Store y Google Play con tiendas activas en Estados Unidos, la Unión Europea y el Reino Unido. La versión multilingüe —inglés, ruso, español y chino tradicional— permite que la app atienda a usuarios de California, Nueva York, Texas y Florida en EE. UU., y a usuarios de Alemania, Francia, Países Bajos, Irlanda y Suecia en la UE, sin una base de código distinta por región. Los flujos de consentimiento de privacidad se adaptan a la región: los usuarios de la UE y el EEE reciben una pantalla granular de consentimiento al estilo RGPD con interruptores separados para analítica y personalización; los usuarios de California reciben un aviso al estilo CCPA «No vender ni compartir mi información personal». Las prácticas de tratamiento de datos están alineadas con el RGPD para los usuarios europeos y con el mosaico de leyes estatales de privacidad de EE. UU.: CCPA/CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas) y la CPA de Oregón.

El backend separa los datos de usuarios de la UE y de EE. UU. en particiones de base de datos distintas con jerarquías de claves de cifrado separadas, lo que permite un futuro compromiso de residencia de datos sin una migración de esquema. El servicio de emparejamiento del Radar ejecuta workers sin estado que pueden fijarse de forma independiente a regiones de la UE o de EE. UU. Tanto la clasificación por edad de App Store (4+) como la clasificación de contenido de Google Play se calibraron para el conjunto de funciones sociales, y los flujos de denuncia y bloqueo dentro de la app —exigidos por ambas plataformas para las apps con contenido generado por los usuarios— se construyeron y revisaron como funciones de primer orden y no como añadidos posteriores. El cumplimiento de la protección de datos de la UE y las obligaciones de la CCPA de California están documentados en la política de privacidad dentro de la app y en la plantilla de acuerdo de tratamiento de datos del servidor facilitada al cliente para su DPA con los subencargados de la UE.

Stack tecnológico y hoja de ruta

Swift SwiftUI UIKit (feed de vídeo) Kotlin Jetpack Compose Node.js WebSocket / Socket.io PostgreSQL Redis Apple StoreKit Google Play Billing APNs + FCM CoreLocation Android Foreground Services AWS S3 + CloudFront Docker GitHub Actions Crashlytics

La hoja de ruta activa de desarrollo de software a medida para JoyJet incluye una capa de videollamada para los hilos de chat (WebRTC), una señal de «no me gusta» y de sentimiento del contenido para refinar la clasificación del feed, compatibilidad con geoetiquetas en las publicaciones, un formato de publicación comercial para cuentas de empresa y una función de emisión en directo (JJBroadcast). Está previsto ampliar el nivel premium con una herramienta de promoción de publicaciones y un panel de analítica de creadores más rico que muestre el crecimiento de seguidores, las tasas de interacción y los ingresos por regalos por cohorte. Los planes de infraestructura incluyen trasladar el servicio de emparejamiento del Radar a un microservicio dedicado con un SLO inferior a 50 ms y migrar el almacenamiento multimedia a una topología de CDN multirregión para cumplir la residencia de datos de la UE.

Preguntas frecuentes

¿Cuánto cuesta construir una app de redes sociales como Instagram?
Un MVP de app social con feed de contenido, perfiles de usuario, mensajería básica y envío a App Store + Google Play suele costar $120k–$300k. Añadir descubrimiento por proximidad geográfica (Radar), mensajería grupal en tiempo real, Stories y una economía virtual (monedas, regalos, suscripción) lleva una plataforma completa a $300k–$700k. Los principales factores de coste son la infraestructura en tiempo real, el algoritmo de clasificación del feed y las herramientas de moderación necesarias para el contenido generado por los usuarios en las jurisdicciones de EE. UU. y la UE.
¿Qué diferencia al Radar de proximidad geográfica de las funciones de ubicación habituales?
Las funciones de ubicación habituales (check-ins, mapas, seguimiento de entregas) funcionan con instantáneas iniciadas por el usuario. Un Radar de proximidad ejecuta un escaneo continuo en segundo plano: empareja a los usuarios cercanos con perfiles de intereses, aplica franjas de distancia respetuosas con la privacidad y muestra los resultados en tiempo real sin exponer coordenadas GPS en bruto. Construirlo correctamente en iOS exige CoreLocation con gestión de permisos de uso permanente y BGAppRefreshTask; en Android exige un servicio en primer plano para sobrevivir a los optimizadores de batería en las familias de dispositivos Samsung, Xiaomi y Pixel.
¿Cómo se construye la mensajería en tiempo real en una plataforma social?
La mensajería social de nivel de producción suele usar WebSocket como capa de transporte (una conexión persistente por cliente, entrega en menos de 100 ms), con Redis pub/sub o un bróker de mensajes dedicado que gestiona la difusión a varios dispositivos. El historial de mensajes vive en PostgreSQL o en un almacén de documentos; los contadores de no leídos y las señales de presencia se guardan en caché en Redis. El cifrado de extremo a extremo para los mensajes directos exige la gestión de claves en el cliente y complica la moderación en el servidor: una contrapartida que debe decidirse en la fase de arquitectura, no añadirse después.
¿Cuáles son las reglas de App Store para las apps sociales con contenido generado por los usuarios?
Apple y Google exigen a las apps sociales que dispongan de denuncia y bloqueo dentro de la app que funcionen, una restricción por edad para las funciones clasificadas 17+ o 18+, avisos de privacidad claros en las etiquetas de privacidad (nutrition labels) y en la política de privacidad y, para las apps con funciones de citas o de proximidad, un escrutinio adicional en la revisión. El cumplimiento del RGPD para los usuarios de la UE exige un mecanismo granular de consentimiento; el cumplimiento de la CCPA para los usuarios de California exige un aviso «No vender ni compartir mi información personal». No construir esto antes del envío es la causa más común de rechazo en App Store de las plataformas sociales.
¿Cuánto se tarda en construir una plataforma social en iOS y Android?
Un MVP bien enfocado con feed de contenido, perfiles, chat básico y envío a ambas tiendas suele llevar 16–24 semanas. Añadir el Radar de proximidad geográfica, Stories y un nivel de suscripción suma 8–12 semanas. Una economía virtual completa (monedas, regalos, marketplace, pagos a creadores) requiere otras 8–10 semanas de trabajo de backend y facturación. Las herramientas de moderación y los paneles de administración se subestiman con frecuencia: presupueste al menos 4–6 semanas para una superficie de operaciones de contenido de nivel de producción.

Cree una plataforma social como esta: hable con nosotros

Si está planificando una app social, una plataforma de comunidad con funciones de proximidad geográfica o un producto de economía de creadores para públicos de EE. UU. y la UE, hemos entregado este stack de principio a fin y podemos acortar de forma notable el plazo de desarrollo. El producto en producción está disponible en joy-jet.com en iOS y Android, y el equipo de ingeniería que lo respalda forma parte de YuSMP Group. Trabajamos a precio cerrado para MVP bien acotados y con equipos de desarrollo dedicados para la entrega continua, con jornada CET y una ventana garantizada de solapamiento con la costa este de EE. UU. (9:00–13:00 ET) para reuniones diarias, demos y respuesta a incidencias.

Reservar una llamada inicial Ver servicios de desarrollo móvil

Compartir este caso

LinkedIn X

Planifique un desarrollo similar

Reservar una llamada inicial

Pedir propuesta

Cuéntenos algunos detalles y un consultor sénior le responderá en un día hábil.