Web için Permissions API

Matt Gaunt

Daha önce Geolocation API ile çalıştıysanız, büyük olasılıkla herhangi bir istemde bulunmadan Coğrafi Konum özelliğini kullanma izniniz olup olmadığını kontrol etmek istemişsinizdir. Bu mümkün değildi. Geçerli konumu istemeniz gerekiyordu ve bu, izin durumunu belirtir veya kullanıcıya bir istem gösterilmesine neden olur.

Tüm API'ler bu şekilde çalışmaz. Notifications API'nin, mevcut izin durumunu Notification.permission aracılığıyla kontrol etmenizi sağlayan ayrı bir yöntemi vardır.

Web platformu API'lerle büyüdükçe, geliştiricilerin her bir API'nin nasıl çalıştığını hatırlamak yerine iznin durumunu kontrol edebilmesi için tek ve standart bir yol olması gerekir. Chrome 43 sürümünde kullanılabilen 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. Verildi (izniniz var), reddedildi (API'ye erişiminiz engellendi) veya istem (kullanıcıya sormanız gerekir) durumunu 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, "granted" (verildi), "denied" (reddedildi) veya "prompt" (istem) için durumu permissionStatus.state ile kontrol edebilirsiniz. Ayrıca, permissionStatus.onchange için bir etkinlik işleyici uygulayabilir ve izin durumundaki değişiklikleri işleyebilirsiniz.

Desteklenen İzin Tanımlayıcıları

Yukarıdaki örnekte, şu izin açıklayıcısıyla coğrafi konum için izin durumunun nasıl sorgulanacağı vurgulanmaktadır: {name:'geolocation'}.

Bildirim izni açıklayıcısı, yalnızca bir ad özelliği gerektirmesi açısından benzerdir: {name:'notifications'}.

Push ve midi seçeneklerinin her biri, ilgili API'ye özel ek parametrelere sahiptir.

Push izni için bir userVisibleOnly parametresi sağlayabilirsiniz. Bu, her push mesajı için bildirim göstermek mi yoksa sessiz push bildirimleri göndermek mi istediğinizi belirtir (şu anda Chrome yalnızca bildirim içeren push mesajlarını desteklemektedir). Bunu şu şekilde kullanırsınız:

navigator.permissions.query({name:'push', userVisibleOnly:true})

Midi, sysex parametresine izin verir. Bu, sisteme özel mesajlar almanız gerekip gerekmediğini ve/veya almanız gerekip gerekmediğini belirtir. Midi için bu değer şöyle olur:

navigator.permissions.query({name:'midi', sysex:true})

İzin İsteme

Kullanıcıdan izin isteme, ilgili API'ye bağlıdır. Örneğin coğrafi konum, getCurrentPosition() yöntemini çağırdığınızda bir 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);
});

Ancak bildirimler, requestPermission() numaralı telefonu aradığınızda kullanıcıyı bilgilendirir.

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 şu anda web'de bulunan çeşitli API'leri desteklerken izinlerin durumunu tutarlı bir şekilde izleyebilmesidir.

Bunun en büyük avantajı, kullanıcılarınız için daha iyi deneyimler oluşturmanıza olanak tanımasıdır. Yalnızca kullanıcı, neden ek ayrıcalığa ihtiyaç duyduğunuzu açık bir şekilde anladığınızda istemde bulunabilir ve izin verildiğini bildiğinizde bu API'lerden tam olarak yararlanabilirsiniz.

Örneklerin tamamını burada bulabilirsiniz.

Tarayıcı Desteği

Chrome, bunu uygulayan ilk tarayıcıdır. Mozilla, bu uygulamayı sunmayı planlıyor ve Microsoft da API'ya ilgi gösteriyor.

Bilinen sorunlar

  • Kullanıcı izin isteğini reddederse coğrafi konum bilgisi istemi yeniden göstermez. Ancak izin durumu "istem" olarak kalır. [bugs.chromium.org]