Aggiornamento del prodotto
Buon 4 luglio: risultati di viaggio e amici di Mapsake.
Buon 4 luglio a tutti coloro che festeggiano negli Stati Uniti. Questa versione rende l'atlante privato più divertente con risultati esplicativi e una condivisione intenzionale tra amici.
Buon 4 luglio!
Buon 4 luglio a tutti coloro che festeggiano negli Stati Uniti!
Questo aggiornamento riguarda due modi in cui una mappa di viaggio privata può diventare più vivace: i risultati danno al proprietario nuovi schemi da osservare nella propria cronologia, mentre Mapsake Friends rende possibile confrontare quella cronologia con persone che si conoscono realmente.
Nessuna di queste funzionalità modifica la regola fondamentale. Mapsake è, prima di tutto, un atlante personale. Non ci sono conteggi pubblici di follower, classifiche globali o feed progettati per far competere sconosciuti.
160 motivi per guardare di nuovo la mappa.
Mapsake include ora circa 160 risultati. Alcuni sono traguardi familiari: un primo luogo segnato, cinque paesi, ogni continente o un elenco crescente di città e aeroporti. Altri descrivono gruppi geografici, culturali, naturali, scientifici, aeronautici e le forme meno evidenti nascoste all'interno di una storia di viaggio.
Il catalogo è intenzionalmente ampio. Una persona che intraprende viaggi su strada attraverso regioni vicine dovrebbe comunque riscontrare progressi significativi; il sistema non è riservato a chi cerca di collezionare tutti i paesi.
Nell'interfaccia, la valutazione dei risultati è un passaggio deterministico sull'atlante. Ogni risultato definisce i luoghi o le soglie a cui è interessato, Mapsake confronta tale definizione con la registrazione Visited e Lived corrente e il risultato include il progresso, lo stato sbloccato, la data e il livello della medaglia. Non dipende da un servizio di analisi o da un motore di regole remoto.
Questo approccio ha una conseguenza utile: i risultati funzionano offline e vengono aggiornati immediatamente dopo un'importazione o una modifica manuale. Questo li rende anche testabili. L'ambiente di test può sempre produrre lo stesso set di risultati.
Il catalogo è cresciuto da 11 a circa 160.
Il primo motore di risultati è stato lanciato con obiettivi 11 semplici. Questo era sufficiente per dimostrare il processo: derivare i progressi dalla mappa, evidenziare ciò che è stato sbloccato e mostrare una barra di avanzamento per il resto. Era anche troppo piccolo per interessare chiunque avesse una storia di viaggi consolidata.
La seconda iterazione ha introdotto famiglie e gruppi geografici. Le tappe di conteggio dei paesi sono diventate una pila invece di una serie di schede quasi identiche. Il completamento dei continenti e i gruppi come l'Unione Europea, lo spazio Schengen, l'ASEAN, la 7, il Maghreb e i paesi dell'Asia centrale hanno aggiunto obiettivi che riguardavano la forma del viaggio piuttosto che solo il suo volume.
Il catalogo si è poi ampliato per includere arte, musica, scienza, tecnologia, natura, geologia ed economia. È lì che ha iniziato a sembrare distintamente Mapsake. Un gruppo di storia del jazz e un gruppo del programma spaziale possono sovrapporsi geograficamente mentre raccontano storie completamente diverse sul perché quei luoghi appartengono insieme.
La sfida era evitare trivia arbitrari. Ogni gruppo ha bisogno di un elenco di membri fisso e difendibile e di una spiegazione che abbia senso dopo che la novità svanisce. L'appartenenza risiede nella fonte e non proviene da un servizio web in evoluzione, quindi un aggiornamento del catalogo viene revisionato e versionato come qualsiasi altro comportamento del prodotto.
Intorno a 160, c'è abbastanza materiale per rendere necessaria la ricerca e l'organizzazione. Non è un obiettivo che debba crescere per sempre. Un catalogo piccolo e coerente è meglio di migliaia di badge procedurali che nessuno capisce.
Le date e le famiglie di sblocco hanno modificato l'interfaccia.
Quando il catalogo raggiungeva circa 80 elementi, una griglia normale smetteva di funzionare. Molteplici soglie della stessa famiglia oscuravano tutto il resto, e un utente abituale non riusciva a capire quale aggiornamento fosse nuovo.
Mapsake ora raggruppa i risultati ottenuti all'interno di una famiglia in una pila, con il livello più alto in cima. Espandendola, vengono visualizzati i traguardi precedenti. I risultati bloccati rimangono visibili come obiettivi, ma l'ordinamento predefinito mostra prima quelli più vicini al completamento.
Le date di sblocco vengono registrate la prima volta che un risultato diventa vero. Sopravvivono alle valutazioni successive e viaggiano all'interno dell'istantanea dell'amico, il che consente alla pagina dei risultati di un amico di mostrare quando è successo qualcosa senza esporre un registro di eventi privati. Gli utenti esistenti vengono impostati come baseline al primo avvio, quindi l'installazione dell'aggiornamento non produce una tempesta di coriandoli per ogni traguardo che la vecchia mappa ha già raggiunto.
Questo comportamento predefinito è dovuto al fatto che la migrazione è stata considerata parte della funzionalità. Un motore tecnicamente corretto che annuncierebbe i "risultati" 70 "nuovi" all'avvio sembrerebbe difettoso, anche se ogni badge fosse matematicamente meritato.
I progressi devono essere comprensibili.
Una parete di icone bloccate non è molto utile, quindi la scheda "Risultati" è organizzata con spiegazioni:
- Cerca per nome e filtra per categoria o continente.
- Ordina per ciò che è più vicino, sbloccato di recente o già completato.
- Apri un risultato per vedere la sua descrizione, i luoghi dei membri, la mappa e i progressi attuali.
- Passa ai livelli bronzo, argento, oro e platino, dove una famiglia li sostiene.
- Tieni premuto su un risultato per creare una scheda di condivisione senza pubblicare nulla automaticamente.
Le celebrazioni di sblocco sono brevi e tattili e tutti i dettagli rimangono disponibili in seguito. Il tono è deliberatamente leggero e a volte un po' nerd. Dovrebbe sembrare di scoprire qualcosa sulla mappa, non di ricevere una valutazione delle prestazioni.
La schermata dei dettagli ha anche risolto un problema di fiducia. Un titolo come "Five Eyes" o "Ring of Fire" non è autoesplicativo per tutti. Aprendolo, viene visualizzata la descrizione completa, la regione della mappa, i paesi del gruppo, quelli considerati completati e l'intervallo di date di visita, se disponibile. Per le famiglie a livelli, il bronzo fino al platino comunica il progresso senza richiedere quattro sistemi visivi non correlati.
La mappa evidenzia deliberatamente i paesi non visitati, così come quelli visitati. È più facile capire i progressi quando una persona può vedere che un obiettivo è solo un paese vicino invece di leggere semplicemente "8 di 9".
Una celebrazione non può controllare la navigazione
Un dettaglio di implementazione è diventato visibile durante i test: le celebrazioni dei risultati si comportavano originariamente come un riepilogo modale. Le schede sembravano cliccabili, ma lo strato di celebrazione non conteneva informazioni di navigazione sufficienti per aprire in modo affidabile il dettaglio sottostante.
La correzione è stata trattare ogni premio come la stessa identità di realizzazione utilizzata dal catalogo principale e indirizzarlo allo schermo dei dettagli esistente. La "celebrazione" rimane una presentazione temporanea; il modello di realizzazione rimane la fonte duratura. Questo è un piccolo esempio di una regola più ampia di Mapsake: gli effetti speciali devono essere sovrapposti al prodotto, non dividerlo.
Amici, senza creare un social network
Mapsake Friends inizia con un invito, non con un elenco ricercabile. Un link contiene un codice di condivisione privato anziché un nome o un account. Aprirlo crea una connessione reciproca: ogni persona può vedere la mappa condivisa dell'altra all'interno di Mapsake.
I link funzionano bene a lunga distanza, mentre i codici QR e la scoperta nelle vicinanze coprono il momento in cui due persone si trovano nella stessa stanza. L'app pubblica un'istantanea di viaggio compatta per la connessione invece di cercare di sincronizzare due database locali completi.
Il primo modello di condivisione non era abbastanza affidabile.
In origine, gli amici utilizzavano una condivisione CloudKit separata per ogni relazione. Questo sembrava interessante perché CloudKit gestiva le richieste di accesso, ma rendeva complicata l'amicizia reciproca. Una persona poteva accettare una condivisione senza che il mittente originale ricevesse un percorso affidabile, e l'URL di condivisione del sistema era difficile da trasformare in un flusso prevedibile all'interno dell'app.
Il modello di sostituzione fornisce a ogni profilo un record di mappa condiviso e stabile a cui si accede tramite un codice opaco. Un link di invito apre il record dell'amico, memorizza uno snapshot, pubblica la mappa del destinatario e scrive una piccola richiesta di ritorno al codice originale. Gli aggiornamenti in primo piano e in background completano la connessione reciproca.
La prima versione di questa sostituzione utilizzava il codice stabile direttamente nel link. Questo ha funzionato, ma un link poteva essere riutilizzato all'infinito se fosse sfuggito alla conversazione prevista. Ora c'è un token di invito univoco davanti all'identità della mappa stabile. Un token utilizzato non può essere riutilizzato, mentre l'amicizia sottostante può continuare a essere aggiornata.
Questo è un esempio di come prodotto e infrastruttura cambiano insieme. "Condividi la mia mappa" è solo un pulsante nell'interfaccia, ma sotto di esso ci sono il routing di collegamenti universali, la ricerca di record di CloudKit, la gestione delle richieste reciproche, la memorizzazione nella cache locale, la deduplicazione e un messaggio chiaro di successo o fallimento. Nascondere questa macchina è il lavoro; fingere che non esista renderebbe impossibile spiegare i fallimenti.
Il profilo di un amico è molto dettagliato. Può includere una mappa interattiva, un Passaporto con controlli di lente, regione e anno, risultati e una vista di confronto che mostra le sovrapposizioni e i luoghi unici di ogni persona. Un punto di posizione domestica viene escluso a meno che il suo proprietario non scelga esplicitamente di condividerlo.
La schermata degli amici utilizzava inizialmente un globo e un riepilogo più semplici. Questo ha rapidamente dato l'impressione di un'anteprima piuttosto che di una relazione. La superficie corrente utilizza le stesse impostazioni della mappa dell'Atlas del proprietario, gli stessi calcoli del passaporto e lo stesso modello di dettagli dei risultati con una fonte di dati diversa.
Il riutilizzo di questi componenti ha rivelato un'astrazione utile: le schermate di mappe e passaporti devono consumare dati di viaggio, e non presumere che i dati appartengano al profilo locale connesso. Una volta che la funzione di acquisizione di schermate con gli amici ha implementato questa interfaccia, il filtraggio, gli intervalli di date, le aree continentali, i progressi dei risultati e i confronti potevano condividere lo stesso comportamento senza dare a un amico accesso al database sottostante del proprietario.
Si è verificato un bug di navigazione meno appariscente lungo il percorso. Una riga "amici" era direttamente collegata a un oggetto modello SwiftData, ma la sincronizzazione di CloudKit poteva riavviare quell'oggetto e cambiarne l'identità proprio quando la navigazione iniziava. L'utilizzo dell'ID stabile dell'amico per la navigazione ha corretto il problema della pressione apparentemente inattiva. I bug dei dati distribuiti spesso si manifestano come bug comuni dell'interfaccia utente.
Le foto del profilo hanno seguito la stessa regola per gli scatti. Una piccola icona può essere pubblicata con il profilo condiviso e aggiornata dopo una modifica. Se non viene impostata alcuna foto, le iniziali vengono utilizzate come predefinito. Mapsake richiede un nome e una foto riconoscibili prima del primo invito, ma non rende né l'uno né l'altro obbligatori.
Un feed di modifiche significative.
La scheda Amici non è un flusso di post caricati. Mapsake confronta periodicamente l'ultima istantanea di un amico con quella già memorizzata sul dispositivo. Se un amico ha aggiunto luoghi o sbloccato risultati, queste differenze diventano un piccolo feed di attività locale.
Questo approccio di confronto di snapshot mantiene la funzionalità semplice. Gli amici non devono comporre un post ogni volta che la loro mappa cambia, e Mapsake non ha bisogno di un sistema di classificazione dei contenuti. Il feed registra un evento utile perché la cronologia dei viaggi sottostante è cambiata.
Evita anche di aggiungere un altro tipo di record CloudKit per ogni evento del feed. L'app dispone già delle anteprime vecchie e nuove. Confrontare i loro identificatori di posizione e i risultati ottenuti può dedurre le modifiche interessanti localmente, quindi mantenere un feed limitato in un piccolo archivio JSON sul dispositivo.
Le aggiunte di luoghi e i risultati sbloccati sono raggruppati in burst separati, anche quando arrivano in un'unica aggiornamento. Questo impedisce a un'importazione di grandi dimensioni di generare dozzine di righe quasi identiche e rende il feed più simile a "Emma ha aggiunto Giappone, Kyoto e altri due" piuttosto che un registro delle transazioni del database.
Le notifiche possono essere abilitate per ogni filtro di viaggio con un periodo di raffreddamento, quindi una grande quantità di cronologia importata non si trasforma in una serie di avvisi. Il refresh tramite scorrimento rimane disponibile quando qualcuno desidera controllare deliberatamente.
La privacy è parte integrante della funzionalità, non una dichiarazione di non responsabilità.
Le cronologie dei viaggi possono rivelare case, routine e piani futuri. Pertanto, la funzione "amici" deve essere più esplicita di una funzione sociale convenzionale:
- Per aggiungere qualcuno, è necessaria un'invito, una scansione di codice QR o uno scambio nelle vicinanze.
- Il payload condiviso contiene i dati della mappa necessari per l'esperienza degli amici, non una copia della libreria di foto.
- La condivisione nella schermata iniziale è separata ed è disattivata per impostazione predefinita.
- La rimozione di un amico rimuove la relazione locale e la sua attività memorizzata nella cache.
- Per utilizzare Mapsake, non è necessario un account Mapsake.
Lo snapshot di un amico non include mai byte di foto originali. Contiene i punti di riferimento del viaggio, i campi del profilo, le informazioni sull'obiettivo, le date necessarie per le statistiche specifiche e i sblocchi dei risultati necessari per le superfici che l'amico può aprire. Questo limite impedisce a un'esperienza ricca di diventare un servizio di condivisione di foto per caso.
Mapsake distingue la condivisione con gli amici da un collegamento pubblico per il browser. Una connessione con un amico è reciproca e si trova all'interno dell'app. Una mappa pubblica è un artefatto opzionale separato per chi desidera un collegamento di sola lettura. Attivare uno non attiva automaticamente l'altro.
I Risultati e gli Amici rendono l'atlante più divertente, ma non lo trasformano in un profilo pubblico. Questa distinzione è importante e va ripetuta man mano che l'app cresce.
Prova l'aggiornamento
Apri. Obiettivi per cercare nell'intero catalogo e vedere cosa c'è nelle vicinanze. Quindi, apri Amici, condividi un link di invito o utilizza l'opzione "vicino" e "codice QR" e confronta le mappe con qualcuno che conosci.
Il risultato migliore non è un punteggio più alto. È una conversazione: il luogo che entrambe le persone hanno amato, la regione che una persona non aveva mai considerato, o la piccola realizzazione insolita che nessuno sapeva di essere sul punto di raggiungere.