Jestem pewien, że słyszałeś o smugach lub korzystałeś z aplikacji z nimi. Ale czy zastanawiałeś się kiedyś, dlaczego smugi są tak popularne i potężne? Cóż, oczywiste jest, że aplikacje chcą jak najwięcej Twojej uwagi, ale poza tym, czy wiesz, że kiedy popularna aplikacja do nauki Duolingo wprowadziła widżety na iOS do wyświetlania smug, zaangażowanie użytkowników wzrosło o 60%. Sześćdziesiąt procent to ogromna zmiana w zachowaniu i pokazuje, jak można wykorzystać wzorce „serii” do zwiększenia zaangażowania i zwiększenia wykorzystania. W najprostszej formie passa to liczba kolejnych dni, w ciągu których użytkownik wykonuje określoną czynność. Niektórzy definiują to również jako nawyk „zmodyfikowany” lub wskaźnik mający na celu zachęcanie do konsekwentnego używania. Ale passy wykraczają poza bycie wskaźnikiem lub rekordem w aplikacji; to jest bardziej psychologiczne. Na ludzkie instynkty łatwo wpływać, stosując odpowiednie czynniki. Spójrz na te trzy czynniki: postęp, dumę i strach przed przegapieniem (powszechnie nazywany FOMO). Co to wszystko ma wspólnego? Wysiłek. Im więcej wysiłku w coś włożysz, tym bardziej kształtuje to twoją tożsamość i tak smugi wkraczają w świat psychologii behawioralnej. Teraz z wielką mocą wiąże się wielka odpowiedzialność i dlatego smugi mają swoją ciemną stronę. W tym artykule zajmiemy się psychologią, UX i zasadami projektowania stojącymi za budowaniem skutecznego systemu smug. Przyjrzymy się (1) dlaczego nasze mózgi niemal instynktownie reagują na aktywność smug, (2) jak zaprojektować smugi w sposób, który rzeczywiście pomoże użytkownikom, oraz (3) pracą techniczną związaną z tworzeniem wzoru smug. Psychologia smug Aby zaprojektować i zbudować skuteczny system smug, musimy zrozumieć, w jaki sposób jest on zgodny z tym, jak podłączone są nasze mózgi. Na przykład, co sprawia, że jest tak skuteczny do tego stopnia, że czujemy tak intensywne zaangażowanie w ochronę naszych pasm? Istnieją trzy interesujące, dobrze udokumentowane zasady psychologii, które potwierdzają, co sprawia, że smugi są tak potężne i uzależniające. Niechęć do straty To prawdopodobnie najsilniejsza siła stojąca za smugami. Mówię to, ponieważ w większości przypadków prawie nie da się tego uniknąć w życiu. Pomyśl o tym w ten sposób: jeśli przyjaciel da ci 100 dolarów, będziesz szczęśliwy. Ale jeśli stracisz 100 dolarów z portfela, będzie to bolało znacznie bardziej. Waga emocjonalna tych sytuacji nie jest równa. Strata boli o wiele bardziej, niż zysk jest przyjemny. Pójdźmy dalej i powiedzmy, że daję ci 100 dolarów i proszę o zagranie. Istnieje 50% szans, że wygrasz kolejne 100 $ i 50% szans, że stracisz pierwotne 100 $. Czy wziąłbyś to? Nie zrobiłbym tego. Większość ludzi by tego nie zrobiła. To niechęć do strat. Jeśli się nad tym zastanowić, jest to logiczne, zrozumiałe, jest to ludzkie. Koncepcja niechęci do straty polega na tym, że odczuwamy ból związany z utratą czegoś dwa razy większy niż przyjemność zyskania czegoś o równej wartości. Z psychologicznego punktu widzenia strata utrzymuje się dłużej niż zyski. Prawdopodobnie widzisz, jak to odnosi się do smug. Zbudowanie zauważalnej passy wymaga wysiłku; w miarę narastania passy motywacja, która za nią stoi, zaczyna słabnąć; lub dokładniej, zaczyna mieć charakter drugorzędny. Oto przykład: załóżmy, że Twój znajomy od trzech dni zamyka „Przesuń pierścienie” na swoim zegarku Apple Watch. Nie mają prawie nic do stracenia poza chęcią osiągnięcia swojego celu i bycia konsekwentnym. Jednocześnie masz imponującą passę 219 dni. Istnieje prawdopodobieństwo, że utknąłeś w pułapce strachu przed utratą. Najprawdopodobniej nie myślisz w tym momencie o osiągnięciu; chodzi raczej o ochronę zainwestowanego wysiłku, a to jest niechęć do strat. Duolingo wyjaśnia, w jaki sposób niechęć do strat przyczynia się do niechęci użytkownika do przerwania długiej passy, nawet w najbardziej leniwe dni. W pewnym sensie passa może przekształcić się w nawyk, gdy ustabilizuje się niechęć do strat. Model zachowania Fogga (B = MAP) Teraz, gdy rozumiemy strach przed utratą wysiłku włożonego w dłuższe passy, pojawia się kolejne pytanie: co sprawia, że w ogóle robimy to, dzień po dniu, nawet zanim passa się zwiększy? O to właśnie chodzi w Modelu Zachowania Fogga. Jest to stosunkowo proste. Zachowanie (B) ma miejsce tylko wtedy, gdy trzy czynniki — Motywacja (M), Zdolność (A) i Podpowiedź (P) — zbiegają się w tym samym momencie. Zatem równanie B=MAP. Jeśli w tym momencie brakuje któregokolwiek z tych czynników, choćby jednego, zachowanie nie wystąpi. Zatem, aby system smug był skuteczny i powtarzalny, muszą wystąpić wszystkie trzy czynniki: Motywacja Jest to kwestia delikatna i nie występuje stale. Są dni, kiedy jesteśpodekscytowany nauką hiszpańskiego, a zdarzają się dni, w których nie masz nawet odrobiny siły woli, aby nauczyć się tego języka. Sama motywacja do budowania nawyku jest zawodna i od pierwszego dnia jest przegraną walką. ZdolnośćAby zrekompensować ograniczenia motywacji, kluczowe znaczenie mają umiejętności. W tym kontekście zdolność oznacza łatwość działania, tj. wysiłek jest tak łatwy, że nierealistyczne jest twierdzenie, że jest to niemożliwe. Większość aplikacji celowo z tego korzysta. W Apple Fitness wystarczy, że będziesz stać przez jedną minutę w ciągu godziny, aby osiągnąć cel w postaci stoiska. Duolingo potrzebuje tylko jednej ukończonej lekcji. Zadania te nie wymagają aż tak dużego wysiłku. Bariera jest tak niska, że nawet w najgorsze dni możesz to zrobić. Ale połączony wysiłek trwającej passy rodzi myśl o jej utracie. PodpowiedźTo właśnie uzupełnia równanie. Ludzie są z natury zapominalscy, więc tak, umiejętności mogą nam pomóc w 90%. Ale podpowiedź przypomina nam o działaniu. Smugi są z założenia trwałe, dlatego użytkownikom należy stale przypominać o konieczności działania. Aby zobaczyć, jak potężny może być monit, Duolingo przeprowadziło test A/B, aby sprawdzić, czy mała czerwona plakietka na ikonie aplikacji zwiększa spójne użycie. Spowodowało to 6% wzrost liczby aktywnych użytkowników dziennie. Tylko czerwona odznaka. Ograniczenia modelu Biorąc to wszystko pod uwagę, model Fogga ma pewne ograniczenia: krytycy i współczesne badania zauważyli, że projekt, który w zbyt dużym stopniu opiera się na podpowiedziach, takich jak agresywne powiadomienia, stwarza ryzyko zmęczenia psychicznego. Ciągłe powiadomienia i nadgodziny mogą powodować rezygnację użytkowników. Więc uważaj na to. Efekt Zeigarnika Jak się czujesz, gdy zostawiasz zadanie lub projekt w połowie ukończone? Wiele osób irytuje to, ponieważ niedokończone zadania zajmują więcej przestrzeni mentalnej niż te, które wykonujemy. Kiedy coś się skończy i zniknie, mamy tendencję do zapominania o tym. Kiedy coś pozostaje niedokończone, zwykle obciąża to nasze umysły. Właśnie dlatego produkty cyfrowe wykorzystują sztuczne wskaźniki postępu, takie jak pasek ukończenia profilu Upwork, aby poinformować użytkownika, że jego profil jest ukończony tylko w 60%. Namawia użytkownika, aby dokończył to, co zaczął.
Spójrzmy na inny przykład. W aplikacji z listą zadań masz pięć zadań i na koniec dnia tylko cztery z nich zaznaczasz jako ukończone. Wielu z nas poczuje się niespełnionych z powodu tego jednego niedokończonego zadania. To właśnie jest efekt Zeigarnika. Efekt Zeigarnika został zademonstrowany przez psychologa Blumę Zeigarnik, która opisała, że mamy tendencję do utrzymywania w pamięci niekompletnych zadań dłużej niż zadania zakończone. Wzór smug naturalnie nawiązuje do tego w projektowaniu UX. Załóżmy, że masz 63. dzień dobrej passy uczenia się. W tym momencie znajdujesz się w ciągłym schemacie niedokończonych spraw. Twój mózg rzadko o tym zapomina, ponieważ siedzi z tyłu głowy. W tym momencie Twój mózg staje się tym, który wysyła Ci powiadomienia. Kiedy połączysz te siły psychologiczne, zaczniesz naprawdę rozumieć, dlaczego smugi nie są tylko zwykłą funkcją aplikacji; są w stanie zmienić ludzkie zachowanie. Ale gdzieś po drodze – nie mogę dokładnie powiedzieć, kiedy, bo u każdego jest to inaczej – sprawy osiągają punkt, w którym passa zmienia się z „zabawy” w coś, czego nie możesz sobie pozwolić na stratę. Nie chcesz, żeby 58 dni wysiłku poszło na marne, prawda? To właśnie sprawia, że system smug jest skuteczny. Jeśli zrobisz to dobrze, smugi pomagają użytkownikom budować zdumiewające nawyki, które pozwalają osiągnąć cel. Może to być codzienne czytanie lub regularne chodzenie na siłownię. Te powtarzające się działania (czasami niewielkie) z czasem się kumulują i stają się widoczne w naszym codziennym życiu. Ale każdy medal ma dwie strony. Cienka linia między nawykiem a przymusem Jeśli śledzisz dalej, możesz już stwierdzić, że systemy pasmowe mają ciemną stronę. Tworzenie nawyku polega na konsekwentnym dążeniu do powtarzalnego celu. Przymus natomiast to konsekwentna praca nad celem, który nie jest już potrzebny, ale którego się trzyma ze strachu lub presji. To cienka jak brzytwa linia. Codziennie rano myjesz zęby bez zastanowienia; jest to działanie automatyczne i instynktowne, a jego jasnym celem jest dobry oddech. To passa, która tworzy dobry nawyk. System etycznych smug daje użytkownikom przestrzeń do oddychania. Jeśli z jakiegoś powodu nie szczotkujesz zębów rano, możesz to zrobić w południe. Niedoskonałość jest dozwolona bez obawy, że stracisz długi wysiłek. Przymus ma odwrotną drogę: passa wywołuje niepokój, poczucie winy, a nawet wyczerpanie, a czasem wrażenie, że pomimo wszystkich wysiłków niczego nie osiągnąłeś.praca. Działasz nie dlatego, że chcesz, ale dlatego, że podświadomie boisz się, że Twój postęp zostanie wyzerowany. Ktoś nawet doskonale to opisał: „Czułem, że oszukuję, ale po prostu było mi to obojętne. Bez swojej passy jestem nikim”. To pokazuje, jak ekstremalne smugi mogą mieć na danej osobie. Do tego stopnia, że użytkownicy zaczną wiązać swoją wartość z arbitralnym miernikiem, a nie z pierwotnym celem lub powodem, dla którego rozpoczęli passę. Pasja staje się tym, kim są, a nie tylko tym, co robią. Dobrze zaprojektowany system etycznych smug powinien być dla użytkownika zachętą, a nie presją czy obowiązkiem. Odnosi się to do równowagi motywacji wewnętrznej i zewnętrznej. Motywacja zewnętrzna (nagrody zewnętrzne, unikanie kar) może zachęcić użytkowników do rozpoczęcia pracy, ale motywacja wewnętrzna (wykonanie zadania w celu osobistym, takim jak nauka hiszpańskiego, ponieważ naprawdę chcesz porozumieć się z ukochaną osobą) jest silniejsza w przypadku długoterminowego zaangażowania. Dobry system powinien skłaniać się ku motywacji wewnętrznej, ostrożnie wykorzystując elementy zewnętrzne, czyli przypominać użytkownikom, jak daleko zaszli, a nie grozić im tym, co mogą stracić. Powtórzę: jest to cienka linia. Prostym testem podczas projektowania systemu smugowego jest poświęcenie trochę czasu i przemyślenie, czy Twoje produkty zarabiają, sprzedając rozwiązania problemów wywołanych przez Twój produkt. Jeśli tak, istnieje duże prawdopodobieństwo, że wykorzystujesz użytkowników. Zatem pojawia się kolejne pytanie: jeśli zdecyduję się na użycie smugi, jak zaprojektować ją w sposób, który rzeczywiście pomoże użytkownikom osiągnąć ich cele? UX dobrego projektu systemu smug Wierzę, że właśnie w tym miejscu większość projektów albo tworzy skuteczny system smug, albo całkowicie go psuje. Przyjrzyjmy się zasadom UX dobrego projektu passy. Zachowaj to bez wysiłku Prawdopodobnie słyszałeś to już wcześniej, może z książek takich jak Atomic Habits, ale warto wspomnieć, że jednym z najłatwiejszych sposobów kształtowania nawyków jest uczynienie czynności małą i łatwą. Jest to podobne do współczynnika zdolności, który omawialiśmy w modelu zachowania Fogga. Pierwszą zasadą każdego projektu serii powinno być uczynienie wymaganych działań tak niewielkimi, jak to tylko możliwe, przy jednoczesnym osiągnięciu postępu. Jeśli codzienna czynność wymaga siły woli, nie przetrwa dłużej niż pięć dni. Dlaczego? Nie możesz być zmotywowany przez pięć dni z rzędu. Przykład: jeśli prowadzisz aplikację do medytacji, nie musisz zmuszać użytkowników do odbycia 20-minutowej sesji tylko po to, aby podtrzymać dobrą passę. Zamiast tego spróbuj poświęcić jedną minutę, a może nawet trzydzieści sekund. Jak to się mówi, małe krople wody tworzą potężny ocean). Małe wysiłki z czasem zamieniają się w duże osiągnięcia. To powinien być cel: usunąć tarcia, zwłaszcza gdy moment może być trudny. Kiedy użytkownicy są zestresowani lub przytłoczeni, daj im znać, że samo pojawienie się, nawet na kilka sekund, liczy się jako wysiłek. Zapewnij wyraźną informację wizualną Ludzie są z natury wzrokowcami. W większości przypadków musimy coś zobaczyć, aby w to uwierzyć; istnieje potrzeba wizualizacji rzeczy, aby lepiej je zrozumieć i spojrzeć na nie z odpowiedniej perspektywy. Właśnie dlatego we wzorach pasm często wykorzystuje się elementy wizualne, takie jak wykresy, znaczniki wyboru, pierścienie postępu i siatki, do wizualizacji wysiłku. Spójrz na wykres wkładu GitHuba. Jest to prosta wizualizacja spójności. Jednak programiści wdychają to jak tlen.
Najważniejsze, aby system smug nie sprawiał wrażenia abstrakcyjnego. Powinno sprawiać wrażenie prawdziwego i zarobionego. Na przykład pierścienie aktywności Duolingo i Apple Fitness korzystają z przejrzystych projektów animacji po zakończeniu serii, a GitHub wyświetla dane historyczne dotyczące spójności użytkownika na przestrzeni czasu.
Użyj dobrego wyczucia czasu Wspomniałem wcześniej, że ludzie z natury są zapominalscy i że podpowiedzi mogą pomóc w utrzymaniu pędu do przodu. Bez podpowiedzi większość nowych użytkowników zapomina kontynuować pracę. Życie może być pełne zajęć, motywacja znika i różne rzeczy się dzieją. Nawet długoletni użytkownicy odnoszą korzyści z podpowiedzi, chociaż w większości przypadków są już zamknięci w pętli nawyków. Niemniej jednak nawet najbardziej zaangażowana osoba może przypadkowo przegapić dzień. Twój system serii zdecydowanie wymaga przypomnień. Najczęściej używanymi przypomnieniami są powiadomienia push. Czas naprawdę ma znaczenie podczas pracy z powiadomieniami push. Rodzaj aplikacji też ma znaczenie. Wysłanie powiadomienia o 9:00 z informacją „Dzisiaj nie ćwiczyłeś” jest po prostu dziwne w przypadku aplikacji do nauki, ponieważ wiele osób ma rzeczy do zrobienia w ciągu dnia, zanim w ogóle pomyśli o ukończeniu lekcji. Jeśli jednak mówimy o aplikacji fitness, to takjest rozsądne i być może nawet oczekuje się, że zostanie przypomniane wcześniej tego samego dnia. Powiadomienia push różnią się znacznie w zależności od kategorii aplikacji. Na przykład aplikacje fitness wykazują większe zaangażowanie dzięki powiadomieniom wczesnym rankiem (7–8 rano), podczas gdy aplikacje zwiększające produktywność mogą działać lepiej wczesnym popołudniem. Kluczem jest przetestowanie A/B czasu działania aplikacji w oparciu o zachowania użytkowników, a nie zakładanie, że wszystko jest uniwersalne. To, co działa w przypadku aplikacji do medytacji, może nie działać w przypadku modułu do śledzenia kodowania. Inne metody podpowiedzi to czerwone kropki na ikonie aplikacji, a nawet widżety aplikacji. Badania są różne, ale przeciętny człowiek odblokowuje swoje urządzenie 50–150 razy dziennie (PDF). Jeśli użytkownik zobaczy czerwoną kropkę w aplikacji lub widgecie, która wskazuje aktualną passę przy każdym odblokowaniu telefonu, zwiększa to jego zaangażowanie. Tylko nie przesadzaj; podpowiedź powinna służyć jako przypomnienie, a nie nagana. Świętuj kamienie milowe System serii powinien starać się świętować kamienie milowe, aby ponownie rozpalić emocje, szczególnie w przypadku użytkowników, którzy mają za sobą dobrą passę. Kiedy użytkownik osiągnie dzień 7, dzień 30, dzień 50, dzień 100, dzień 365, powinieneś zrobić z tego wielką sprawę. Doceniaj osiągnięcia — szczególnie w przypadku długoletnich użytkowników.
Jak widzieliśmy wcześniej, Duolingo wpadło na ten pomysł i wdrożyło animowaną grafikę, która celebruje kamienie milowe za pomocą konfetti. Niektóre platformy zapewniają nawet znaczne nagrody dodatkowe, które potwierdzają wysiłki użytkowników. Może to być korzystne dla aplikacji, ponieważ użytkownicy mają tendencję do publicznego udostępniania swoich kamieni milowych w mediach społecznościowych. Kolejną korzyścią jest przewidywanie, które pojawia się przed osiągnięciem kamieni milowych. Nie chodzi tylko o podtrzymanie passy w nieskończoność; użytkownicy mają na co czekać. Skorzystaj z mechanizmów łaski Życie jest nieprzewidywalne. Ludzie się rozpraszają. Każdy dobry system smug powinien spodziewać się niedoskonałości. Jednym z największych zagrożeń psychologicznych dla systemu serii jest twardy reset do zera już po jednym opuszczonym dniu. „Etyczny” system smug powinien zapewnić użytkownikowi pewien luz. Załóżmy, że masz 90-dniową passę nauki gry w szachy. Byłeś konsekwentny przez trzy dobre miesiące, aż pewnego dnia Twój telefon rozładował się w podróży i tak po prostu 90 zamieniło się w 0 – wszystko, cały ten wysiłek, zostaje wymazane, a postęp znika. Użytkownik może być całkowicie zdruzgotany. Myśl o odbudowaniu go od zera jest tak demoralizująca, że wysiłek nie jest tego wart. W najgorszym przypadku użytkownik może porzucić aplikację, czując, że poniósł porażkę. Rozważ dodanie mechanizmu „łaski” do swojego systemu smug:
Streak FreezePozwól użytkownikom celowo przegapić dzień bez kar. Dodatkowy czasPoczekaj kilka godzin (2–3) po zwykłym terminie, zanim uruchomisz reset. Modele rozpadu Zamiast twardego resetu, passa zmniejsza się o niewielką wartość, np. za każdy pominięty dzień od serii odejmowanych jest 10 dni.
Używaj zachęcającego tonu Porównajmy dwa komunikaty wyświetlane użytkownikom w przypadku przerwania passy:
„Straciłeś 42-dniową passę. Zacznij od nowa.” "Pojawiałeś się przez 42 dni z rzędu. To niesamowity postęp! Chcesz spróbować jeszcze raz?"
Obydwa przekazują te same informacje, ale ich wpływ emocjonalny jest inny. Pierwsza wiadomość najprawdopodobniej sprawi, że użytkownik poczuje się zdemoralizowany i spowoduje, że zrezygnuje. Druga wiadomość celebruje to, co już zostało osiągnięte i delikatnie zachęca użytkownika do ponownej próby. Wyzwania związane z projektowaniem systemów pasmowych Zanim przejdziemy do technicznych szczegółów budowy systemu smug, powinieneś zdawać sobie sprawę z wyzwań, jakie możesz napotkać. Jak można się spodziewać, sprawy mogą się skomplikować. Obsługa stref czasowych Nie bez powodu obsługa godziny i daty należy do najtrudniejszych koncepcji, z jakimi borykają się programiści. Należy wziąć pod uwagę formatowanie, internacjonalizację i wiele więcej. Pozwól, że cię zapytam: co liczy się jako dzień? Wiemy, że świat działa w różnych strefach czasowych, a gdyby tego było mało, w niektórych regionach czas letni (DST) obowiązuje dwa razy w roku. Od czego w ogóle zaczynasz zajmować się tymi przypadkami Edge? Co liczy się jako „początek” jutra? Niektórzy programiści starają się tego uniknąć, używając jednej centralnej strefy czasowej, takiej jak UTC. W przypadku niektórych użytkowników dałoby to prawidłowe wyniki, ale w przypadku niektórych może to potrwać godzinę, dwie godziny lub dłużej. Ta niespójność psuje wrażenia użytkownika. Użytkownicy nie przejmują się tym, jak radzisz sobie z czasem za kulisami; oczekują jedynie, że jeśli wykonają serię akcji o 23:40, powinno to zostać zarejestrowane dokładnie o tej porze, w ich kontekście. Należy zdefiniować „jeden dzień” w oparciu o lokalną strefę czasową użytkownika, a nie czas serwera. Jasne, możesz pójść na łatwiznętrasuj i resetuj smugi na całym świecie dla wszystkich użytkowników o północy czasu UTC, ale w dużym stopniu tworzysz niesprawiedliwość. Ktoś w Kalifornii ma zawsze osiem dodatkowych godzin na wykonanie zadania niż ktoś mieszkający w Londynie. To niesprawiedliwy błąd projektowy, który karze niektórych użytkowników ze względu na ich lokalizację. A co jeśli ta osoba w Londynie tylko odwiedza, wykona zadanie, a następnie wróci do innej strefy czasowej? Jednym ze skutecznych rozwiązań jest poproszenie użytkowników o wyraźne ustawienie strefy czasowej podczas wdrażania (najlepiej po pierwszym uwierzytelnieniu). Dobrym pomysłem jest dołączenie subtelnej notatki, że podanie informacji o strefie czasowej służy aplikacji wyłącznie do dokładnego śledzenia postępów, a nie jako dane osobowe. Kolejnym dobrym pomysłem jest uczynienie z tego ustawienia zmiennego. Sugeruję, aby każdy unikał bezpośredniej obsługi logiki strefy czasowej w aplikacji. Korzystaj ze sprawdzonych bibliotek dat, takich jak Moment.js lub pytz (Python) itp. Nie ma potrzeby wymyślania koła na nowo w przypadku czegoś tak złożonego. Opuszczone dni i przypadki Edge Kolejnym wyzwaniem, o które powinieneś się martwić, są niekontrolowane przypadki brzegowe, takie jak zaspanie użytkowników, przestoje serwera, opóźnienia, awarie sieci i tak dalej. Pomocne może być wykorzystanie koncepcji mechanizmów łaski, takich jak te, które omawialiśmy wcześniej. Dwugodzinne okno karne może pomóc zarówno użytkownikowi, jak i programiście, w tym sensie, że użytkownicy nie są surowo karani za niekontrolowane okoliczności życiowe. Dla programistów okna prolongaty są pomocne w tych niekontrolowanych momentach, gdy serwer przestaje działać w środku nocy. Przede wszystkim nigdy nie ufaj klientowi. Zawsze sprawdzaj poprawność po stronie serwera. Serwer powinien być jedynym źródłem prawdy. Zapobieganie oszustwom Ponownie nie mogę tego wystarczająco podkreślić: upewnij się, że wszystko zostało sprawdzone po stronie serwera. Użytkownicy są ludźmi i ludzie mogą oszukiwać, jeśli otrzymają taką możliwość. Jest to nieuniknione. Możesz spróbować:
Przechowywanie wszystkich akcji ze znacznikami czasu UTC. Klient może wysłać swój czas lokalny, ale serwer może natychmiast przekonwertować go na UTC i sprawdzić z czasem serwera. W ten sposób, jeśli znacznik czasu klienta jest podejrzanie odległy, system może odrzucić go jako błąd, a interfejs użytkownika może odpowiednio zareagować. Korzystanie ze śledzenia opartego na zdarzeniach. Innymi słowy, przechowuj zapis każdej akcji z metadanymi, w tym takimi informacjami, jak identyfikator użytkownika, typ wykonanej akcji oraz sygnatura czasowa i strefa czasowa. Pomaga to w walidacji.
Budowa silnika systemu smug To nie jest samouczek dotyczący kodu, więc będę unikać zrzucania na Ciebie dużej ilości kodu. Zajmę się tym praktycznie i opiszę, jak ogólnie działa silnik systemu smugowego, jeśli chodzi o architekturę, przepływ i niezawodność. Architektura rdzenia Jak już mówiłem kilka razy, uczyń serwer jedynym źródłem prawdy dla danych pasmowych. Architektura może wyglądać mniej więcej tak na serwerze:
Przechowuj dane każdego użytkownika w bazie danych. Zapisz bieżący magazyn serii (domyślnie 0) jako liczbę całkowitą. Przechowuj preferencje strefy czasowej, tj. ciąg znaków strefy czasowej IANA (albo pośrednio na podstawie lokalnego znacznika czasu, albo jawnie, prosząc użytkownika o wybranie strefy czasowej). Na przykład „Ameryka/Nowy_Jork”. Obsługuj całą logikę, aby określić, czy passa trwa, czy się kończy, sprawdzając strefę czasową względem lokalnej strefy czasowej użytkownika.
Tymczasem po stronie klienta:
Wyświetla bieżącą serię, zwykle pobieraną z serwera. Wyślij wykonaną akcję w formie metadanych na serwer, aby sprawdzić, czy użytkownik rzeczywiście wykonał kwalifikującą się akcję pasową. Przekazuj wizualne informacje zwrotne na podstawie odpowiedzi serwera.
Krótko mówiąc, mózg znajduje się na serwerze, a klient służy do wyświetlania i przesyłania zdarzeń. Oszczędza to wiele awarii i przypadków brzegowych, a także ułatwia aktualizacje i poprawki. Przepływ logiczny Przeprowadźmy symulację działania minimalnie wydajnego silnika systemu smug, gdy użytkownik wykona akcję:
Użytkownik kończy kwalifikującą się akcję pasmową. Klient wysyła zdarzenie do serwera jako metadane. Może to być „Użytkownik X zakończył akcję Y w znaczniku czasu Z”. Serwer odbiera to zdarzenie i przeprowadza podstawową weryfikację. Czy to prawdziwy użytkownik? Czy są uwierzytelnione? Czy akcja jest słuszna? Czy strefa czasowa jest spójna? Jeśli to się powiedzie, serwer pobierze dane dotyczące serii użytkownika z bazy danych. Następnie przekonwertuj otrzymany znacznik czasu akcji na lokalną strefę czasową użytkownika. Pozwól serwerowi porównać daty kalendarzowe (nie znaczniki czasu) w lokalnej strefie czasowej użytkownika: Jeżeli jest to ten sam dzień, to czynność jest zbędna i nie następuje żadna zmianapasemko. Jeśli jest to następny dzień, passa wydłuża się i zwiększa o 1. Jeśli przerwa będzie dłuższa niż jeden dzień, passa zostanie przerwana. Jednak w tym miejscu możesz zastosować mechanikę łaski. Jeśli mechanizm łaski zostanie pominięty, zresetuj passę do 1.
Jeśli zdecydujesz się zapisać dane historyczne dotyczące najważniejszych osiągnięć, zaktualizuj zmienne, takie jak „najdłuższa passa” lub „łączna liczba aktywnych dni”. Następnie serwer aktualizuje bazę danych i odpowiada klientowi. Coś takiego:
{ „bieżąca_seria”: 48, „najdłuższa seria”: 50, „total_active_days”: 120, „streak_extended”: prawda, }
Kolejnym rozwiązaniem jest ponowienie przez serwer próby lub odrzucenie i powiadomienie klienta, gdy w trakcie procesu coś się nie powiedzie. Budowanie odporności Jak wspomniano wcześniej, utrata passy przez użytkowników z powodu błędów lub przestoju serwera to okropny UX i użytkownicy nie spodziewają się, że poniosą za to upadek. Dlatego Twój system smug powinien mieć zabezpieczenia na wypadek takich scenariuszy. Jeśli serwer nie działa z powodu prac konserwacyjnych (lub z innego powodu), rozważ tymczasowe dodatkowe godziny na naprawienie problemu, aby działania mogły zostać przesłane z opóźnieniem i nadal się liczyły. Możesz także powiadomić użytkowników, zwłaszcza jeśli sytuacja może mieć wpływ na ciągłą passę. Uwaga: utwórz backdoor administratora, za pomocą którego można ręcznie przywrócić dane. Błędy są nieuniknione, a niektórzy użytkownicy dzwoniliby do Twojej aplikacji lub prosili o wsparcie, gdy ich passa została przerwana z powodu, nad którym nie mogli zapanować. Jeśli po sprawdzeniu użytkownik ma rację, powinno być możliwe ręczne przywrócenie smug. Wniosek Jedno pozostaje jasne: smugi są naprawdę potężne ze względu na to, jak działa psychologia człowieka na podstawowym poziomie. Najlepszy system smug to taki, o którym użytkownicy nie myślą świadomie. Stało się rutyną przynoszącą natychmiastowe rezultaty lub widoczne postępy, niczym mycie zębów, które staje się regularnym nawykiem. Powiem tylko tyle: nie wszystkie produkty wymagają systemu smug. Czy naprawdę powinieneś wymuszać spójność tylko dlatego, że chcesz mieć codziennie aktywnych użytkowników? Odpowiedź może równie dobrze brzmieć „nie”.