Produktaktualisierung
Frohes Vierundvierziges: Reiseerfolge und Mapsake-Freunde.
Frohes Vierundvierziges an alle, die in den Vereinigten Staaten feiern. Diese Version macht einen privaten Atlas spielerischer mit erklärbaren Erfolgen und einer bewussten Möglichkeit des Teilens zwischen Freunden.
Frohes Vierundvierziges!
Frohes Vierundvierziges an alle, die in den Vereinigten Staaten feiern!
Dieses Update dreht sich um zwei Möglichkeiten, wie eine private Reisekarte lebendiger werden kann: Erfolge geben dem Besitzer neue Muster, die er in seiner eigenen Historie entdecken kann, während Mapsake Friends es ermöglicht, diese Historie mit Personen zu vergleichen, die man tatsächlich kennt.
Keine der beiden Funktionen ändert die grundlegende Regel. Mapsake ist in erster Linie ein persönlicher Atlas. Es gibt keine öffentliche Follower-Anzahl, keine globale Bestenliste oder keinen Feed, der dazu dient, dass Fremde für andere Leistungen erbringen.
160 Gründe, die Karte noch einmal anzusehen.
Mapsake enthält jetzt etwa 160 Erfolge. Einige sind bekannte Meilensteine: ein erster markierter Ort, fünf Länder, jeder Kontinent oder eine wachsende Liste von Städten und Flughäfen. Andere beschreiben geografische Gruppen, Kultur, Natur, Wissenschaft, Luftfahrt und die weniger offensichtlichen Formen, die sich in einer Reisehistorie verbergen.
Der Katalog ist bewusst breit gefächert. Eine Person, die Roadtrips durch nahegelegene Regionen unternimmt, sollte dennoch sinnvolle Fortschritte erzielen; das System ist nicht nur für jemanden gedacht, der versucht, jedes Land zu sammeln.
Unter dem Interface ist die Auswertungsfunktion für Auszeichnungen ein deterministischer Durchlauf durch den Atlas. Jede Auszeichnung definiert die Orte oder Schwellenwerte, die sie berücksichtigt, Mapsake vergleicht diese Definition mit dem aktuellen „Besucht“- und „Gelebt“-Eintrag, und das Ergebnis enthält Fortschritt, Entsperrzustand, Datum und Medaillenstufe. Es hängt weder von einem Analyse-Dienst noch von einer Remote-Regel-Engine ab.
Dieser Ansatz hat eine nützliche Konsequenz: Erfolge funktionieren offline und werden sofort nach einem Import oder einer manuellen Änderung aktualisiert. Außerdem sind sie so testbar. Die gleiche Testumgebung kann immer den gleichen Satz von Erfolgen erzeugen.
Der Katalog wuchs von 11 auf etwa 160.
Die erste Achievements-Engine wurde mit 11 einfachen Meilensteinen ausgeliefert. Sie reichte aus, um den Ablauf zu demonstrieren: Fortschritt aus der Karte ableiten, hervorheben, was freigeschaltet wurde, und eine Fortschrittsanzeige für den Rest anzeigen. Sie war jedoch zu klein, um für jemanden mit einer etablierten Reisehistorie interessant zu bleiben.
Der zweite Durchgang führte Familien und geografische Gruppen ein. Länder-Meilensteine wurden zu einem Stapel anstelle einer Wand fast identischer Karten. Die Fertigstellung von Kontinenten und Gruppen wie die Europäische Union, der Schengen-Raum, die ASEAN, die 7, der Maghreb und die Stans fügten Ziele hinzu, die sich auf die Form der Reise bezogen und nicht nur auf ihr Volumen.
Der Katalog wurde dann um Kunst, Musik, Wissenschaft, Technologie, Natur, Geologie und Wirtschaft erweitert. Dort begann es, sich deutlich von anderen abzuheben. Eine Jazz-Geschichts-Gruppe und eine Weltraum-Gruppe können geografisch übereinstimmen, während sie völlig unterschiedliche Geschichten darüber erzählen, warum diese Orte zusammengehören.
Die Herausforderung bestand darin, willkürliches Trivia zu vermeiden. Jede Gruppe benötigt eine verteidigungsfähige, feste Mitgliedsliste und eine Erklärung, die Sinn ergibt, nachdem die Neuheit verflogen ist. Die Mitgliedschaft befindet sich in der Quelle und nicht in einem sich ändernden Webdienst, sodass ein Katalog-Update wie jedes andere Produktverhalten überprüft und versioniert wird.
Um 160 herum ist genug, um eine Suche und Organisation erforderlich zu machen. Es ist kein Ziel, das ewig wachsen muss. Ein kleiner, kohärenter Katalog ist besser als tausende prozedurale Abzeichen, die niemand versteht.
Entsperr-Daten und -Familien haben das Interface geändert.
Wenn der Katalog etwa 80 Elemente erreichte, hörte ein normales Raster auf zu funktionieren. Mehrere Schwellenwerte derselben Familie verdrängten alles andere, und ein langjähriger Benutzer konnte nicht erkennen, welche Vervollständigung neu war.
Mapsake fasst nun erreichte Erfolge innerhalb einer Familie zu einem Stapel zusammen, wobei die höchste Stufe oben liegt. Durch Antippen wird die frühere Meilensteine angezeigt. Gesperrte Erfolge bleiben als Ziele sichtbar, aber die Standard-Sortierung zeigt zuerst die Einträge, die dem Abschluss am nächsten sind.
Entsperr-Daten werden beim ersten Mal aufgezeichnet, wenn eine Auszeichnung erfüllt ist. Sie bleiben bei späteren Auswertungen erhalten und werden im Freund-Snapshot gespeichert, sodass eine Auszeichungsseite eines Freundes anzeigen kann, wann etwas passiert ist, ohne ein privates Ereignisprotokoll preiszugeben. Bestehende Benutzer werden beim ersten Start als Basislinie verwendet, sodass die Installation des Updates keinen Konfetti-Regen für jede Meilenstein auslöst, die ihre alte Karte bereits erfüllt hat.
Dieses Standardverhalten resultierte daraus, dass die Migration als Teil der Funktion betrachtet wurde. Ein technisch korrektes System, das beim Start 70 "neue" Erfolge anzeigt, würde sich fehlerhaft anfühlen, selbst wenn jeder Erfolg mathematisch verdient wäre.
Der Fortschritt sollte verständlich sein.
Eine Wand mit gesperrten Symbolen ist nicht sehr hilfreich, daher ist der Bereich "Erfolge" erklärend aufgebaut:
- Suchen Sie nach Name und filtern Sie nach Kategorie oder Kontinent.
- Sortieren Sie nach dem, was am nächsten liegt, kürzlich freigeschaltet wurde oder bereits abgeschlossen ist.
- Öffnen Sie eine Auszeichnung, um ihre Beschreibung, Mitgliedsorte, Karte und den aktuellen Fortschritt anzuzeigen.
- Bewegen Sie sich durch die Stufen Bronze, Silber, Gold und Platin, in denen eine Familie sie unterstützt.
- Halten Sie eine Auszeichnung lange gedrückt, um eine Freigabekarte zu erstellen, ohne etwas automatisch zu veröffentlichen.
Entsperr-Feierlichkeiten sind kurz und taktil, und alle Details sind danach weiterhin verfügbar. Der Ton ist bewusst leicht und manchmal ein wenig nerdig. Es sollte sich anfühlen, als würde man etwas über die Karte entdecken, nicht als würde man eine Leistungsbeurteilung erhalten.
Der Detailbildschirm löste auch ein Vertrauensproblem. Ein Titel wie "Five Eyes" oder "Ring of Fire" ist für jeden nicht unbedingt selbsterklärend. Durch das Öffnen wird die vollständige Beschreibung, die Kartenregion, die Länder der Gruppe, welche davon als erreicht gelten und der verfügbare Besuchszeitraum angezeigt. Bei gestaffelten Familien kommunizieren Bronze bis Platin den Fortschritt, ohne vier unterschiedliche visuelle Systeme zu benötigen.
Die Karte hebt absichtlich fehlende Länder hervor, ebenso wie besuchte Länder. Der Fortschritt ist leichter zu verstehen, wenn eine Person sehen kann, dass ein Ziel nur ein Nachbarland entfernt ist, anstatt lediglich "8 von 9" zu lesen.
Eine Feier kann die Navigation nicht kontrollieren.
Ein Implementierungsdetail wurde während des Tests sichtbar: Erfolgsanzeigen verhielten sich ursprünglich wie eine modale Zusammenfassung. Die Karten sahen anwählbar aus, aber die Anzeige enthielt nicht genügend Navigationsinformationen, um das darunterliegende Detail zuverlässig zu öffnen.
Die Korrektur bestand darin, jede Auszeichnung als dieselbe Leistungsidentität zu behandeln, die im Hauptkatalog verwendet wird, und sie an den bestehenden Detailbildschirm weiterzuleiten. Die "Feier" bleibt eine vorübergehende Darstellung; das Auszeichnungsmodell bleibt die dauerhafte Quelle. Dies ist ein kleines Beispiel für eine umfassendere Mapsake-Regel: Spezialeffekte sollten auf dem Produkt aufbauen, nicht es verzweigen.
Freunde, ohne ein soziales Netzwerk aufbauen zu müssen
Mapsake Friends beginnt mit einer Einladung, nicht mit einem durchsuchbaren Verzeichnis. Ein Link enthält einen privaten Freigabecode anstelle eines Namens oder eines Kontos. Durch das Öffnen wird eine gegenseitige Verbindung hergestellt: jede Person kann die gemeinsam genutzte Karte innerhalb von Mapsake sehen.
Links funktionieren gut über große Entfernungen, während QR-Codes und die Erkennung in der Nähe für den Moment gelten, in dem sich zwei Personen im selben Raum befinden. Die App veröffentlicht einen kompakten Reisebericht für die Verbindung, anstatt zu versuchen, zwei vollständige lokale Datenbanken zu synchronisieren.
Das erste gemeinsame Modell war nicht zuverlässig genug.
Ursprünglich verwendete Freunde einen separaten CloudKit-Freigabe-Dienst für jede Beziehung. Das erschien attraktiv, da CloudKit Zugriffsanfragen verwaltete, machte aber eine gegenseitige Freundschaft kompliziert. Eine Person konnte eine Freigabe akzeptieren, ohne dass der ursprüngliche Absender einen zuverlässigen Weg zurück erhielt, und die System-Freigabe-URL ließ sich nur schwer in einen vorhersehbaren In-App-Ablauf umwandeln.
Das Ersatzmodell gibt jedem Profil einen stabilen, gemeinsam genutzten Karten-Datensatz, auf den mit einem undurchsichtigen Code zugegriffen wird. Ein Einladungslink öffnet den Datensatz des Freundes, speichert einen Schnappschuss, veröffentlicht die eigene Karte des Empfängers und sendet eine kleine Anfrage zurück an den ursprünglichen Code. Vordergrund- und Hintergrundaktualisierungen vervollständigen die gegenseitige Verbindung.
Die erste Version dieses Ersatzes verwendete den stabilen Code direkt im Link. Das funktionierte, aber ein Link konnte für immer wiederverwendet werden, wenn er die beabsichtigte Konversation verließ. Ein einmaliger Einladungs-Token befindet sich jetzt vor der stabilen Karten-Identität. Ein verbrauchtes Token kann nicht wiederverwendet werden, während die zugrunde liegende Freundschaft weiterhin aktualisiert werden kann.
Dies ist ein Beispiel dafür, wie Produkt und Infrastruktur gleichzeitig sich ändern. „Meine Karte teilen“ ist nur ein Button in der Benutzeroberfläche, aber dahinter verbergen sich universelle Link-Routinen, CloudKit-Datensatzabfragen, bidirektionale Anfragen, lokales Caching, Deduplizierung und eine klare Erfolgs- oder Fehlermeldung. Das Verbergen dieser Mechanismen ist die Herausforderung; so zu tun, als ob sie nicht existieren würden, würde es unmöglich machen, Fehler zu erklären.
Das Profil eines Freundes bietet viel mehr. Es kann eine interaktive Karte, einen Reisepass mit Bedienelementen für Linse, Region und Jahr, Erfolge und eine Vergleichsansicht enthalten, die Überschneidungen und die für jede Person einzigartigen Orte zeigt. Ein Heimpunkt wird nur angezeigt, wenn der Eigentümer ihn explizit für die Freigabe aktiviert hat.
Der Freund-Bildschirm verwendete anfänglich eine einfachere Weltkugel und eine Zusammenfassung. Das fühlte sich schnell wie eine Vorschau und nicht wie eine Beziehung an. Die aktuelle Oberfläche verwendet die gleichen Karteneinstellungen wie der Atlas des Eigentümers, die gleichen Passberechnungen und das gleiche Auszeichnungsdetailmodell mit einer anderen Datenquelle.
Die Wiederverwendung dieser Komponenten enthüllte eine nützliche Abstraktion: Die Bildschirme für Karten und Reisepässe sollten Reisedaten verarbeiten, anstatt anzunehmen, dass diese Daten zum angemeldeten lokalen Profil gehören. Nachdem die Freigabe von Schnappschissen mit Freunden diese Schnittstelle implementiert hatte, konnten Filterung, Zeiträume, Kontinente, Fortschritt und Vergleiche ein gemeinsames Verhalten nutzen, ohne einem Freund Zugriff auf die zugrunde liegende Datenbank des Eigentümers zu gewähren.
Es gab einen weniger glamourösen Navigationsfehler. Eine Freundes-Reihe war direkt an ein SwiftData-Modellobjekt gebunden, aber die CloudKit-Synchronisierung konnte dieses Objekt neu initialisieren und seine Identität ändern, genau wenn die Navigation gestartet wurde. Die Navigation anhand der stabilen ID des Freundes behob das scheinbar tote Tippen. Verteilte Datenfehler treten oft als gewöhnliche Benutzeroberflächenfehler auf.
Profilfotos unterliegen der gleichen Regel für Schnappschüsse. Ein kleines Avatarbild kann zusammen mit dem Profil veröffentlicht und nach einer Bearbeitung aktualisiert werden. Wenn kein Foto eingestellt ist, werden die Initialen als Standard verwendet. Mapsake fordert vor der ersten Einladung einen erkennbaren Namen und ein Foto an, macht aber keines davon zu einer Voraussetzung.
Ein Feed mit wichtigen Änderungen.
Der Freunde-Tab ist kein Stream von hochgeladenen Beiträgen. Mapsake vergleicht regelmäßig den neuesten Freund-Snapshot mit dem bereits auf dem Gerät gespeicherten. Wenn ein Freund Orte hinzugefügt oder Erfolge freigeschaltet hat, werden diese Unterschiede zu einem kleinen lokalen Aktivitäts-Feed.
Dieser Snapshot-Diff-Ansatz hält die Funktion einfach. Freunde müssen keinen Beitrag verfassen, jedes Mal wenn sich ihr Atlas ändert, und Mapsake benötigt kein Content-Ranking-System. Der Feed zeichnet ein nützliches Ereignis auf, da sich die zugrunde liegende Reisehistorie geändert hat.
Es vermeidet auch das Hinzufügen eines weiteren CloudKit-Record-Typs für jedes Feed-Ereignis. Die App verfügt bereits über die alten und neuen Schnappschüsse. Durch den Vergleich der Ortsidentifikatoren und der fregeschalteten Erfolge können interessante Änderungen lokal ermittelt werden, und ein begrenzter Feed wird in einem kleinen JSON-Speicher auf dem Gerät gespeichert.
Ergänzungen von Orten und freigeschaltete Erfolge werden in separate Gruppen unterteilt, auch wenn sie bei einem einzigen Aktualisierungsvorgang eintreffen. Dies verhindert, dass ein großer Import Dutzende von nahezu identischen Einträgen erzeugt, und sorgt dafür, dass der Feed eher wie „Emma hat Japan, Kyoto und zwei weitere Orte hinzugefügt“ aussieht, anstatt wie ein Datenbanktransaktionsprotokoll.
Benachrichtigungen können pro Reise-Filter aktiviert werden, mit einer Wartezeit, sodass eine große Menge importierter Historie nicht zu einer Flut von Benachrichtigungen führt. Das Aktualisieren durch Ziehen bleibt verfügbar, wenn jemand dies bewusst überprüfen möchte.
Datenschutz ist ein integraler Bestandteil der Funktion, keine Haftungsausschlusserklärung.
Reisechroniken können Wohnorte, Routinen und zukünftige Pläne offenlegen. Daher muss die Freunde-Funktion expliziter sein als eine herkömmliche soziale Funktion:
- Um jemanden hinzuzufügen, benötigen Sie eine Einladung, einen QR-Code-Scan oder einen direkten Austausch in der Nähe.
- Der gemeinsame Datenbereich enthält die Kartendaten, die für die Freunde-Funktion benötigt werden, und nicht eine Kopie der Fotobibliothek.
- Die Freigabe für das Startbildschirm-Widget ist separat und standardmäßig deaktiviert.
- Das Entfernen eines Freundes entfernt die lokale Beziehung und deren zwischengespeicherte Aktivitäten.
- Für die grundlegende Nutzung von Mapsake ist kein Mapsake-Konto erforderlich.
Der Freund-Schnappschuss enthält niemals die ursprünglichen Fotodaten. Er enthält Reisehinweise, Profilfelder, Informationen über die Linse, Daten, die für statistische Zwecke benötigt werden, und Auszeichnungsfreischaltungen, die für die Oberflächen benötigt werden, die der Freund öffnen kann. Diese Grenze verhindert, dass ein reichhaltiges Erlebnis versehentlich zu einem Foto-Sharing-Dienst wird.
Mapsake: Unterscheidet zwischen dem Teilen mit Freunden und einem öffentlichen Browser-Link. Eine Freundschaftsverbindung ist gegenseitig und befindet sich innerhalb der App. Eine öffentliche Karte ist ein separater, optionaler Link für Personen, die eine schreibgeschützte Version wünschen. Das Aktivieren des einen aktiviert nicht automatisch das andere.
Erfolge und Freunde machen den Atlas spielerischer, aber sie verwandeln ihn nicht in ein öffentliches Profil. Diese Grenze ist wichtig genug, um sie immer wieder zu betonen, während die App wächst.
Probieren Sie das Update aus
Öffnen Erfolge um den gesamten Katalog zu durchsuchen und zu sehen, was am nächsten liegt. Öffnen Sie dann Freunde, teilen Sie einen Einladungslink oder verwenden Sie die Option "In der Nähe" und "QR-Code" und vergleichen Sie Karten mit jemandem, den Sie kennen.
Das beste Ergebnis ist nicht ein höherer Wert. Es ist ein Gespräch: der Ort, den beide Personen lieben, die Region, die eine Person noch nie in Betracht gezogen hat, oder die kleine, ungewöhnliche Leistung, von der keine wusste, dass sie kurz davor stand, sie zu erreichen.