3 rzeczy, które Apple powinno poprawić w Screen Time API
Robię HonorFit, blokadę aplikacji, w której zarabiasz czas przed ekranem, robiąc pompki (na słowo honoru, bez kamery). To ta sama aplikacja na iPhone'a i Androida, ten sam pomysł i w większości ten sam kod. I szczerze? Wersja na Androida jest wygodniejsza w użyciu.
Nie dlatego, że Android lepiej blokuje aplikacje. Samo blokowanie w Screen Time API na iOS działa naprawdę solidnie. Chodzi o to, że iOS ogranicza cię w trzech konkretnych sprawach i żadne z tych ograniczeń nie wygląda na coś, co chroni użytkowników. Oto moja lista, razem z tym, o co poprosiłbym Apple. Starałem się trzymać rzeczy, które nikogo nie kosztowałyby ani odrobiny prywatności.
(Jeśli chcesz konkretów o budowaniu na tym API, opisałem je osobno: czego nie powie ci dokumentacja Apple.)
1. Z Czasu przed ekranem może naraz korzystać tylko jedna aplikacja
Powiedzmy, że używasz już Brick, Opal albo one sec i chcesz wypróbować też HonorFit. Na iPhonie się nie da. Kiedy druga aplikacja prosi o dostęp do Czasu przed ekranem, iOS nawet nie pokazuje okna z prośbą o zgodę. Po prostu zwraca błąd, że Family Controls może naraz używać tylko jedna aplikacja. Sam widziałem ten błąd i inni deweloperzy też na niego trafiają.
Żeby się przełączyć, musisz wejść w Ustawienia › Czas przed ekranem › Aplikacje z dostępem do Czasu przed ekranem, wyłączyć tamtą aplikację, a czasem jeszcze zrestartować telefon. HonorFit wykrywa teraz ten błąd i prowadzi ludzi przez te kroki, bo surowy komunikat o błędzie nic nie mówi zwykłemu człowiekowi.
I tu robi się dziwnie: kiedy Apple przedstawiało ten rodzaj autoryzacji na WWDC22, mówiło, że w przeciwieństwie do autoryzacji w ramach kontroli rodzicielskiej autoryzacja indywidualna może być używana przez dowolną liczbę aplikacji na urządzeniu. Dziś tak to nie działa, a nigdzie nie znalazłem tego udokumentowanego.
Dlaczego to nie leży w interesie użytkowników: ludzie łączą różne narzędzia. Ktoś może używać Bricka do sesji twardego skupienia w pracy, a HonorFit do zarabiania na wieczorne scrollowanie. Apple ma już zasadę łączenia ograniczeń: kiedy kilka obiektów ManagedSettingsStore ustawia to samo, to słowami Apple „the most restrictive setting always wins” (zawsze wygrywa najbardziej restrykcyjne ustawienie). Ta sama zasada między aplikacjami pozwoliłaby korzystać z obu, a telefon mógłby przez to być tylko bardziej zablokowany, nigdy mniej.
2. Okno wyboru aplikacji jest toporne, a aplikacje nie mogą go dostosować
Na iPhonie wybieranie aplikacji do zablokowania oznacza FamilyActivityPicker od Apple. To systemowy arkusz, którego aplikacja nie może zmienić, poza jedną linijką tekstu w nagłówku i stopce. Otwiera się na liście kategorii (Społecznościowe, Gry, Rozrywka…), a konkretnych aplikacji szukasz, wchodząc w kategorię. Na Androidzie listę buduję sam, więc HonorFit pokazuje zainstalowane aplikacje posortowane według tego, ile używałeś każdej z nich przez ostatnie 24 godziny.
W wersji na iOS przeszkadzają mi dwie rzeczy:
- Bardzo łatwo przez przypadek zablokować całą kategorię. Stuknij wiersz kategorii zamiast go rozwinąć i właśnie wybrałeś wszystkie aplikacje z tej kategorii, łącznie z tymi, które zainstalujesz później. W wielu aplikacjach to nigdy nie jest to, czego chcesz. Chcesz Instagrama i TikToka, a nie całych „Społecznościowych”.
- Nie widać, które aplikacje naprawdę zjadają ci dzień. Cały powód, dla którego ktoś otwiera blokadę aplikacji, to „spędzam za dużo czasu na telefonie”. Okno wyboru to jedyny moment, w którym decyduje, co zablokować, a nie daje mu żadnej informacji o tym, gdzie idzie jego czas. Twój iPhone wie dokładnie, ile czasu spędziłeś w każdej aplikacji (masz to w Ustawieniach), ale okno wyboru tego nie pokazuje.
To nie kosztowałoby ani odrobiny prywatności. Okno wyboru rysuje iOS we własnym procesie. Aplikacja nigdy nie widzi, co w nim jest, dostaje tylko nieprzezroczyste tokeny tego, co wybrałeś. HonorFit dosłownie nie wie, jakie aplikacje wybrałeś. iOS mógłby więc pokazywać czas użycia bezpośrednio w oknie wyboru, a aplikacja i tak niczego by się nie dowiedziała. Apple robi już coś podobnego w rozszerzeniach DeviceActivityReport, które pokazują twoje użycie w piaskownicy, której aplikacja nie może odczytać.
- Opcję okna wyboru, która pozwala wybierać całe kategorie albo tylko aplikacje, żeby blokada aplikacji mogła pokazać listę samych aplikacji bez przypadkowego zaznaczania kategorii (i ukryć strony internetowe, jeśli z nich nie korzysta).
- Opcję sortowania według zmierzonego czasu przed ekranem i pokazywania go przy każdej aplikacji, rysowanego przez iOS, żeby aplikacja nigdy nie widziała tych liczb.
3. Nie widać dokładnego odliczania pozostałego czasu
W HonorFit zarobiony czas schodzi tylko wtedy, gdy faktycznie jesteś w zablokowanej aplikacji. Najbardziej oczywiste jest więc pokazanie odliczania: „zostało 12:34”, tykające, gdy scrollujesz, i zatrzymujące się, gdy wychodzisz.
Na Androidzie to proste. Usługa HonorFit działająca w tle co sekundę sprawdza, która aplikacja jest na ekranie, a powiadomienie korzysta z wbudowanego w Androida licznika odliczającego, więc panel powiadomień sam odświeża go co sekundę. Ściągasz panel i widzisz dokładnie, ile czasu ci zostało, co do sekundy.
Na iPhonie to niemożliwe, i oto dlaczego:
- iOS nigdy nie mówi aplikacji, kiedy otwierasz albo zamykasz zablokowaną aplikację. Dostajesz tylko zdarzenia typu „uzbierało się tyle a tyle użycia”. HonorFit ustawia jedno na każde 15 sekund użycia, a trafiają one do rozszerzenia działającego w tle, które aktualizuje powiadomienie.
- Zwykłe powiadomienie nie potrafi samo odliczać, więc najlepsze, co HonorFit może zrobić, to podmieniać tekst za każdym razem, gdy przyjdzie zdarzenie. Dlatego powiadomienie na iPhonie mówi „zostało ~12:30” z tyldą: przeskakuje co 15 sekund.
- Te zdarzenia też nie zawsze przychodzą na czas. Na iOS 26 widziałem, jak przychodzą z opóźnieniem albo po kilka naraz.
- Aktywności na żywo (Live Activities) potrafią same odliczać, ale nie mogą się zatrzymać. Nic nie mówi aplikacji, że wyszedłeś z Instagrama, więc Aktywność na żywo dalej by tykała, gdy telefon leży na stole, a to byłoby błędne.
Użytkownicy iPhone'a dostają więc przybliżenie, a użytkownicy Androida prawdziwą liczbę.
DeviceActivity może sterować odliczaniem, które rysuje sam iOS: w powiadomieniu, w Aktywności na żywo albo na osłonie, i które biegnie tylko wtedy, gdy monitorowane aplikacje są na ekranie. iOS i tak śledzi to użycie co do sekundy, więc mógłby pokazać czas, nie przekazując aplikacji niczego nowego. Nawet proste wywołania zwrotne „zablokowana aplikacja otwarta / zamknięta” do rozszerzenia monitora załatwiłyby większość sprawy.To tyle
Żeby być fair wobec Apple: model prywatności jest tu naprawdę dobry. Aplikacja nigdy nie wie, co zablokowałeś ani ile tego używasz, i nie chciałbym, żeby to się zmieniło. Żadna z trzech rzeczy powyżej by tego nie zmieniła. Pozwoliłyby po prostu aplikacjom na iPhone'a być tak pomocnymi, jak wersje na Androida już są.
Jeśli też budujesz na Czasie przed ekranem i chcesz którejś z tych zmian, zgłoś ją w Feedback Assistant. Z tego, co wiem, właśnie duplikaty zgłoszeń sprawiają, że ktoś coś zauważa. A jeśli chcesz po prostu wypróbować aplikację, HonorFit jest za darmo na iPhone'a i Androida. Może komuś z was się spodoba!