Vai al contenuto principale

Caso di studio · Social Media · Consumer Tech

Realizzazione di JoyJet: una piattaforma social con Radar geo-proximity, chat in tempo reale ed economia virtuale per iOS e Android

Pubblicato · Aggiornato · A cura di YuSMP Group Engineering

Come abbiamo distribuito una piattaforma social in produzione — su App Store e Google Play, attiva negli Stati Uniti, nell'Unione Europea e oltre — combinando un feed di contenuti curato per interessi, un Radar geo-proximity per la scoperta di persone, messaggistica cifrata e un'economia virtuale completa di monete, regali e abbonamenti premium.

SettoreSocial Media · Consumer Tech
Anno del progetto2022–presente
Tipo di ingaggioPrezzo fisso + consegna continuativa di funzionalità
Piattaforma social JoyJet — schermata Radar geo-discovery su iOS

Il brief — una piattaforma social che va oltre il semplice feed

Il team prodotto di JoyJet voleva una piattaforma social che andasse oltre un semplice feed foto-video. L'intuizione centrale era che la discovery — trovare persone interessanti, non solo contenuti — fosse trascurata dalle app social esistenti. Gli SDK social preconfezionati e le piattaforme community white-label offrivano feed e messaggistica, ma non disponevano di alcun framework per il matching geo-proximity in tempo reale, e nessuno di essi supportava un'economia virtuale a strati in grado di premiare sia i creator sia i membri della community più coinvolti. Abbiamo realizzato JoyJet da zero come applicazione nativa per iOS e Android: una piattaforma di contenuti con un feed curato per interessi, un Radar che mostra le persone vicine in base agli interessi condivisi, messaggistica cifrata veloce, Stories e un livello di abbonamento JJPremium supportato da un marketplace di monete e regali. Il risultato è un prodotto social distribuito su App Store e Google Play, disponibile in inglese, russo, spagnolo e cinese tradizionale per il pubblico negli Stati Uniti, nell'Unione Europea e oltre.

Punti salienti del progetto

Feed di contenuti curato per interessi Radar geo-proximity discovery Messaggistica cifrata in tempo reale Stories & JJVideo Abbonamento JJPremium Monete virtuali, regali & marketplace Economia creator JJFans App Store + Google Play live · 4 lingue

I numeri del progetto

Una panoramica di ciò che la realizzazione di JoyJet ha consegnato su iOS e Android nel primo ciclo di produzione.

2piattaforme native — iOS e Android, codebase completamente separate ottimizzate per piattaforma
4tipi di contenuto — Video, Foto, Stories e JJLikes con ranking del feed basato sugli interessi
4lingue al lancio — inglese, russo, spagnolo e cinese tradizionale
<100msconsegna tipica dei messaggi tramite connessione WebSocket persistente su LTE e Wi-Fi mobile
20+schermate UI distinte: feed, Radar, chat, profilo, premium, marketplace e onboarding
16–24 sett.finestra di consegna tipica per un MVP di piattaforma social comparabile su entrambi gli store
Schermata Radar di JoyJet — discovery geo-proximity di persone con filtri per interessi su iOS

Perché scegliere il nativo personalizzato anziché gli SDK social white-label

Nessuna piattaforma social preconfezionata — Sharetribe, Circle, Mighty Networks o i community white-label — combina un feed di contenuti basato sugli interessi, un radar geo-proximity in tempo reale, messaggistica WebSocket e un'economia di monete virtuali in un unico pacchetto mobile nativo. Gli SDK esistenti vincolano i team a schemi fissi e template UI, rendendo tecnicamente impossibile il matching continuo in background del Radar all'interno dei loro modelli di permessi e lifecycle. Costruire JoyJet sopra un SDK social avrebbe comportato una fork sostanziale: a quel punto l'SDK non offre alcuna leva e tutte le sue assunzioni diventano vincoli. Abbiamo scelto una build nativa da zero su Swift / SwiftUI per iOS e Kotlin / Jetpack Compose per Android, così ogni funzionalità — Radar, ranking del feed, monete, push — è di nostra proprietà end-to-end, senza vincoli di vendor.

L'algoritmo del feed richiedeva in particolare un modello di scoring personalizzato: i contenuti vengono classificati in base a una combinazione di sovrapposizione di tag di interesse, affinità con l'account, decadimento per recency e peso del segnale JJLike. Questa logica di scoring gira server-side in un servizio Node.js supportato da Redis sorted set per la cache dei contenuti più caldi, con PostgreSQL come fonte di verità per i tag di interesse e la cronologia degli engagement. L'algoritmo fisso di una soluzione white-label avrebbe reso impossibile la personalizzazione per interessi — il differenziatore centrale del prodotto rispetto a Instagram e TikTok — senza riscrivere il motore di inferenza del vendor.

Nativo personalizzato vs React Native vs SDK social white-label — confronto rapido
DimensioneNativo personalizzato (JoyJet)React Native / FlutterSDK social white-label
Precisione Radar geo-proximityCoreLocation nativo + Foreground Service — precisione completaIl bridge JS aggiunge latenza; scansione background limitataNon disponibile
Algoritmo di ranking del feedCompletamente personalizzato — tag di interesse, affinità, recency, segnale JJLikeBackend personalizzato possibile; layer UI cross-platformAlgoritmo fisso del vendor — non configurabile
Messaggistica in tempo realeWebSocket nativo + BGAppRefresh — consegna <100msAccettabile; dipende dalla qualità del modulo nativoIntegrato nell'SDK, personalizzazione limitata
Economia virtuale (monete, regali)State machine completamente personalizzata + StoreKit / Play BillingBackend personalizzato necessario in ogni casoNon supportata
Controllo conformità App StoreDiretto — ogni richiesta di permesso ed etichetta è di nostra proprietàParziale — il wrapper può attirare ulteriore attenzione in fase di reviewControllato dal vendor — i ritardi nella review si propagano
Elaborazione in backgroundBGAppRefreshTask / ForegroundService nativo — affidabileLimitato dalla sospensione del runtime JSVaria a seconda dell'SDK
Costo di ownership a lungo termineBuild iniziale più elevata; zero licenze SDK o vendor lock-inBuild iniziale inferiore; manutenzione codebase condivisaBassa inizialmente; licenze continue e costi di vincolo elevati

Platform references: Apple CoreLocation, Android Foreground Services, Apple BackgroundTasks framework.

Feed di contenuti JoyJet — discovery di foto e video curata per interessi su iOS

Build iOS — feed SwiftUI, Stories e Radar su CoreLocation

Il client iOS è realizzato interamente in Swift con SwiftUI per il layer UI e UIKit per le superfici performance-critical — in particolare il feed video a scorrimento infinito, dove il pre-roll di AVPlayer e i tempi di riutilizzo delle celle richiedono un controllo diretto che i lazy stack di SwiftUI non forniscono ancora in modo affidabile a scala. Il feed di contenuti recupera batch classificati e paginati lato server, mantiene il viewport attivo in memoria e pre-carica il batch successivo quando l'utente si trova a tre celle dalla fine. I tag di interesse scelti durante l'onboarding inizializzano il modello di ranking; i segnali JJLike e di condivisione lo affinano continuamente senza richiedere un flusso di riapertura esplicito.

La funzione Radar gira su CoreLocation con un monitor Significant Location Change per gli aggiornamenti in background — un'alternativa energy-efficient al polling GPS continuo che mantiene comunque aggiornata la lista degli utenti vicini al movimento del dispositivo. Le coordinate dell'utente vengono quantizzate in una griglia approssimativa sul dispositivo prima della trasmissione, così il server non riceve mai posizioni GPS grezze: riceve identificatori di cella. Il matching viene eseguito lato server rispetto agli altri identificatori di cella attivi, con la sovrapposizione degli interessi come ordinamento secondario. I profili restituiti dal Radar mostrano nome, interessi e fascia di distanza («entro 500 m / 1 km / 5 km») — mai le coordinate esatte. Lo stesso client iOS gestisce lo sviluppo di app mobile sull'intera superficie funzionale: feed, Radar, lista thread di chat, modifica del profilo, onboarding e flusso di abbonamento JJPremium.

Schermata abbonamento JJPremium di JoyJet — sblocco funzionalità avanzate su Android

Build Android — Kotlin, foreground service e messaggistica always-on

Il client Android è scritto in Kotlin con Jetpack Compose per la UI e un foreground service per la messaggistica persistente e la sincronizzazione in background del Radar. Il foreground service è obbligatorio: su Samsung, Xiaomi, OnePlus e Pixel, gli ottimizzatori aggressivi della batteria terminano i servizi in sola esecuzione in background nel giro di minuti. Il foreground service mostra una notifica minimale che mantiene vivo il processo attraverso i cicli della modalità Doze, e la sincronizzazione del Radar si aggancia alla stessa finestra di processo per evitare di svegliare il dispositivo due volte. WorkManager gestisce le operazioni non urgenti — pulizia della cache, flush della telemetria, aggiornamento del token push — con semantica di backoff che rispetta gli stati di risparmio energetico da Android 10 ad Android 14.

La messaggistica è costruita su WebSocket con riconnessione automatica. Su Android, la logica di riconnessione gira all'interno del foreground service, quindi una breve interruzione della connettività (handoff del carrier tra Wi-Fi e LTE, comune nelle aree urbane statunitensi ed europee) si recupera in meno di due secondi senza alcuna azione dell'utente. L'ordinamento dei messaggi utilizza ID di sequenza monotonica assegnati dal server anziché timestamp del client — una fonte comune di bug nell'ordinamento della chat distribuita, eliminata in fase di architettura. Lo stesso codebase Android garantisce la parità di funzionalità per tutti i prodotti di sviluppo iOS e Android: feed, Radar, Stories, JJPremium, marketplace, statistiche JJFans e flusso di onboarding multi-schermata.

Marketplace di monete virtuali JoyJet — regali ed economia di mercato su iOS

Architettura privacy-first — localizzazione effimera, chat cifrata, postura no-log

La postura privacy dichiarata di JoyJet — nessuna raccolta persistente dei dati utente — ha influenzato l'architettura fin dal primo sprint. I dati di localizzazione vengono quantizzati sul dispositivo prima di lasciare il telefono (celle di griglia approssimativa, non coordinate GPS), quindi il server non conosce mai la posizione precisa dell'utente. I token di sessione hanno durata breve e vengono ruotati a ogni apertura dell'app; il servizio di matching del Radar lavora solo con le celle di griglia approssimativa presenti nella sessione corrente e non costruisce una cronologia delle posizioni. I messaggi di chat vengono memorizzati lato server per la sincronizzazione della cronologia, ma sono identificati da ID di messaggio con scope di sessione; lo schema è stato progettato fin dal primo giorno per consentire conversazioni in modalità effimera, dove la cronologia viene eliminata al termine della sessione senza richiedere una migrazione retroattiva.

Le notifiche push per i messaggi usano APNs (iOS) e FCM (Android) con payload di sola notifica: il corpo della notifica viene costruito sul client dopo aver decifrato il payload dal servizio di messaggistica, quindi il vendor di notifiche non vede mai il contenuto dei messaggi. La dichiarazione di privacy sull'App Store dello sviluppatore — raccolta dati zero — riflette questa architettura: nessun SDK di analytics, nessun crash reporter con PII, nessuna ad network e nessuna integrazione con data broker di terze parti. Questa postura è compatibile sia con i requisiti del GDPR nell'Unione Europea sia con quelli del CCPA / CPRA in California e negli altri stati statunitensi.

Postura di conformità: conforme al GDPR · pronto per ISO 27001 · SOC 2 Type II in corso · compatibile HIPAA · CCPA riconosciuto.

Metodologia di consegna

Una build in cinque fasi che ha portato JoyJet dalla specifica di prodotto alla produzione su iOS, Android e un backend in tempo reale.

Fase 1

Discovery e architettura

Tassonomia delle funzionalità (feed, Radar, chat, economia), mappatura dei flussi di dati per la privacy, postura GDPR + CCPA, audit delle capacità della piattaforma (CoreLocation vs Android ForegroundService), progettazione dello schema API.

Fase 2

Build della piattaforma core

Client iOS Swift / SwiftUI e client Android Kotlin / Jetpack Compose: onboarding, selezione degli interessi, feed di contenuti con ranking, profili utente, messaggistica di base su WebSocket.

Fase 3

Radar e sistemi in tempo reale

Engine geo-proximity CoreLocation + Foreground Service, quantizzazione su griglia approssimativa, servizio di matching per sovrapposizione di interessi, messaggistica foreground always-on, Stories, notifiche push via APNs + FCM.

Fase 4

Economia e premium

Abbonamento JJPremium via Apple StoreKit + Google Play Billing, flussi di acquisto di monete virtuali, marketplace di regali, pagamenti creator JJFans, strumenti di moderazione dei contenuti, pannello di amministrazione.

Fase 5

Lancio e iterazione

Submission su App Store + Google Play in tutti gli storefront US e UE, QA multilingua (EN / RU / ES / ZH-TW), monitoraggio delle sessioni crash-free, rotazione on-call, framework A/B per il ranking del feed.

JJPremium, monete, regali e l'economia virtuale

Il modello di monetizzazione di JoyJet va oltre il semplice abbonamento. JJPremium sblocca filtri avanzati per il feed, scoperta Radar a raggio esteso, upload di media ad alta risoluzione e ranking prioritario nei risultati Radar degli altri utenti. Il billing in-app passa attraverso Apple StoreKit su iOS e Google Play Billing su Android, con validazione server-side delle ricevute sugli endpoint di verifica di entrambi gli store e un singolo record di entitlement per utente che risolve lo stato dell'abbonamento su dispositivi e reinstallazioni. Oltre all'abbonamento, un'economia di monete virtuali consente agli utenti di acquistare monete tramite acquisti in-app e spenderle in regali virtuali inviati in chat — un layer di segnali social che stimola l'engagement senza dipendere dalla pubblicità. Il marketplace dei regali è implementato come un catalogo su PostgreSQL con cache Redis per la lista degli articoli più richiesti, e il flusso di invio regalo è un two-phase commit: la detrazione delle monete e la consegna del regalo sono atomiche, quindi una connessione WebSocket interrotta non può provocare un doppio addebito o un regalo perso. JJFans — un layer di creator economy — consente agli utenti di guadagnare monete dai follower più coinvolti, con un sistema di payout progettato per supportare future uscite in valuta fiat tramite integrazione con un payment processor. L'intera economia è stata costruita da zero con l'estensibilità in mente: aggiungere nuovi SKU di monete, tipi di regali o livelli premium richiede una modifica alla configurazione, non un rilascio di codice.

Lancio negli Stati Uniti e in UE — App Store, Google Play e normativa regionale sulla privacy

JoyJet è stato lanciato su Apple App Store e Google Play con storefront attivi negli Stati Uniti, nell'Unione Europea e nel Regno Unito. La build multilingua — inglese, russo, spagnolo e cinese tradizionale — consente all'app di servire utenti in California, New York, Texas e Florida negli Stati Uniti, e utenti in Germania, Francia, Paesi Bassi, Irlanda e Svezia nell'UE, senza una codebase separata per regione. I flussi di consenso alla privacy sono region-aware: gli utenti dell'UE e dello SEE ricevono una schermata di consenso granulare in stile GDPR con toggle separati per analytics e personalizzazione; gli utenti californiani ricevono un'informativa in stile CCPA sul diritto di non vendere o condividere i propri dati personali. Le pratiche di gestione dei dati sono allineate al GDPR per gli utenti europei e al patchwork normativo statunitense — CCPA/CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas) e Oregon CPA.

Il backend separa i dati degli utenti UE e statunitensi in partizioni di database distinte con gerarchie di chiavi di cifratura separate, consentendo un futuro impegno di data-residency senza una migrazione dello schema. Il servizio di matching del Radar esegue worker stateless che possono essere assegnati in modo indipendente alle regioni UE o statunitensi. Sia la classificazione per età sull'App Store (4+) sia il rating dei contenuti su Google Play sono stati calibrati per il feature set social, e i flussi di segnalazione e blocco in-app — richiesti da entrambe le piattaforme per le app con contenuti generati dagli utenti — sono stati realizzati e verificati come funzionalità di primo livello, non come aggiunta successiva. La conformità alla protezione dei dati UE e gli obblighi CCPA della California sono documentati nell'informativa sulla privacy in-app e nel modello di accordo sul trattamento dei dati lato server fornito al cliente per il suo DPA con i sub-processor europei.

Stack tecnologico e roadmap

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 roadmap attiva di sviluppo software su misura per JoyJet include un layer di videochiamate nei thread di chat (WebRTC), un segnale di dislike e sentiment dei contenuti per affinare il ranking del feed, supporto ai geo-tag per i post, un formato di post business per gli account commerciali e una funzione di live broadcast (JJBroadcast). Il livello premium è previsto per espandersi con uno strumento di promozione dei post e una dashboard di analytics creator più ricca che evidenzia crescita dei follower, tassi di engagement e ricavi dai regali per coorte. I piani infrastrutturali prevedono lo spostamento del servizio di matching del Radar in un microservizio dedicato con SLO sotto i 50 ms e la migrazione dello storage dei media verso una topologia CDN multi-regione per la conformità alla data-residency UE.

Domande frequenti

Quanto costa realizzare un'app social come Instagram?
Un MVP di app social con feed di contenuti, profili utente, messaggistica di base e pubblicazione su App Store + Google Play costa in genere tra €120k e €300k. Aggiungendo la discovery geo-proximity (Radar), la messaggistica di gruppo in tempo reale, le Stories e un'economia virtuale (monete, regali, abbonamento) si arriva a una piattaforma completa da €300k a €700k. I principali fattori di costo sono l'infrastruttura in tempo reale, l'algoritmo di ranking del feed e gli strumenti di moderazione richiesti per i contenuti generati dagli utenti nelle giurisdizioni statunitense ed europea.
In che cosa il Radar geo-proximity si differenzia dalle normali funzioni basate sulla posizione?
Le funzioni di localizzazione standard (check-in, mappe, tracking delle consegne) operano su snapshot avviati dall'utente. Un Radar di prossimità esegue una scansione continua in background, abbinando gli utenti nelle vicinanze ai profili di interesse, applicando fasce di distanza rispettose della privacy e restituendo risultati in tempo reale senza esporre le coordinate GPS grezze. Per realizzarlo correttamente su iOS sono necessari CoreLocation con gestione sempre attiva dei permessi e BGAppRefreshTask; su Android è richiesto un foreground service per sopravvivere agli ottimizzatori della batteria su Samsung, Xiaomi e Pixel.
Come si realizza la messaggistica in tempo reale in una piattaforma social?
La messaggistica social di livello produzione usa tipicamente WebSocket come layer di trasporto (connessione persistente per client, consegna sotto i 100 ms), con Redis pub/sub o un message broker dedicato che gestisce il fan-out su più dispositivi. Lo storico dei messaggi risiede in PostgreSQL o in un document store; i contatori di non letti e i segnali di presenza sono in cache su Redis. La crittografia end-to-end per i messaggi diretti richiede la gestione lato client delle chiavi e complica la moderazione lato server: un compromesso da decidere nella fase architetturale, non da retrofittare in seguito.
Quali sono le regole dell'App Store per le app social con contenuti generati dagli utenti?
Apple e Google richiedono entrambi che le app social dispongano di strumenti di segnalazione e blocco in-app funzionanti, di age-gating per le funzionalità 17+ o 18+, di informative sulla privacy chiare nelle nutrition label e nella privacy policy e, per le app con funzioni di dating o prossimità, di un esame approfondito. La conformità al GDPR per gli utenti UE richiede un meccanismo di consenso granulare; la conformità al CCPA per gli utenti californiani richiede un'informativa sul diritto di non vendere o condividere i propri dati personali. Non implementare questi elementi prima della submission è la causa più comune di rifiuto sull'App Store per le piattaforme social.
Quanto tempo occorre per sviluppare una piattaforma social per iOS e Android?
Un MVP focalizzato con feed di contenuti, profili, chat di base e submission su entrambi gli store richiede in genere 16–24 settimane. L'aggiunta del Radar geo-proximity, delle Stories e di un livello di abbonamento comporta 8–12 settimane in più. Un'economia virtuale completa (monete, regali, marketplace, pagamenti ai creator) richiede altre 8–10 settimane di lavoro backend e billing. Gli strumenti di moderazione e i pannelli di amministrazione sono spesso sottostimati: prevedere almeno 4–6 settimane per una superficie di operations sui contenuti di livello produzione.

Realizzate una piattaforma social come questa — parliamone

Se state pianificando un'app social, una piattaforma community con funzionalità geo-proximity o un prodotto di creator economy per il pubblico statunitense ed europeo, abbiamo distribuito questo stack end-to-end e possiamo comprimere significativamente le tempistiche di build. Il prodotto live è disponibile su joy-jet.com per iOS e Android, e il team ingegneristico che lo ha realizzato fa parte di YuSMP Group. Lavoriamo a prezzo fisso per MVP ben definiti e con team di sviluppo dedicati per la consegna continuativa, con una giornata lavorativa CET e una finestra garantita di sovrapposizione con la costa est degli Stati Uniti (9:00–13:00 ET) per stand-up, demo e incident response.

Prenota una chiamata di analisi Scopri i servizi di sviluppo mobile

Condividi questo caso

LinkedIn X

Pianificate una build simile

Prenota una chiamata di analisi

Richiedi una proposta

Condividete alcuni dettagli e un consulente senior risponderà entro un giorno lavorativo.

Preferite parlare direttamente? ☎ Call +374 44 871 811 ✉ sales@yusmpgroup.com