Passer au contenu principal

Étude de cas · Réseaux sociaux · Tech grand public

Développement de JoyJet : une plateforme sociale avec géo-radar, messagerie en temps réel et économie virtuelle pour iOS et Android

Publié le · Updated · By YuSMP Group Engineering

Comment nous avons livré une plateforme sociale en production — App Store et Google Play, active aux États-Unis, en UE et au-delà — combinant un fil de contenu personnalisé par centres d'intérêt, un Radar de découverte de personnes par géo-proximité, une messagerie chiffrée et une économie virtuelle complète de pièces, cadeaux et abonnements premium.

SecteurSocial Media · Consumer Tech
Année du projet2022–present
Type d’engagementFixed price + ongoing feature delivery
JoyJet social platform — Radar geo-discovery screen on iOS

Le brief — une plateforme sociale qui va plus loin qu'un fil d'actualités

L'équipe produit JoyJet voulait une plateforme sociale allant plus loin qu'un fil de photos et vidéos. L'insight central était que la découverte — trouver des personnes intéressantes, pas seulement du contenu — était mal servie par les applications sociales existantes. Les SDK sociaux sur étagère et les plateformes communautaires white-label offraient des fils et de la messagerie mais n'avaient aucun cadre pour la correspondance par géo-proximité en temps réel, et aucun ne prenait en charge une économie virtuelle en couches pouvant récompenser à la fois les créateurs et les membres engagés de la communauté. Nous avons développé JoyJet depuis les principes premiers comme une application iOS et Android native : une plateforme de contenu avec un fil personnalisé par centres d'intérêt, un Radar qui surface les personnes proches correspondant à vos intérêts, une messagerie chiffrée rapide, des Stories et un niveau d'abonnement JJPremium appuyé sur un marché de pièces et de cadeaux. Le résultat est un produit social disponible sur App Store et Google Play, en anglais, russe, espagnol et chinois traditionnel pour des audiences aux États-Unis, dans l'Union européenne et au-delà.

Points clés du projet

Fil de contenu personnalisé par centres d'intérêt Découverte géo-proximité Radar Messagerie chiffrée en temps réel Stories & JJVideo Abonnement JJPremium Monnaie virtuelle, cadeaux & marketplace Économie créateurs JJFans App Store + Google Play actifs · 4 langues

Chiffres clés

Un aperçu de ce que la réalisation JoyJet a permis de livrer sur iOS et Android au cours de son premier cycle de production.

2plateformes natives — iOS et Android, codebases entièrement séparées optimisées par plateforme
4types de contenu — Vidéos, Photos, Stories et JJLikes avec classement du fil par centres d'intérêt
4langues au lancement — anglais, russe, espagnol et chinois traditionnel
<100mslivraison de messages habituelle via connexion persistante WebSocket sur LTE mobile et Wi-Fi
20+écrans d'interface distincts couvrant fil, Radar, chat, profil, premium, marché et onboarding
16–24 sem.délai de livraison habituel pour un MVP de plateforme sociale comparable sur les deux stores
JoyJet Radar screen — geo-proximity people discovery with interest filters on iOS

Pourquoi du natif sur mesure plutôt que des SDK sociaux white-label

Aucune plateforme sociale sur étagère — Sharetribe, Circle, Mighty Networks ou les white-labels communautaires — ne combine un fil de contenu basé sur les intérêts, un radar de géo-proximité en temps réel, une messagerie WebSocket et une économie de pièces virtuelles dans un seul package mobile natif. Les SDK existants enferment les équipes dans des schémas fixes et des templates d'interface, ce qui rend la correspondance de localisation continue en arrière-plan du Radar techniquement impossible dans leurs modèles de permission et de cycle de vie. S'appuyer sur un SDK social pour JoyJet aurait signifié le forker substantiellement — à ce stade, le SDK n'apporte plus de levier et toutes ses hypothèses deviennent des handicaps. Nous avons choisi une réalisation native from scratch sur Swift / SwiftUI pour iOS et Kotlin / Jetpack Compose pour Android pour que chaque fonctionnalité — Radar, classement du fil, pièces, push — soit détenue de bout en bout sans contraintes fournisseur.

L'algorithme du fil a notamment nécessité un modèle de scoring sur mesure : le contenu est classé par une combinaison de chevauchement de tags d'intérêt, d'affinité de compte, de déclin par ancienneté et de poids du signal JJLike. Cette logique de scoring s'exécute côté serveur dans un service Node.js appuyé sur des ensembles triés Redis pour la mise en cache du contenu populaire, avec PostgreSQL comme source de vérité pour les tags d'intérêt et l'historique d'engagement. L'algorithme fixe d'une solution white-label aurait rendu la personnalisation par centres d'intérêt — le différenciateur central du produit face à Instagram et TikTok — impossible sans réécrire le moteur d'inférence du fournisseur.

Natif sur mesure vs React Native vs SDK social white-label — en un coup d'œil
DimensionNatif sur mesure (JoyJet)React Native / FlutterSDK social white-label
Précision du Radar géo-proximitéCoreLocation natif + Foreground Service — pleine précisionLe pont JS ajoute de la latence ; scan arrière-plan limitéNon disponible
Algorithme de classement du filEntièrement sur mesure — tags d'intérêt, affinité, ancienneté, signal JJLikeBackend sur mesure possible ; couche UI cross-platformAlgorithme fixe du fournisseur — non configurable
Messagerie en temps réelWebSocket natif + BGAppRefresh — livraison <100msAcceptable ; dépend de la qualité du module natifIntégré au SDK, personnalisation limitée
Économie virtuelle (pièces, cadeaux)Machine d'état entièrement sur mesure + StoreKit / Play BillingBackend sur mesure requis de toute façonNon pris en charge
Contrôle de conformité App StoreDirect — propriété de chaque demande de permission et labelPartiel — le wrapper peut déclencher un examen supplémentaireContrôlé par le fournisseur — les délais de révision se propagent
Traitement en arrière-planBGAppRefreshTask / ForegroundService natifs — fiableLimité par la suspension du runtime JSVariable selon le SDK
Coût de propriété à long termeRéalisation initiale plus élevée ; zéro licence SDK ou verrouillageInitial plus faible ; maintenance codebase partagéeInitial faible ; coût de licence et de contraintes continu élevé

Références : Apple CoreLocation, Android Foreground Services, Apple BackgroundTasks framework.

JoyJet content feed — interest-curated photo and video discovery on iOS

Build iOS — Fil SwiftUI, Stories et Radar sur CoreLocation

Le client iOS est entièrement développé en Swift avec SwiftUI pour la couche d'interface et UIKit pour les surfaces critiques en performance — en particulier le fil vidéo à défilement infini, où le pré-chargement AVPlayer et le timing de réutilisation des cellules nécessitent un contrôle direct que les piles lazy de SwiftUI ne fournissent pas encore de manière fiable à l'échelle. Le fil de contenu récupère des lots classés paginés côté serveur, met en cache le viewport actif en mémoire et précharge le lot suivant lorsque l'utilisateur est à moins de trois cellules du bas. Les tags d'intérêt choisis lors de l'onboarding alimentent le modèle de classement initial ; les signaux JJLike et de partage le raffinent continuellement sans nécessiter un flux de reconfiguration explicite.

La fonctionnalité Radar s'exécute sur CoreLocation avec un moniteur Significant Location Change pour les mises à jour en arrière-plan — une alternative économe en énergie au sondage GPS continu qui maintient tout de même la liste des utilisateurs proches à jour à mesure que l'appareil se déplace. Les coordonnées de l'utilisateur sont quantifiées en une grille grossière sur l'appareil avant transmission, de sorte que le serveur ne reçoit jamais de positions GPS brutes : il reçoit des identifiants de cellule. La correspondance s'exécute côté serveur contre d'autres identifiants de cellule actifs, avec le chevauchement d'intérêts comme tri secondaire. Les profils retournés par le Radar affichent le nom, les intérêts et la bande de distance (« dans un rayon de 500 m / 1 km / 5 km ») — jamais les coordonnées exactes. Le même client iOS gère le développement d'applications mobiles sur toute la surface de fonctionnalités : fil, Radar, liste des fils de discussion, modification de profil, onboarding et flux d'abonnement JJPremium.

JoyJet JJPremium subscription screen — unlock advanced features on Android

Build Android — Kotlin, services foreground et messagerie permanente

Le client Android est développé en Kotlin avec Jetpack Compose pour l'interface et un service foreground pour la messagerie persistante et la synchronisation arrière-plan du Radar. Le service foreground est obligatoire : sur les familles Samsung, Xiaomi, OnePlus et Pixel, les optimiseurs de batterie agressifs tuent les services uniquement en arrière-plan en quelques minutes. Le service foreground affiche une notification minimale qui maintient le processus en vie à travers les cycles du mode Doze, et la synchronisation Radar se greffe sur la même fenêtre de processus pour éviter de réveiller l'appareil deux fois. WorkManager gère les opérations non urgentes — nettoyage du cache, vidage de télémétrie, rafraîchissement du token push — avec une sémantique de backoff respectant les états d'économie de batterie sur Android 10 à Android 14.

La messagerie est développée sur WebSocket avec reconnexion automatique. Sur Android, la logique de reconnexion s'exécute à l'intérieur du service foreground, de sorte qu'une brève perte de connectivité (changement d'opérateur entre Wi-Fi et LTE, courant dans les déploiements urbains US et UE) se rétablit en moins de deux secondes sans action de l'utilisateur. L'ordre des messages utilise des ID de séquence monotones assignés par le serveur plutôt que des horodatages clients — source habituelle de bugs d'ordonnancement dans le chat distribué, que nous avons éliminée au stade de l'architecture. La même codebase Android assure toute la parité de fonctionnalités ingénierie iOS et Android : fil, Radar, Stories, JJPremium, marché, statistiques JJFans et le flux d'onboarding multi-écrans.

JoyJet virtual coins marketplace — gifts and market economy on iOS

Architecture privacy-first — localisation éphémère, chat chiffré, posture zéro-log

La posture de confidentialité déclarée de JoyJet — aucune collecte persistante de données utilisateur — a informé l'architecture dès le premier sprint. Les données de localisation sont quantifiées sur l'appareil avant de le quitter (cellules de grille grossière, pas de coordonnées GPS), de sorte que le serveur ne voit jamais la position précise d'un utilisateur. Les tokens de session sont de courte durée et renouvelés à chaque mise au premier plan de l'application ; le service de correspondance Radar ne travaille qu'avec les cellules de grille grossière présentes dans la session actuelle et ne construit pas d'historique de localisation. Les messages de chat sont stockés côté serveur pour la synchronisation de l'historique mais sont identifiés par des ID de message à portée de session ; le schéma a été conçu dès le premier jour pour permettre des conversations en mode éphémère où l'historique est supprimé à la fin de la session, sans migration rétroactive.

Les notifications push pour les messages utilisent APNs (iOS) et FCM (Android) avec des payloads notification uniquement : le corps de la notification est construit sur le client après déchiffrement du payload depuis le service de messagerie, de sorte que le fournisseur de notifications ne voit jamais le contenu des messages. La déclaration de confidentialité App Store du développeur — zéro collecte de données — reflète cette architecture : aucun SDK analytique, aucun rapporteur de plantages avec données personnelles, aucun réseau publicitaire et aucune intégration de courtier de données tiers n'ont été inclus dans la réalisation. Cette posture est compatible avec les exigences du RGPD dans l'Union européenne et avec les exigences CCPA / CPRA en Californie et dans les autres états américains.

Posture de conformité : Aligné RGPD · Prêt ISO 27001 · SOC 2 Type II en cours · Compatible HIPAA · CCPA reconnu.

Méthodologie de livraison

Une réalisation en cinq phases qui a conduit JoyJet de la spécification produit à la production sur iOS, Android et un backend temps réel.

Phase 1

Découverte & architecture

Taxonomie des fonctionnalités (fil, Radar, chat, économie), cartographie des flux de données de confidentialité, posture RGPD + CCPA, audit des capacités plateformes (CoreLocation vs Android ForegroundService), conception du schéma API.

Phase 2

Développement de la plateforme principale

Client iOS Swift / SwiftUI et client Android Kotlin / Jetpack Compose : onboarding, sélection des centres d'intérêt, fil de contenu avec classement, profils utilisateurs, messagerie de base via WebSocket.

Phase 3

Radar & systèmes temps réel

Moteur géo-proximité CoreLocation + Foreground Service, quantification en grille grossière, service de correspondance par chevauchement d'intérêts, messagerie foreground permanente, Stories, notifications push via APNs + FCM.

Phase 4

Économie & premium

Abonnement JJPremium via Apple StoreKit + Google Play Billing, flux d'achat de pièces virtuelles, marché de cadeaux, reversements créateurs JJFans, outils de modération de contenu, tableau de bord admin.

Phase 5

Lancement & itération

Soumission App Store + Google Play sur les storefronts US et UE, QA multilingue (EN / RU / ES / ZH-TW), surveillance des sessions sans plantage, rotation d'astreinte, cadre A/B de classement du fil.

JJPremium, pièces, cadeaux et l'économie virtuelle

Le modèle de monétisation de JoyJet va au-delà d'un simple abonnement. JJPremium déverrouille des filtres avancés du fil, la découverte Radar en portée étendue, des téléchargements de médias en résolution supérieure et un classement prioritaire dans les résultats Radar des autres. La facturation intégrée passe par Apple StoreKit sur iOS et Google Play Billing sur Android, avec validation des reçus côté serveur contre les endpoints de vérification des deux stores et un seul enregistrement de droits par utilisateur résolvant l'état de l'abonnement sur les appareils et les réinstallations. Au-delà de l'abonnement, une économie de pièces virtuelles permet aux utilisateurs d'acheter des pièces via achat intégré et de les dépenser en cadeaux virtuels envoyés dans le chat — une couche de signal social qui stimule l'engagement sans recourir à la publicité. Le marché des cadeaux est implémenté comme un catalogue appuyé sur PostgreSQL avec cache Redis pour la liste des articles populaires, et le flux d'envoi de cadeau est un commit en deux phases : la déduction de pièces et la livraison du cadeau sont atomiques, de sorte qu'une connexion WebSocket interrompue ne peut pas entraîner une double facturation ou un cadeau perdu. JJFans — une couche d'économie créateur — permet aux utilisateurs de gagner des pièces auprès de leurs abonnés engagés, avec un système de reversement conçu pour prendre en charge de futurs retraits en monnaie fiduciaire via intégration de processeur de paiement. L'ensemble de l'économie a été développé from scratch en gardant l'extensibilité à l'esprit : l'ajout de nouveaux SKU de pièces, de types de cadeaux ou de niveaux premium nécessite une modification de configuration, pas une release de code.

Lancement aux États-Unis et dans l’UE — App Store, Google Play et réglementation locale

JoyJet s'est lancé sur Apple App Store et Google Play avec des storefronts actifs aux États-Unis, dans l'Union européenne et au Royaume-Uni. La version multilingue — anglais, russe, espagnol et chinois traditionnel — signifie que l'application sert les utilisateurs en Californie, New York, Texas et Floride aux États-Unis, et en Allemagne, France, Pays-Bas, Irlande et Suède dans l'UE, sans codebase séparée par région. Les flux de consentement de confidentialité sont sensibles à la région : les utilisateurs dans l'UE et l'EEE reçoivent un écran de consentement granulaire conforme au RGPD avec des interrupteurs distincts pour les analyses et la personnalisation ; les utilisateurs en Californie reçoivent une divulgation conforme CCPA « Ne pas vendre ni partager mes informations personnelles ». Les pratiques de traitement des données sont alignées sur le RGPD pour les utilisateurs européens et sur le patchwork de lois étatiques américaines — CCPA/CPRA (Californie), VCDPA (Virginie), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas) et Oregon CPA.

Le backend sépare les données des utilisateurs UE et US en partitions de base de données distinctes avec des hiérarchies de clés de chiffrement séparées, permettant un futur engagement de résidence des données sans migration de schéma. Le service de correspondance Radar exécute des workers sans état pouvant être épinglés aux régions UE ou US indépendamment. La classification d'âge App Store (4+) et la classification Google Play ont toutes deux été calibrées pour l'ensemble de fonctionnalités sociales, et les flux de signalement et de blocage intégrés — requis par les deux plateformes pour les applications de contenu généré par les utilisateurs — ont été développés et révisés comme des fonctionnalités de premier plan plutôt que comme des accessoires. La conformité à la protection des données UE et les obligations CCPA californien sont documentées dans la politique de confidentialité intégrée et le modèle d'accord de traitement des données côté serveur fourni au client pour leur DPA avec les sous-traitants UE.

Stack technique et feuille de route

Swift SwiftUI UIKit (video feed) 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 feuille de route active de développement logiciel sur mesure pour JoyJet inclut une couche d'appel vidéo pour les fils de discussion (WebRTC), un signal de désapprobation et de sentiment de contenu pour l'affinement du classement du fil, le support des géo-tags pour les publications, un format de publication entreprise pour les comptes commerciaux et une fonctionnalité de diffusion en direct (JJBroadcast). Le niveau premium est prévu d'être enrichi d'un outil de promotion de publications et d'un tableau de bord analytique créateur plus riche surfaçant la croissance des abonnés, les taux d'engagement et les revenus de cadeaux par cohorte. Les plans d'infrastructure comprennent le transfert du service de correspondance Radar vers un microservice dédié avec un SLO sous 50ms et la migration du stockage média vers une topologie CDN multi-régions pour la conformité à la résidence des données UE.

Foire aux questions

Quel est le coût de développement d'une application sociale comme Instagram ?
Un MVP d'application sociale couvrant un fil de contenu, des profils utilisateurs, une messagerie de base et la soumission App Store + Google Play coûte généralement entre 120 k€ et 300 k€. L'ajout de la découverte par géo-proximité (Radar), d'une messagerie de groupe en temps réel, de Stories et d'une économie virtuelle (pièces, cadeaux, abonnement) porte une plateforme complète à 300 k€–700 k€. Les principaux postes de coût sont l'infrastructure temps réel, l'algorithme de classement du fil et les outils de modération requis pour le contenu généré par les utilisateurs dans les juridictions US et UE.
En quoi le Radar géo-proximité diffère-t-il des fonctionnalités standard basées sur la localisation ?
Les fonctionnalités de localisation standard (check-ins, cartes, suivi de livraison) fonctionnent sur des instantanés à l'initiative de l'utilisateur. Un Radar de proximité exécute un scan continu en arrière-plan — faisant correspondre les utilisateurs proches avec des profils d'intérêt, appliquant des bandes de distance respectueuses de la confidentialité et surfaçant les résultats en temps réel sans exposer les coordonnées GPS brutes. Le développer correctement sur iOS nécessite CoreLocation avec une gestion des permissions always-on et BGAppRefreshTask ; sur Android, il nécessite un service foreground pour survivre aux optimiseurs de batterie sur les familles Samsung, Xiaomi et Pixel.
Comment développer une messagerie en temps réel dans une plateforme sociale ?
La messagerie sociale de niveau production utilise généralement WebSocket comme couche de transport (connexion persistante par client, livraison sous 100ms), avec Redis pub/sub ou un broker de messages dédié gérant le fan-out vers plusieurs appareils. L'historique des messages réside dans PostgreSQL ou un magasin de documents ; les compteurs de non-lus et les signaux de présence sont mis en cache dans Redis. Le chiffrement de bout en bout pour les messages directs nécessite une gestion des clés côté client et complique la modération côté serveur — un compromis qui doit être décidé en phase d'architecture, pas ajouté rétroactivement.
Quelles sont les règles de l'App Store pour les applications sociales avec contenu généré par les utilisateurs ?
Apple et Google exigent tous deux que les applications sociales disposent de signalement et de blocage intégrés fonctionnels, d'une vérification d'âge pour les fonctionnalités cotées 17+ ou 18+, de divulgations de confidentialité claires dans les étiquettes nutritionnelles et la politique de confidentialité, et — pour les applications avec fonctionnalités de rencontres ou de proximité — d'un examen supplémentaire. La conformité RGPD pour les utilisateurs UE nécessite un mécanisme de consentement granulaire ; la conformité CCPA pour les utilisateurs californiens nécessite une divulgation « Ne pas vendre ni partager mes informations personnelles ». Ne pas développer ces éléments avant la soumission est la cause la plus courante de rejet App Store pour les plateformes sociales.
Combien de temps faut-il pour développer une plateforme sociale sur iOS et Android ?
Un MVP ciblé avec fil de contenu, profils, chat de base et soumissions aux deux stores prend généralement 16 à 24 semaines. L'ajout du Radar géo-proximité, de Stories et d'un niveau d'abonnement ajoute 8 à 12 semaines. Une économie virtuelle complète (pièces, cadeaux, marché, reversements créateurs) nécessite encore 8 à 10 semaines de travail backend et facturation. Les outils de modération et les tableaux de bord admin sont fréquemment sous-estimés — prévoir au moins 4 à 6 semaines pour une surface d'opérations de contenu de niveau production.

Créer une plateforme sociale similaire — parlons-en

Si vous planifiez une application sociale, une plateforme communautaire avec fonctionnalités de géo-proximité ou un produit d'économie créateur pour des audiences aux États-Unis et en UE, nous avons livré cette stack de bout en bout et pouvons réduire significativement le délai de développement. Le produit en production est disponible sur joy-jet.com sur iOS et Android, et l'équipe d'ingénierie qui le soutient est au sein de YuSMP Group. Nous travaillons à prix fixe pour les MVP bien définis et en équipes dédiées pour la livraison continue, avec une journée CET et un chevauchement garanti côte Est US (9 h–13 h ET) pour les points quotidiens, démonstrations et interventions.

Réserver un appel découverte Voir les services de développement mobile

Partager cette étude

LinkedIn X

Planifier un projet similaire

Réserver un appel découverte

Demander une proposition

Partagez quelques détails et un consultant senior vous répondra dans un délai d’un jour ouvrable.

Préférez-vous discuter directement ? ☎ Call +374 44 871 811 ✉ sales@yusmpgroup.com