İzin istemleri, kullanıcıların gizliliği ve güvenliği için potansiyel olarak tehlikeli olan güçlü özellikleri korumak amacıyla web'de kullanılan temel mekanizmadır. Tarayıcılar, izin istemleriyle kullanıcının istenen web sitesinin söz konusu özelliğe erişmesine izin vermeyi amaçlar. İzin istemleri; medya yakalama (kamera ve mikrofon), coğrafi konum, depolama alanı erişimi, MIDI ve bildirimler dahil olmak üzere çeşitli API'ler için kullanılır (daha fazla bilgi için MDN'deki Permissions API dokümanlarına bakın).
Bu kılavuzda, Chrome kullanım istatistikleri ve kullanıcı araştırmalarına dayalı olarak kullanıcılara izin istemleri göstermeyle ilgili en iyi uygulamalar özetlenmiştir. Kullanıcılar bu en iyi uygulamaları izlerken daha az sayıda gereksiz istemle karşılaşacaktır. Bu, geliştiricilerin daha az "engelleme" kararı almasına neden olacaktır. Makalenin sonunda, izinli API'lerle çalışmaya yönelik bazı kod kalıpları ve kullanıcıların engellenmiş bir durumdan kurtarmasına yardımcı olacak en iyi uygulamalar yer almaktadır.
En iyi uygulamaları isteme
İzin istemeniz gereken zaman, kullanıcı etkileşiminden sonra, kullanıcıların neden izin istediğinizi ve izin vererek ne gibi avantajlar elde edeceklerini anlayabileceği bir andır. Mümkün olduğunda, kullanıcıların aynı işlevi sağlamak için alternatif yollar kullanmasına izin vermelisiniz. Genel bir kural olarak, izin isteğinde bulunduğunuz anları dikkatlice seçerek daha seyrek izin istemek, kullanıcılarınızın geri dönüşü zor bir engellenmeye girme olasılığını azaltır. Aşağıdaki en iyi uygulamalarda bu önerilerin her biri hakkında daha fazla bilgi verilmektedir.
Sayfa yüklenirken veya kullanıcı etkileşimi olmadan hiçbir zaman sorma
Sayfa yüklenirken kullanıcılardan izin istemek, fiziksel bir mağazaya giren bir müşteriden hassas bir bilgi istemeye eşdeğerdir. İzin istemi görmek (muhtemelen bültene kaydolma ve çerez izni ile ilgili diğer birkaç istemle birlikte) çok rahatsız edici bir deneyimdir. Kullanıcılar neden bu istemin kendilerine yapıldığını ve bu durumdan nasıl yararlanacaklarını anlamaz.
Web uygulamanız belirli bir özelliğe erişmeden çalışamazsa bile kullanıcılara bunun neden gerekli olduğunu anlamaları için bir fırsat vermelisiniz. Örneğin, izin isteğinin önüne, ihtiyacı açıklayan ve kullanıcılara bir seçenek sunan (örneğin, mümkün olduğunda aynı işlevi gerçekleştirmek için alternatif yöntemler sağlayarak) kendi isteminizi ekleyerek. Sayfa yüklenirken izin istemekten daha iyi bir zaman düşünemiyorsanız bu kılavuzun ilerleyen bölümlerinde birkaç örnek verilmiştir.
Önceki kullanıcı etkileşiminin olmaması da benzer şekilde kötü bir durum olabilir (geçici kullanıcı etkinleştirme olarak da bilinir). Chrome telemetrisi, Masaüstü Chrome'daki izin istemlerinin %77'sinin kullanıcı amacına dair bu kadar temel bir sinyal olmadan gösterildiğini ve sonuç olarak bu tür istemlerin yalnızca %12'sine izin verildiğini gösteriyor. Kullanıcı etkileşiminden sonra ücretlerin %30'a yükselmesine izin verin. Bu nedenle, yalnızca kullanıcı sayfayla bir şekilde etkileşime geçtikten sonra izin isteyin.
Yalnızca kullanıcıların neden sorduğunuzu anlayabileceği durumlarda isteyin
İzin kararları genellikle gizlilikle ilgilidir. Bağlamsal bütünlük çerçevesine göre, gizlilikle ilgili kararların bağlama göre değiştiğini biliyoruz. Erişimin neden gerekli olduğunu anlamak bunun önemli bir yönü olarak kabul edilebilir. Bu nedenle, yalnızca kullanıcılara değer sağlamak için ihtiyaç duyduğunuz özellikleri (ve kullanıcıların gerçekten değer elde edecekleri konusunda sizinle aynı fikirde olabilecekleri özellikleri) istemeniz gerekir. Ayrıca, kullanıcının bu özelliğin neden faydalı olduğunu anladığı bir anda izin istemeniz gerekir. Amaç, kullanıcılarınızın kullanım bağlamını kolayca anlamalarını sağlamaktır.
Kullanıcı araştırmamız, kullanıcıların bir sitenin neden erişim istediğini anladıkları ve bir avantaj gördükleri durumlarda erişime izin verme olasılıklarının önemli ölçüde arttığını gösteriyor. Ayrıca, kullanıcıların erişim izni vererek elde edebilecekleri değeri daha iyi anlamak için önce bilmedikleri siteleri keşfetmeyi beklediğini de görüyoruz. Bu sırada izin istemlerini genellikle kapatır veya yoksayar. Tek seferlik izinlerde, ilk olarak tek bir ziyarete izin verilebilir. Uygulamanızın bu davranışları desteklemesi gerekir.
Mümkün olduğunda aynı işlevi yerine getirmek için alternatif yöntemler sunun
Bazı özelliklerin sonucu kullanıcılar için faydalı olmayabilir. Örneğin, GPS sensörü olmayan bir masaüstü cihazın coğrafi konumu, VPN'e bağlı olduğu için yanlış konuma döndürülebilir. Diğer kullanıcılar, kontrolü ellerinde tutmayı ve bu etkinlikleri tuş kombinasyonlarıyla manuel olarak tetiklemeyi tercih ettikleri için pano erişimi sağlamak istemeyebilir. Bu gibi durumlarda aynı sonuçlara ulaşmak için alternatif bir yöntem sunmak önemlidir. Örneğin, coğrafi konum izni istiyorsanız kullanıcılarınızın posta kodunu veya adresi kendilerinin girebileceği bir metin alanı sunun. Panoda, kopyalanacak öğelerin klavye tuş kombinasyonu veya içerik menüsü aracılığıyla da seçilip kopyalanabildiğinden emin olun. Bildirimlerde, kullanıcılara push bildirimleri yerine e-posta alma seçeneği sunun.
Alternatif kullanıcı arayüzünü, erişimin neden faydalı olabileceğine dair açıklama olarak kullanmak da faydalı bir modeldir. Coğrafi konum API'sini tetikleyen bir düğmenin yanına konum girme seçeneğini gören kullanıcılar, olacakların kontrolünü ellerinde hissederler. Çünkü yalnızca adreslerini yazabileceklerini anlarlar. Benzer şekilde, bildirimleri push veya e-posta üzerinden alma ya da kamera ve mikrofon erişimine izin vermeden toplantıya katılma arasında bir seçim varsa kullanıcılar yaptıkları tercihleri daha doğal bir şekilde anlayabilir.
Engellenmiş bir duruma girmeyin. Bu durumdan kurtulmak zordur.
Kullanıcı, izin denetimine tabi bir özelliğe erişime kalıcı olarak izin vermemeye karar verdiğinde tarayıcılar bu kararı dikkate alır. Erişim istemeye devam edebilseydiniz, kötü amaçlı siteler kullanıcıları istem bombardımanına göndermeye devam ederdi. Bu nedenle, bir işlevin engellenmiş durumundan kurtarmak için bilinçli olarak kullanıcının biraz çaba göstermesi gerekir. Bu nedenle, çok sayıda kullanıcının erişime izin vermemesinin muhtemel olduğu durumlarda kullanıcılardan izin istemeyin.
Bunu yapmanın yaygın bir yolu, kullanıcılarınıza ne olacağını ve uygulamanızın isteyecek olduğunuz yeteneğe neden ihtiyaç duyduğunu açıkladığınız bir ön istem kullanmaktır. Tarayıcının izin istemini yalnızca kullanıcılar bu tür bir ön isteme olumlu yanıt verdiğinde tetiklemeniz gerekir. Kullanıcıların bu durumdan kurtulmaları için meşru olarak kurtarmaları gereken durumlar vardır. Bu konuda daha fazla bilgi için Kullanıcıların engellendikten sonra hesaplarını kurtarmasına yardımcı olma bölümüne bakın.
Üçüncü taraf içeriklerine dikkat edin
Dikkat edilmesi gereken beklenmedik bir izin istemi kaynağı var. Sitenize üçüncü taraf komut dosyaları eklerseniz bu komut dosyaları, göstermek istemediğiniz izin istemlerini tetikleyebilir. Bu durum, özellikle bu tür istemler daha önce belirtilen en iyi uygulamalara uymuyorsa kullanıcıların web sitenizle ilgili deneyimini etkileyebilir. Kullanıcılarınızın deneyimlerini kontrol edebilmek için kendi kodunuza eklediğiniz üçüncü taraf kitaplık ve komut dosyaları ile ilgili dokümanları dikkatlice okumanız gerekir.
Ne zaman izin isteğinde bulunabilirsiniz?
Daha önce açıklanan en iyi uygulamalara uygun olarak, izin istemek için uygun olan birkaç ana örnek verilmiştir:
- Kullanıcı, adresi manuel olarak girmek için bir form alanının yanındaki "konumumu kullan" düğmesini tıkladığında.
- Kullanıcı bir video kanalına veya yayına abone olduktan ve güncellemelerin telefonlarına ya da masaüstü bilgisayarlarına e-posta veya bildirim olarak gönderilebileceğini açıklayan bir iletişim kutusunda onay düğmesini tıkladıktan sonra.
- Kullanıcı, görüntülü görüşmeye katılmaya hazırlandığı sayfaya geldiğinde ve ön istemde görünmek ve duyulmak istediğini olumlu şekilde yanıtladığında (Google Meet'teki bu örnek çalışmayı inceleyin).
İzin istemek için kod kalıpları
API kullanma izni, API'ye bağlı olarak farklı yöntemlerle alınır. Bazı (genellikle eski) API'ler, API'yi ilk kez kullanmaya çalıştığınızda tarayıcının otomatik olarak izin istediği bir model kullanır. Örneğin, navigator.geolocation.getCurrentPosition()
çağrısı yapılırken Coğrafi Konum API'si.
try {
navigator.geolocation.getCurrentPosition((pos) => console.log(pos));
} catch (error) {
console.error(error);
}
Diğer API'ler, önce statik bir yöntem kullanarak açıkça izin istemenizin gerektiği bir model kullanır. Bildirimlere izin vermek için Notification.requestPermission()
veya Device Orientation Events API'nin bir parçası olan daha az yaygın DeviceOrientationEvent.requestPermission()
buna örnek gösterilebilir. Bazı tarayıcıların belirli API'lere otomatik olarak izin verebileceğini unutmayın. Örneğin, Chrome her zaman cihazın yönüne erişime izin verirken Safari bir istem gösterir.
const result = await DeviceOrientationEvent.requestPermission();
console.log(`The user's decision when prompted to use the Device Orientation
Events API was: ${result}.`);
if (result === 'granted') {
/* Use the API. */
}
İzinlerin durumunu kontrol etme
Belirli bir API'yi kullanıp kullanamayacağınızı kontrol etmek için Permissions API'deki navigator.permissions.query()
yöntemini kullanın.
const result = await navigator.permissions.query({ name: 'geolocation' });
console.log(`The result of querying for the Geolocation API is:
${result.state}.`);
if (result.state === 'granted') {
// Use the API.
}
Kullanıcıların engellendik durumunu kurtarmasına yardımcı olma
Kullanıcıların erişim sorunlarını gidermelerine yardımcı olmak için Permissions API'yi kullanarak erişimi engellediklerini tespit edin ve onlara ayarlarını nasıl değiştirecekleri konusunda bir kılavuz sunun. Örneğin, kullanıcılar izin denetimine tabi bir özellikle ilişkili kullanıcı arayüzü öğeleriyle etkileşime geçtiğinde önceki bölümde açıklanan kalıbı kullanın ve bir sorun giderme iletişim kutusu açın. İzin durumunu değiştirmek için gereken adımlar tarayıcıya göre değişir. Bu nedenle, kullanıcı aracısı dizesine ve ürününüzde en yaygın olarak kullanılan tarayıcılara göre eşleşen açıklamalar sunabilirsiniz.
Chrome'da kullanıcılar, adres çubuğunun sol tarafındaki "ayar" simgesini tıklayarak Site Denetimleri'ne gitmelidir. Burada, ilgili izni açabilirler. Bazı durumlarda, özelliği kullanmadan önce sayfayı yeniden yüklemeleri gerekebilir. Bu durumda, ilgili düğme tıklandığında yeniden yükleme seçeneğini sunan bir mesaj çubuğu pencerenin üst kısmında gösterilir.
İzinleri kontrol etmek için diğer tarayıcılarda da benzer kullanıcı arayüzleri bulunur (örneğin, Firefox'ta bunun nasıl çalıştığına bakın).