Screen Time API'sinde Apple'ın düzeltmesini istediğim 3 şey
Ekran süresini şınav çekerek kazandığın bir uygulama engelleyici olan HonorFit'i yapıyorum (onur sistemiyle çalışıyor, kamera yok). iPhone'da ve Android'de aynı uygulama: aynı fikir, kodun da çoğu aynı. Peki dürüst olayım mı? Android sürümünü kullanmak daha keyifli.
Bunun sebebi Android'in uygulama engellemede daha iyi olması değil. iOS'un Screen Time API'si engelleme kısmında aslında gerçekten sağlam. Sebebi, iOS'un seni üç belirli konuda kısıtlaması ve bu kısıtlamaların hiçbiri kullanıcıyı korumak için orada değil gibi görünüyor. İşte listem ve her biri için Apple'dan ne isteyeceğim. Kimseye gizlilik açısından bir şey kaybettirmeyecek şeylerde kalmaya çalıştım.
(Bu API üzerine geliştirmenin işin mutfağına dair halini ayrıca yazdım: Apple'ın belgelerinin söylemedikleri.)
1. Aynı anda yalnızca tek bir Ekran Süresi uygulaman olabilir
Diyelim ki zaten Brick, Opal ya da one sec kullanıyorsun ve HonorFit'i de denemek istiyorsun. iPhone'da bunu yapamazsın. İkinci uygulama Ekran Süresi erişimi istediğinde iOS izin penceresini bile göstermiyor. Sadece Family Controls'ün aynı anda yalnızca tek bir uygulama tarafından kullanılabileceğini söyleyen bir hata fırlatıyor. Bu hatayı kendim de gördüm ve başka geliştiriciler de bununla karşılaşıyor.
Geçiş yapmak için Ayarlar › Ekran Süresi › Ekran Süresi Erişimi Olan Uygulamalar bölümüne gidip diğer uygulamayı kapatman, bazen de telefonunu yeniden başlatman gerekiyor. HonorFit artık bu hatayı algılıyor ve kullanıcıya adım adım yol gösteriyor, çünkü ham hata mesajı normal bir insan için hiçbir şey ifade etmiyor.
İşin tuhaf yanı şu: Apple bu tür yetkilendirmeyi WWDC22'de tanıttığında, ebeveyn denetimi yetkilendirmesinin aksine bireysel yetkilendirmenin bir cihazdaki istenen sayıda uygulama tarafından kullanılabileceğini söylemişti. Bugün olan bu değil ve bunun belgelendiği bir yer de bulamadım.
Bu neden kullanıcıların yararına değil: insanlar araçları bir arada kullanıyor. Biri iş yerindeki yoğun odak seansları için Brick, akşamki scroll süresini kazanmak için de HonorFit kullanabilir. Apple'ın kısıtlamaları birleştirmek için zaten bir kuralı var: birden fazla ManagedSettingsStore aynı şeyi ayarladığında, Apple'ın deyişiyle "the most restrictive setting always wins" (en kısıtlayıcı ayar her zaman kazanır). Aynısını uygulamalar arasında da yapmak, insanların ikisini birden kullanmasını sağlar ve telefon bu şekilde ancak daha kilitli hale gelebilir, asla daha az değil.
2. Uygulama seçici hantal ve uygulamalar onu özelleştiremiyor
iPhone'da hangi uygulamaların engelleneceğini seçmek, Apple'ın FamilyActivityPicker'ı demek. Bu, uygulamanın değiştiremediği bir sistem penceresi; değiştirebildiğin tek şey bir satırlık üst ve alt bilgi metni. Bir kategori listesiyle açılıyor (Sosyal, Oyunlar, Eğlence...) ve asıl uygulamaları bulmak için bir kategorinin içine girmen gerekiyor. Android'de listeyi kendim oluşturuyorum, bu yüzden HonorFit yüklü uygulamalarını son 24 saatte her birini ne kadar kullandığına göre sıralı gösteriyor.
iOS'takinde beni rahatsız eden iki şey var:
- Yanlışlıkla koca bir kategoriyi engellemek çok kolay. Kategori satırını açmak yerine ona dokunursan, içindeki tüm uygulamaları seçmiş olursun, sonradan yükleyeceklerin de dahil. Çoğu uygulama için bu asla istediğin şey değil. Sen Instagram ve TikTok'u istiyorsun, "Sosyal" kategorisinin tamamını değil.
- Gününü asıl hangi uygulamaların yediğini göremiyorsun. Birinin bir uygulama engelleyici açmasının bütün sebebi "telefonda çok fazla vakit geçiriyorum" olması. Seçici, neyi engelleyeceğine karar verdikleri tek an ve onlara vakitlerinin nereye gittiğine dair sıfır bilgi veriyor. iPhone'un her uygulamada ne kadar vakit geçirdiğini tam olarak biliyor (Ayarlar'da duruyor işte), ama seçici bunu göstermiyor.
Bu hiçbir gizlilik kaybına yol açmaz. Seçiciyi iOS kendi sürecinde çiziyor. Uygulama içinde ne olduğunu hiç görmüyor, sadece seçtiğin şeyler için opak token'lar alıyor. HonorFit hangi uygulamaları seçtiğini kelimenin tam anlamıyla bilemiyor. Yani iOS kullanım sürelerini doğrudan seçicinin içinde gösterebilir ve uygulama yine hiçbir şey öğrenmez. Apple zaten DeviceActivityReport uzantılarıyla buna benzer bir şey yapıyor: kullanımını, uygulamanın okuyamadığı bir sandbox içinde gösteriyorlar.
- Seçicide kategorilerin tamamını mı yoksa sadece uygulamaları mı seçileceğini belirleyen bir seçenek; böylece bir uygulama engelleyici, yanlışlıkla kategori seçilemeyen, sadece uygulamalardan oluşan bir liste sunabilir (ve kullanmıyorsa web sitelerini gizleyebilir).
- Her uygulamanın yanında ölçülen ekran süresini gösterme ve ona göre sıralama seçeneği; iOS tarafından çizilir, böylece uygulama bu sayıları hiç görmez.
3. Kalan süren için doğru bir geri sayım göremiyorsun
HonorFit'te kazandığın süre sadece gerçekten engelli bir uygulamanın içindeyken azalıyor. O yüzden gösterilecek en bariz şey bir geri sayım: "12:34 kaldı", sen scroll yaptıkça azalıyor, çıkınca duruyor.
Android'de bu kolay. HonorFit'in arka plan hizmeti her saniye ekranda hangi uygulamanın olduğunu kontrol ediyor ve bildirim, Android'in yerleşik geri sayım sayacını kullanıyor; yani bildirim paneli onu her saniye kendiliğinden yeniden çiziyor. Paneli aşağı çekiyorsun ve tam olarak ne kadar süren kaldığını saniyesi saniyesine görüyorsun.
iPhone'da bu mümkün değil ve sebebi şu:
- iOS, engelli bir uygulamayı ne zaman açıp kapattığını uygulamaya hiç söylemiyor. Tek aldığın şey "şu kadar kullanım birikti" olayları. HonorFit her 15 saniyelik kullanım için bir tane ayarlıyor ve bunlar bildirimi güncelleyen bir arka plan uzantısına iletiliyor.
- Normal bir bildirim kendi kendine geri sayamaz, bu yüzden HonorFit'in yapabileceği en iyi şey her olay geldiğinde metni yenisiyle değiştirmek. iPhone'daki bildirimin dalga işaretiyle "~12:30 kaldı" demesinin sebebi bu: 15 saniyelik adımlarla atlıyor.
- Üstelik bu olaylar her zaman zamanında da gelmiyor. iOS 26'da geç geldiklerini ya da birkaçının aynı anda geldiğini gördüm.
- Live Activities (Canlı Etkinlikler) kendi kendine geri sayabiliyor, ama duraklayamıyor. Uygulamaya Instagram'dan çıktığını söyleyen hiçbir şey yok, yani bir Live Activity telefonun masada dururken de saymaya devam eder ve bu yanlış olur.
Sonuç olarak iPhone kullanıcıları kaba bir tahmin görüyor, Android kullanıcıları ise gerçek sayıyı.
DeviceActivity olayının, iOS'un kendisinin çizdiği bir geri sayımı yönetebilmesine izin verin: bir bildirimde, bir Live Activity'de ya da kalkan ekranında, yalnızca izlenen uygulamalar ekrandayken çalışan bir geri sayım. iOS bu kullanımı zaten saniyesi saniyesine takip ediyor, yani uygulamaya yeni hiçbir şey vermeden süreyi gösterebilir. İzleyici uzantısına basit "engelli uygulama açıldı / kapandı" callback'leri bile sorunun çoğunu çözerdi.Hepsi bu
Apple'a hakkını vermek lazım, buradaki gizlilik modeli gerçekten çok iyi. Uygulama neyi engellediğini ya da onu ne kadar kullandığını hiçbir zaman öğrenmiyor ve bunun değişmesini hiç istemem. Yukarıdaki üç şeyin hiçbiri bunu değiştirmez. Sadece iPhone uygulamalarının, Android sürümlerinin zaten olduğu kadar faydalı olmasını sağlarlar.
Sen de Screen Time üzerine geliştirme yapıyorsan ve bunlardan birini istiyorsan, lütfen Geri Bildirim Asistanı'ndan (Feedback Assistant) bildir. Anladığım kadarıyla bir şeyin fark edilmesini sağlayan şey, aynı konuda gelen çok sayıda rapor. Uygulamayı denemek istiyorsan da HonorFit iPhone ve Android'de ücretsiz. Belki bazılarınızın hoşuna gider!