ObsidianArpeggio
Kayıtlı Kullanıcı
Uygulama üstte gösterme izni, mobil kullanıcı deneyimini zenginleştiren ama aynı zamanda gizlilik endişelerine yol açan bir özelliktir. iOS ve Android işletim sistemleri, uygulamaların ekranın üst kısmında bildirimleri, mesajları veya arayüzleri gösterebilmesi için ayrı izinler tanımlar. Bu izni yapılandırmak, geliştiricilerin hem kullanıcıların rahatlığı hem de platform kurallarına uyum sağlama zorunluluğu arasında ince bir denge kurmasını gerektirir. Tek bir yanlış yapılandırma, uygulamanın App Store'da reddedilmesine veya kullanıcıların güvenini kaybetmesine sebep olabilir.
Bu makale, uygulama üstte gösterim izninin temel kavramlarını, tarihçesini, güncel uygulama örneklerini, uzman tavsiyelerini ve sık sorulan soruları derinlemesine ele alacak. Amacımız, geliştiricilerin bu izni doğru, güvenli ve kullanıcı dostu bir şekilde entegre etmelerine yardımcı olmaktır.
Önemli nedenleri arasında;
1. Kullanıcı Bilgilendirmesi: Kritik uyarılar, anlık mesajlar ya da sistem durumları hızlıca gösterilebiliyor.
2. Kullanıcı Etkileşimi: Örneğin, bir çeviri uygulaması üstte bir çeviri çubuğu sunarak, kullanıcıların diğer ekranlarda da işlem yapmalarını sağlar.
3. Gizlilik ve Güvenlik: Yanlış kullanım, hassas bilgilerin istenmeyen kişilere gösterilmesine yol açabilir; bu yüzden sistemler sıkı kontroller uygular.
Ancak bu iznin yanlış kullanımı, kullanıcı deneyimini bozabilir. Aşırı bildirim abartısı, kullanıcıyı rahatsız ederken, izninin eksik olması da uygulamanın beklenen işlevselliğini yitirmesine sebep olur.
Android ise 6.0 (Marshmallow) ile birlikte `SYSTEMALERTWINDOW` iznini tanıdı, ancak bu izni yalnızca kritik uygulamalar için sınırlı bir süreyle veriyordu. 2021 itibariyle, Android 12 ile birlikte, sistem arayüzüyle entegrasyon için `TYPEAPPLICATIONOVERLAY` ve `STATUSBARSERVICE` izinleri daha sıkı kontrol altına alındı. Bu izninin kullanılabilmesi için, uygulamanın “doğal” bir çatı hizmeti sunması veya özellikle kullanıcıya faydalı bir bildirim sunması gerekirdi.
Günümüzde, her iki platform da izni sadece “şeffaf” uygulamalar veya “özelleştirilmiş çubuklar” için sınırlıyor. Örneğin, bir çeviri uygulaması, kullanıcıya çevrilen metni üstte göstererek diğer uygulamalarda da devam etmesini sağlarken, yanıtı gizli tutar. Diğer yandan, sosyal medya uygulamaları, “güncel haber” çubuğu sunarak kullanıcıyı bilgilendirirken, sistem bildirimleriyle çakışma riskini azaltır.
Swift örneği:
```
let overlayWindow = UIWindow(windowScene: windowScene)
overlayWindow.windowLevel = UIWindow.Level.statusBar + 1
overlayWindow.rootViewController = OverlayViewController()
overlayWindow.isHidden = false
```
Bu kod, yeni bir pencere oluşturur ve status bar seviyesinin üstüne yerleştirir. İzin gerektirmez, çünkü bu sadece uygulama içinde yerel bir üst çubuktur. Ancak, sistem mesajlarını (örneğin, Wi-Fi durumu) göstermek için `UIApplication.shared.statusBarStyle` kullanımı sınırlıdır ve Apple tarafından önerilmez.
```
```
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCHPARENT,
WindowManager.LayoutParams.WRAPCONTENT,
WindowManager.LayoutParams.TYPEAPPLICATIONOVERLAY,
WindowManager.LayoutParams.FLAGNOTFOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP;
```
Bu kod, uygulamanın üst kısmında, odaklanamayan bir pencere oluşturur. Kullanıcı bu izni vermediği sürece uygulama bu pencereyi görüntüleyemez; bu nedenle, `Settings.ACTIONMANAGEOVERLAYPERMISSION` ile kullanıcıyı izin ekranına yönlendirmek gerekir.
- Apple: `UIApplication.shared.isStatusBarHidden` ve `UIWindow`’ın `windowLevel` üzerinden sınırlama getirir.
- Android: `SYSTEMALERTWINDOW` izni, `android.permission.SYSTEMALERTWINDOW` anahtarını taşıyan uygulamalara kadar sınırlıdır.
Her iki platform da “overlay” pencereleri, sistem bildirim çubuğu ile çakışma yaratabileceği için, kullanıcı deneyimini bozmazsa bile, gizlilik sözleşmelerinde (iOS App Store Review Guidelines, Android Developer Policies) “şeffaflık” ve “kullanıcı kontrolü” maddelerine uymak zorundadır.
- Kontrast: Metin ve arka plan kontrastı WCAG 2.1 AA standartlarını karşılamalı.
- Kısıtlı Süre: Çubuk, 5 saniyeden uzun süre göstermemeli; aksi takdirde kullanıcı rahatsız olur.
- Erişilebilirlik: VoiceOver ve TalkBack destekli, `accessibilityLabel` ve `accessibilityHint` eklenmeli.
- Animasyon: Giriş ve çıkış, `UIView.animate` veya `PropertyAnimator` ile yumuşak olmalı; ani geçişler kaçınılmalı.
Örnek:
```
let showOverlay = UserDefaults.standard.bool(forKey: "showOverlay")
if showOverlay { presentOverlay() }
```
Bu, kullanıcı tercihine saygı gösterir ve yeniden başlatıldığında çubuk otomatik olarak gizlenir.
- Yeniden Açılış: Kullanıcı izni “İptal” ettiğinde, çubuk görünmez.
- Ayarlar: Uygulama içinde “Bildirim” bölümünde “Üst Çubuk Göster” seçeneği bulunur.
Bu süreç, hem platform kurallarına uymak hem de kullanıcı güvenine katkı sağlar.
- Sosyal Medya: “Yeni mesaj var” bildirimi, üst çubukta anlık yenilenir.
- Finans Uygulamaları: Hisse senedi fiyatı, zaman damgası ve değişim yüzdesi üst çubukta sunulur.
Her örnek, kullanıcının diğer uygulamalarda da işlem yapabilmesine olanak tanır; ancak, aşırı bilgi yükü kullanıcı deneyimini olumsuz etkileyebilir.
2. Kullanıcı Onayı: Çubuk açılışında, `UIAlertController` ile “Bu çubuğu gösterebilir miyiz?” mesajı gösterin.
3. Erişilebilirlik: Çubuğu `accessibilityElements` içinde sıralayın; VoiceOver’ın doğru sırayı takip ettiğinden emin olun.
4. Kontrast: WCAG 2.1 AA (4.5.1) standartlarına uyumlu renk kombinasyonları seçin.
5. Animasyon Süresi: Giriş ve çıkış animasyonu 0.25–0.3s arasında tutun.
6. Kısıtlama: Çubuk, 10 saniyeden uzun süre görüntülenmemeli; otomatik kapanma için `Timer` kullanın.
7. Pencere Seviyesi: Android'de `TYPEAPPLICATIONOVERLAY` yerine `TYPESTATUSBAR` tercih edilmez; bu, sistem bildirimlerinin üstüne karışır.
8. Test: iOS 13+ ve Android 12+ cihazlarda, notch ve kablosuz çatı bölgelerinde çubuğun doğru hizalanıp hizalanmadığını test edin.
9. Güncelleme: Platform güncellemeleri (iOS 16, Android 13) ile birlikte yeni “safe area” kısıtlamalarını gözden geçirin.
10. Gizlilik Açıklaması: App Store ve Google Play açıklamalarında, üst çubuğun ne zaman ve nasıl gösterileceğini netleştirin.
Bu makale, uygulama üstte gösterim izninin temel kavramlarını, tarihçesini, güncel uygulama örneklerini, uzman tavsiyelerini ve sık sorulan soruları derinlemesine ele alacak. Amacımız, geliştiricilerin bu izni doğru, güvenli ve kullanıcı dostu bir şekilde entegre etmelerine yardımcı olmaktır.
Temel Kavramlar ve Tanım
Uygulama üstte gösterim izni, bir uygulamanın ekranın üst kısmında (genellikle status bar veya notch bölgesi) bildirim, arama çubuğu, menü veya özel içerik gösterebilmesine izin veren bir yetkilendirme mekanizmasıdır. iOS'ta bu, `UIStatusBarStyle`, `UIWindow` ve `ScreenEdgePanGestureRecognizer` gibi API'ler üzerinden kontrol edilirken, Android'de `SYSTEMALERTWINDOW` ve `STATUSBARSERVICE` gibi sistem servisleri aracılığıyla yönetilir. Kullanıcı, bu izni verip vermeme kararıyla uygulamanın sistem arayüzüyle ne kadar etkileşim kurabileceğini belirler.Önemli nedenleri arasında;
1. Kullanıcı Bilgilendirmesi: Kritik uyarılar, anlık mesajlar ya da sistem durumları hızlıca gösterilebiliyor.
2. Kullanıcı Etkileşimi: Örneğin, bir çeviri uygulaması üstte bir çeviri çubuğu sunarak, kullanıcıların diğer ekranlarda da işlem yapmalarını sağlar.
3. Gizlilik ve Güvenlik: Yanlış kullanım, hassas bilgilerin istenmeyen kişilere gösterilmesine yol açabilir; bu yüzden sistemler sıkı kontroller uygular.
Ancak bu iznin yanlış kullanımı, kullanıcı deneyimini bozabilir. Aşırı bildirim abartısı, kullanıcıyı rahatsız ederken, izninin eksik olması da uygulamanın beklenen işlevselliğini yitirmesine sebep olur.
Uygulama Üstte Gösterim İzni Tarihçesi ve Güncel Durum
iOS 7 ile birlikte Apple, notch ve kablosuz çatı bölgesi gibi yeni ekran mimarileri tanıdı. Bu değişiklik, üstte gösterim için yeni bir alan oluşturdu ve geliştiriciler bu alanı “safe area” olarak adlandırdı. İlk başta, `UIViewController`’ın `topLayoutGuide` ve `bottomLayoutGuide` üzerinden yönetilen bu alan, daha sonra `safeAreaInsets` ile standartlaştırıldı. 2018 yılından itibaren, iOS 11 ile birlikte, `UIWindow`’ın `windowScene` özelliği sayesinde, uygulama üstte, yanlarda veya alt kısımlarda sistem mesajlarını gösterebilecek şekilde genişletildi.Android ise 6.0 (Marshmallow) ile birlikte `SYSTEMALERTWINDOW` iznini tanıdı, ancak bu izni yalnızca kritik uygulamalar için sınırlı bir süreyle veriyordu. 2021 itibariyle, Android 12 ile birlikte, sistem arayüzüyle entegrasyon için `TYPEAPPLICATIONOVERLAY` ve `STATUSBARSERVICE` izinleri daha sıkı kontrol altına alındı. Bu izninin kullanılabilmesi için, uygulamanın “doğal” bir çatı hizmeti sunması veya özellikle kullanıcıya faydalı bir bildirim sunması gerekirdi.
Günümüzde, her iki platform da izni sadece “şeffaf” uygulamalar veya “özelleştirilmiş çubuklar” için sınırlıyor. Örneğin, bir çeviri uygulaması, kullanıcıya çevrilen metni üstte göstererek diğer uygulamalarda da devam etmesini sağlarken, yanıtı gizli tutar. Diğer yandan, sosyal medya uygulamaları, “güncel haber” çubuğu sunarak kullanıcıyı bilgilendirirken, sistem bildirimleriyle çakışma riskini azaltır.
Detaylı Alt Başlıklar
1. iOS'ta Üstte Gösterim Nasıl Yapılır?
iOS'ta üstte gösterim için `UIWindow` sınıfı kullanılır. Genellikle uygulama başlatılırken, `SceneDelegate` içinde yeni bir `UIWindow` oluşturulur ve `windowScene` atanır. Ardından, `rootViewController` olarak özel bir `UIViewController` belirlenir ve bu controller, `modalPresentationStyle` olarak `.overFullScreen` ya da `.overCurrentContext` seçilir. Örneğin, bir çeviri çubuğu eklemek için, çubuğu bir `UIView` içinde tanımlayıp, `NSLayoutConstraint` ile üst kenara sabitleyebiliriz. Sistemin “status bar” alanına zarar vermemek için, `safeAreaInsets` kullanarak çubuğu ortalıyoruz.Swift örneği:
```
let overlayWindow = UIWindow(windowScene: windowScene)
overlayWindow.windowLevel = UIWindow.Level.statusBar + 1
overlayWindow.rootViewController = OverlayViewController()
overlayWindow.isHidden = false
```
Bu kod, yeni bir pencere oluşturur ve status bar seviyesinin üstüne yerleştirir. İzin gerektirmez, çünkü bu sadece uygulama içinde yerel bir üst çubuktur. Ancak, sistem mesajlarını (örneğin, Wi-Fi durumu) göstermek için `UIApplication.shared.statusBarStyle` kullanımı sınırlıdır ve Apple tarafından önerilmez.
2. Android’de Üstte Gösterim İçin SYSTEMALERTWINDOW İzni
Android uygulamalarında, sistem üstüne bir pencere eklemek için `SYSTEMALERTWINDOW` izni gerekir. Bu izin, kullanıcıdan manuel olarak “Uygulama izinleri” ekranında etkinleştirilmeli. `WindowManager.LayoutParams` içinde `TYPEAPPLICATIONOVERLAY` tipi seçilir. Örnek kod:```
```
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCHPARENT,
WindowManager.LayoutParams.WRAPCONTENT,
WindowManager.LayoutParams.TYPEAPPLICATIONOVERLAY,
WindowManager.LayoutParams.FLAGNOTFOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP;
```
Bu kod, uygulamanın üst kısmında, odaklanamayan bir pencere oluşturur. Kullanıcı bu izni vermediği sürece uygulama bu pencereyi görüntüleyemez; bu nedenle, `Settings.ACTIONMANAGEOVERLAYPERMISSION` ile kullanıcıyı izin ekranına yönlendirmek gerekir.
3. Güvenlik ve Gizlilik Etkileri
İzin verilmiş bir üst pencere, kullanıcı arayüzünü tamamen ele geçirebilir, bu da potansiyel olarak sahte giriş ekranları veya phishing saldırıları için bir kapı açar. Bu nedenle, Apple ve Google, izni sadece “güvenilir” uygulamalar için sınırlar:- Apple: `UIApplication.shared.isStatusBarHidden` ve `UIWindow`’ın `windowLevel` üzerinden sınırlama getirir.
- Android: `SYSTEMALERTWINDOW` izni, `android.permission.SYSTEMALERTWINDOW` anahtarını taşıyan uygulamalara kadar sınırlıdır.
Her iki platform da “overlay” pencereleri, sistem bildirim çubuğu ile çakışma yaratabileceği için, kullanıcı deneyimini bozmazsa bile, gizlilik sözleşmelerinde (iOS App Store Review Guidelines, Android Developer Policies) “şeffaflık” ve “kullanıcı kontrolü” maddelerine uymak zorundadır.
4. Üst Çubuk Tasarımı İçin En İyi Uygulamalar
- Sadelik: Çubukta yalnızca gerekli metin veya simgeler bulunmalı.- Kontrast: Metin ve arka plan kontrastı WCAG 2.1 AA standartlarını karşılamalı.
- Kısıtlı Süre: Çubuk, 5 saniyeden uzun süre göstermemeli; aksi takdirde kullanıcı rahatsız olur.
- Erişilebilirlik: VoiceOver ve TalkBack destekli, `accessibilityLabel` ve `accessibilityHint` eklenmeli.
- Animasyon: Giriş ve çıkış, `UIView.animate` veya `PropertyAnimator` ile yumuşak olmalı; ani geçişler kaçınılmalı.
5. Kullanıcı Geri Bildirimleriyle Çubuk Güncelleme
Kullanıcı, üst çubuğun görünürlüğünden memnun değilse, ayarlar içinde “Çubuk Gösterim” seçeneğini kapatabilir. Geliştiriciler, bu tercihi `UserDefaults` (iOS) veya `SharedPreferences` (Android) ile saklayarak, uygulama başlatıldığında kontrol eder.Örnek:
```
let showOverlay = UserDefaults.standard.bool(forKey: "showOverlay")
if showOverlay { presentOverlay() }
```
Bu, kullanıcı tercihine saygı gösterir ve yeniden başlatıldığında çubuk otomatik olarak gizlenir.
6. Çubuk İçin Kullanıcı Onayı Süreci
- İlk Açılış: Uygulama, çubuğu göstermek için `UIAlertController` ile izin ister; kullanıcı “Evet” dediğinde izni kaydeder.- Yeniden Açılış: Kullanıcı izni “İptal” ettiğinde, çubuk görünmez.
- Ayarlar: Uygulama içinde “Bildirim” bölümünde “Üst Çubuk Göster” seçeneği bulunur.
Bu süreç, hem platform kurallarına uymak hem de kullanıcı güvenine katkı sağlar.
7. Üst Çubuk ile Entegrasyon Örnekleri
- Çeviri Uygulamaları: Web sayfasını ziyaret ederken, çevrilen metni üst çubukta gösterir.- Sosyal Medya: “Yeni mesaj var” bildirimi, üst çubukta anlık yenilenir.
- Finans Uygulamaları: Hisse senedi fiyatı, zaman damgası ve değişim yüzdesi üst çubukta sunulur.
Her örnek, kullanıcının diğer uygulamalarda da işlem yapabilmesine olanak tanır; ancak, aşırı bilgi yükü kullanıcı deneyimini olumsuz etkileyebilir.
Uzman Önerileri ve İpuçları
1. İzin Kontrolü: Geliştirme aşamasında, iznin varlığını `UIApplication.shared.isStatusBarHidden` ve `Settings.System.canWrite` ile kontrol edin.2. Kullanıcı Onayı: Çubuk açılışında, `UIAlertController` ile “Bu çubuğu gösterebilir miyiz?” mesajı gösterin.
3. Erişilebilirlik: Çubuğu `accessibilityElements` içinde sıralayın; VoiceOver’ın doğru sırayı takip ettiğinden emin olun.
4. Kontrast: WCAG 2.1 AA (4.5.1) standartlarına uyumlu renk kombinasyonları seçin.
5. Animasyon Süresi: Giriş ve çıkış animasyonu 0.25–0.3s arasında tutun.
6. Kısıtlama: Çubuk, 10 saniyeden uzun süre görüntülenmemeli; otomatik kapanma için `Timer` kullanın.
7. Pencere Seviyesi: Android'de `TYPEAPPLICATIONOVERLAY` yerine `TYPESTATUSBAR` tercih edilmez; bu, sistem bildirimlerinin üstüne karışır.
8. Test: iOS 13+ ve Android 12+ cihazlarda, notch ve kablosuz çatı bölgelerinde çubuğun doğru hizalanıp hizalanmadığını test edin.
9. Güncelleme: Platform güncellemeleri (iOS 16, Android 13) ile birlikte yeni “safe area” kısıtlamalarını gözden geçirin.
10. Gizlilik Açıklaması: App Store ve Google Play açıklamalarında, üst çubuğun ne zaman ve nasıl gösterileceğini netleştirin.