Оновлення продукту.
З Днем Незалежності: досягнення в подорожах та друзі в Mapsake
З Днем Незалежності всім, хто святкує це свято у Сполучених Штатах. Ця версія робить приватний атлас більш цікавим завдяки зрозумілим досягненням і навмисному обміну між друзями.
З Днем Незалежності!
З Днем Незалежності всім, хто святкує це свято у Сполучених Штатах!
Це оновлення про два способи, за допомогою яких особиста карта подорожей може стати більш живою: досягнення дозволяють користувачеві виявляти нові закономірності у своїй історії, а Mapsake Friends дозволяє порівнювати цю історію з людьми, яких вони дійсно знають.
Жодна з цих функцій не змінює основне правило. Mapsake – це насамперед особиста карта. Тут немає публічної кількості підписників, глобальної таблиці лідерів або стрічки, призначеної для того, щоб незнайомці демонстрували один одному свої досягнення.
Причини ще раз переглянути карту навколо 160.
Mapsake тепер включає близько 160 досягнень. Деякі з них – це знайомі етапи: перше відмічене місце, п'ять країн, кожен континент або зростаючий список міст і аеропортів. Інші описують географічні групи, культуру, природу, науку, авіацію та менш очевидні закономірності, приховані в історії подорожей.
Каталог навмисно охоплює широкий спектр тем. Користувач, який здійснює поїздки поблизькими регіонами, все одно повинен побачити значний прогрес; система не призначена лише для тих, хто намагається зібрати всі країни.
В інтерфейсі оцінка досягнень – це детермінований процес, який охоплює всю карту. Кожне досягнення визначає місця або порогові значення, які воно враховує. Mapsake порівнює це визначення з поточною записами «Відвіданих» та «Місць проживання», і результат включає прогрес, стан розблокування, дату та рівень медалі. Він не залежить від аналітичної служби або віддаленого двигуна правил.
Цей підхід має корисний наслідок: досягнення працюють в автономному режимі та оновлюються відразу після імпорту або ручної зміни. Це також робить їх придатними для тестування. Один і той же набір даних завжди може створювати один і той же набір досягнень.
Каталог зріс від 11 до приблизно 160.
Перший двигун досягнень був випущений з 11 простими етапами. Це було достатньо, щоб продемонструвати принцип: отримувати прогрес з карти, виділяти те, що відкрито, і показувати індикатор прогресу для решти. Однак він був занадто простим, щоб залишатися цікавим для тих, хто вже має багатий досвід подорожей.
У другій версії було додано сім'ї та географічні групи. Віхи підрахунку країн стали одним списком замість набору майже ідентичних карток. Завершення континентів і групи, такі як Європейський союз, Шенгенська зона, АСЕАН, G7, Магриб і Стан, додали цілі, які були пов'язані з формою подорожі, а не лише з її обсягом.
Потім каталог розширився та включив мистецтво, музику, науку, технології, природу, геологію та економіку. Саме тоді він став по-справжньому впізнаваним як Mapsake. Група любителів історії джазу та група, що займається космічними програмами, можуть географічно перетинатися, розповідаючи абсолютно різні історії про те, чому ці місця пов'язані між собою.
Завданням було уникнути довільних дрібниць. Кожній групі потрібен захищений, фіксований список учасників і пояснення, яке має сенс після того, як новизна мине. Інформація про членство зберігається у вихідному коді, а не надходить із веб-сервісу, який може змінюватися, тому оновлення каталогу розглядається та версіонується, як і будь-яка інша поведінка продукту.
Навколо 160 достатньо інформації, щоб зробити пошук та організацію необхідними. Це не мета, до якої потрібно постійно прагнути. Краще мати невеликий, структурований каталог, ніж тисячі процедурних значків, які ніхто не розуміє.
Дати та сім'ї розблокувань змінили інтерфейс.
Коли кількість елементів у каталозі досягла приблизно 80, звичайна сітка перестала працювати. Різні порогові значення з однієї й тієї ж категорії перекривали все інше, і давній користувач не міг зрозуміти, який з них є новим.
Mapsake тепер об'єднує отримані досягнення в групи, де найвищий рівень знаходиться зверху. При розгортанні групи відображаються попередні етапи. Закріплені досягнення залишаються видимими як цілі, але за замовчуванням сортування виконується за тим, що найближче до завершення.
Дати розблокування записуються вперше, коли досягнення стає істинним. Вони зберігаються під час наступних оцінок і передаються у знімок друга, що дозволяє сторінці досягнень друга показувати, коли щось сталося, не розкриваючи приватний журнал подій. Існуючі користувачі отримують базові значення при першому запуску, тому встановлення оновлення не викликає феєрверк для кожного етапу, який ваша стара карта вже пройшла.
Ця базова поведінка пов’язана з тим, що міграція розглядається як частина функції. Технічно правильний двигун, який оголошує 70 «нові» досягнення під час запуску, буде здаватися зламаним, навіть якщо кожне досягнення математично заслужене.
Прогрес має бути зрозумілим.
Стіна з заблокованими значками не дуже корисна, тому вкладка «Досягнення» організована навколо пояснень.
- Пошук за назвою та фільтрування за категорією або континентом.
- Сортуйте за найближчим місцем, нещодавно розблокованим місцем або місцем, яке вже відвідано.
- Відкрийте досягнення, щоб побачити його опис, пов'язані місця, карту та поточний прогрес.
- Переходьте між рівнями підтримки: бронзовим, срібним, золотим і платиновим.
- Тривале натискання на досягнення дозволяє створити картку для публікації, але без автоматичної публікації.
Святкові сповіщення про розблокування є короткими та тактильними, а повні деталі залишаються доступними пізніше. Тон навмисно легкий і іноді трохи дивакуватий. Це має викликати відчуття відкриття чогось про карту, а не отримання оцінки ефективності.
Екран детальної інформації також вирішив проблему довіри. Назва, така як «Five Eyes» або «Ring of Fire», не є самоочевидною для всіх. Відкриття показує повне пояснення, регіон карти, країни в групі, які з них вважаються пройденими, та діапазон дат відвідування, якщо він доступний. Для багаторівневих сімейств бронзовий, срібний та платиновий рівні демонструють прогрес без необхідності використання чотирьох несхожих візуальних систем.
Карта навмисно виділяє відсутні елементи, а також досягнуті. Прогрес легше зрозуміти, коли людина бачить, що мета знаходиться в сусідній країні, а не просто читає «8 з 9».
Святкування не може включати навігацію.
Під час тестування проявилася одна особливість реалізації: спочатку святкування досягнень працювало як модальне вікно. Картки виглядали інтерактивними, але шар святкування не містив достатньої кількості даних для навігації до вихідних деталей.
Виправлення полягало в тому, щоб розглядати кожне досягнення як ту ж ідентифікацію досягнення, яка використовується в основному каталозі, і направляти його на існуючий екран деталей. Святкування залишається тимчасовим представленням; модель досягнення залишається надійним джерелом. Це невеликий приклад ширшого правила Mapsake: спеціальні ефекти повинні бути поверх продукту, а не його форком.
Друзі, без створення соціальної мережі.
Mapsake Friends починається з запрошення, а не з публічного каталогу. Посилання містить приватний код для обміну, а не ім'я або обліковий запис. Відкриття посилання створює взаємний зв'язок: кожен користувач може бачити карту іншого.
Посилання добре працюють на великих відстанях, тоді як QR-коди та виявлення поблизу корисні, коли дві особи знаходяться в одній кімнаті. Додаток публікує компактний знімок подорожі для підключення, замість того, щоб намагатися синхронізувати дві повні локальні бази даних.
Перша модель спільного використання була недостатньо надійною.
Раніше для кожного зв'язку використовувався окремий спільний ресурс CloudKit. Це здавалося привабливим, оскільки CloudKit обробляв запрошення до доступу, але це ускладнювало дружні стосунки. Одна людина могла прийняти спільний доступ без отримання надійного шляху назад для початкового відправника, і системний URL-адреса спільного доступу було важко перетворити на передбачуваний процес у додатку.
Нова модель надає кожному профілю стабільний спільний запис карти, доступний за непрозорим кодом. Посилання-запрошення відкриває запис друга, кешує знімок, публікує власну карту користувача, який приймає запрошення, і надсилає невеликий запит назад до початкового коду. Оновлення у передньому та фоновому режимах завершують взаємне з'єднання.
У першій версії цієї заміни використовувався стабільний код безпосередньо в посиланні. Це працювало, але посилання могло бути використане нескінченно, якщо б воно виходило за межі передбачуваної розмови. Тепер одноразові токени запрошення знаходяться перед стабільним ідентифікатором карти. Використаний токен не можна використовувати повторно, в той час як основна дружба може продовжувати оновлюватися.
Це приклад одночасних змін продукту та інфраструктури. «Поділитися моєю картою» – це одна кнопка в інтерфейсі, але під нею знаходяться маршрутизація універсальних посилань, пошук записів CloudKit, обробка взаємних запитів, локальне кешування, дедуплікація та чітке повідомлення про успіх або невдачу. Приховати цю інфраструктуру – це завдання; прикидатися, що її не існує, ускладнило б пояснення збоїв.
Профіль друга містить багато корисної інформації. Він може включати інтерактивну карту, паспорт з елементами керування для вибору об'єктива, регіону та року, досягнення та вигляд для порівняння, який показує перетини та місця, унікальні для кожної особи. Домашнє місцезнаходження не відображається, якщо власник явно не ввімкнув спільний доступ до нього.
Раніше екран друзів використовував простішу глобус і підсумкову інформацію. Це швидко почало здаватися попереднім переглядом, а не відображенням відносин. Поточна версія використовує ті ж налаштування карти, що й атлас власника, ті ж розрахунки для паспорта та ту ж модель деталізації досягнень, але з іншим джерелом даних.
Повторне використання цих компонентів виявило корисну абстракцію: екрани карт та паспортів повинні отримувати дані про подорожі, а не припускати, що ці дані належать локальному профілю користувача. Після реалізації функції створення знімків друзів, фільтрація за об'єктивами, діапазони років, континенти, прогрес досягнень та порівняння могли б використовувати спільний код, не надаючи друзям доступ до основної бази даних власника.
Під час розробки виникла менш помітна навігаційна помилка. Рядок «друг» був безпосередньо пов’язаний з об’єктом моделі SwiftData, але дзеркальне копіювання CloudKit могло перезаписати цей об’єкт і змінити його ідентифікатор безпосередньо перед початком навігації. Використання стабільного ідентифікатора друга для навігації усунуло, здавалося б, непрацюючу кнопку. Помилки розподілених даних часто проявляються як звичайні помилки інтерфейсу.
Фотографії профілю відповідали тому ж правилу створення знімків. Невеликий аватар можна опублікувати разом із профілем і оновити після редагування. Якщо фотографія не встановлена, в якості резервного варіанту використовуються ініціали. Mapsake запитує впізнаване ім'я та фотографію перед першим запрошенням, але жодне з них не є обов'язковим.
Лента, складена зі значущих змін.
Вкладка «Друзі» – це не потік завантажених публікацій. Mapsake періодично порівнює останню версію даних про друзів із збереженою версією на пристрої. Якщо друг додав нові місця або отримав досягнення, ці зміни відображаються у вигляді невеликої локальної стрічки активності.
Цей підхід, заснований на порівнянні знімків, спрощує функціональність. Друзям не потрібно кожного разу, коли змінюється їхня карта, створювати новий запис, і Mapsake не потрібна система ранжування контенту. Лента записує корисну подію, оскільки змінилася основна історія подорожей.
Він також уникає додавання ще одного типу запису CloudKit для кожного події фіда. Додаток вже має старі та нові знімки. Порівняння їхніх ідентифікаторів місця розташування та досягнень може локально вивести цікаві зміни, а потім зберегти обмежений фід у невеликому сховищі JSON на пристрої.
Додавання місць і досягнення групуються в окремі блоки, навіть якщо вони з'являються під час одного оновлення. Це запобігає створенню великої кількості майже ідентичних рядків під час імпорту великого обсягу даних і робить стрічку схожою на «Емма додала Японію, Кіото та ще два місця», а не на журнал транзакцій бази даних.
Повідомлення можна ввімкнути для кожного туристичного режиму з періодом очікування, щоб уникнути великої кількості сповіщень при імпорті великої кількості даних. Функція оновлення залишається доступною, коли хтось хоче перевірити інформацію вручну.
Конфіденційність є частиною функціональності, а не відмовою від відповідальності.
Історія подорожей може розкрити місця проживання, розпорядок дня та майбутні плани. Тому функція «Друзі» повинна бути більш явною, ніж звичайна соціальна функція.
- Для додавання когось потрібне запрошення, сканування QR-коду або особиста зустріч.
- Общий пакет містить дані карти, необхідні для функції «Друзі», а не копію бібліотеки фотографій.
- Функція домашнього обміну працює окремо та вимкнена за замовчуванням.
- Видалення друга видаляє локальний зв'язок та пов'язану з ним кешовану активність.
- Для використання Mapsake все ще не потрібен обліковий запис Mapsake.
Знімок друга ніколи не містить вихідні байти фотографії. Він містить позначки про подорожі, поля профілю, інформацію про об'єктив, дати, необхідні для статистичних даних, і досягнення, необхідні для інтерфейсів, які може відкривати користувач. Це обмеження не дозволяє перетворити багатий досвід на сервіс для обміну фотографіями.
Mapsake також розрізняє обмін з друзями та публічний посилання для браузера. Зв'язок з другом є взаємним і існує всередині програми. Публічна карта – це окремий, додатковий елемент для тих, хто хоче отримати посилання лише для читання. Увімкнення одного не вмикає автоматично інше.
Досягнення та друзі роблять атлас цікавішим, але вони не перетворюють його на публічний профіль. Цей кордон достатньо важливий, щоб його постійно підкреслювати в міру розвитку програми.
Виконайте оновлення.
Відкрити Досягнення Щоб виконати пошук по всьому каталогу та переглянути, що знаходиться найближче. Потім відкрийте Друзі,, поділіться посиланням запрошення або використовуйте опцію «поруч» та «QR-код» та порівняйте карти з кимось, кого ви знаєте.
Найкращий результат – це не вищий бал. Це розмова: місце, яке люблять обидві людини, регіон, про який одна людина ніколи не думала, або дивне досягнення, про яке ніхто не знав, що близький до його досягнення.