Daha önce Geolocation API ile çalıştıysanız Geolocation'u istem göstermeden kullanma izniniz olup olmadığını kontrol etmek istemiş olabilirsiniz. Bu mümkün değildi. Geçerli konumu istemeniz gerekiyordu. Bu, izin durumunu gösterir veya kullanıcıya bir istem gösterilmesine neden olur.
Tüm API'ler bu şekilde çalışmaz. Notifications API, Notification.permission aracılığıyla mevcut izin durumunu kontrol etmenize olanak tanır.
Web platformu API'lerle büyüdükçe, geliştiricilerin her API'nin nasıl çalıştığını hatırlamak yerine bir iznin durumunu kontrol edebilecekleri tek ve standart bir yöntem olması gerekir. Chrome 43 sürümünde kullanıma sunulan Permission API, bir API'nin izin durumunu kontrol etmenin tek ve standart yolu olarak tasarlanmıştır.
permissions.query()
permissions.query()
yöntemini kullanarak bir iznin durumunu kontrol edin. Bu işlem, izin verildi (izinniz var), reddedildi (API'ye erişiminiz engellendi) veya istem (kullanıcıya istem gösterilmesi gerekir) şeklinde bir durum döndürür. Örneğin:
// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
.then(function(permissionStatus) {
console.log('geolocation permission state is ', permissionStatus.state);
permissionStatus.onchange = function() {
console.log('geolocation permission state has changed to ', this.state);
};
});
Sorgu yöntemi, iznin adını tanımladığınız bir PermissionDescriptor nesnesi alır. Yanıt, PermissionStatus nesnesine çözümlenen bir Promise'dir. Bu nesneden, durumu permissionStatus.state
ile "granted", "denied" veya "prompt" için kontrol edebilirsiniz. Ayrıca permissionStatus.onchange
için bir etkinlik işleyici uygulayabilir ve izin durumundaki değişiklikleri yönetebilirsiniz.
Desteklenen PermissionDescriptors
Yukarıdaki örnekte, coğrafi konum için izin durumunun aşağıdaki izin tanımlayıcısıyla nasıl sorgulandığını vurgulamaktayız: {name:'geolocation'}
.
Bildirim izni tanımlayıcısı, yalnızca bir ad özelliği gerektirmesi bakımından benzerdir: {name:'notifications'}
.
Push ve midi'nin her biri, ilgili API'ye özgü ek bir parametreye sahiptir.
Push izni için bir userVisibleOnly
parametresi sağlayabilirsiniz.
Bu ayar, her push mesajı için bildirim göstermek isteyip istemediğinizi veya sessiz push bildirimleri gönderip gönderemeyeceğinizi belirtir (Chrome şu anda yalnızca bildirim içeren push mesajlarını destekler). Bu işlevi şu şekilde kullanırsınız:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi, sysex
parametresine izin verir. Bu, sistem özel mesajları almanız ve/veya almanız gerekip gerekmediğini gösterir. Midi için bu şöyle olur:
navigator.permissions.query({name:'midi', sysex:true})
İzin İsteme
Kullanıcıdan izin isteme işlemi, API'ye bağlıdır. Örneğin, coğrafi konum, getCurrentPosition()
işlevini çağırdığınızda izin istemi gösterir.
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
Bildirimler ise requestPermission()
numarayı aradığınızda kullanıcıya sorar.
Notification.requestPermission(function(result) {
if (result === 'denied') {
console.log('Permission wasn\'t granted. Allow a retry.');
return;
} else if (result === 'default') {
console.log('The permission request was dismissed.');
return;
}
console.log('Permission was granted for notifications');
});
Buradaki nokta, Permission API'nin, web'de mevcut API yelpazesini desteklerken izinlerin durumunu tutarlı bir şekilde izlemeye olanak tanımasıdır.
Bunun en büyük avantajı, yalnızca kullanıcının ek ayrıcalıklara neden ihtiyaç duyduğunun açık olduğu durumlarda istem göstermek ve izin aldığınızı bildiğiniz durumlarda bu API'lerden tam olarak yararlanmak suretiyle kullanıcılarınız için daha iyi deneyimler oluşturmanıza olanak tanımasıdır.
Tüm örnekleri burada bulabilirsiniz.
Tarayıcı desteği
Chrome bunu uygulayan ilk tarayıcı oldu. Mozilla da bu özelliği kullanıma sunmayı planlıyor. Microsoft ise API'ye ilgi gösterdi.
Bilinen sorunlar
- Kullanıcı izin isteğini reddederse coğrafi konum isteği yeniden gösterilmez. Ancak izin durumu "istem" olarak kalır. [bugs.chromium.org]