Web için Permissions API

Matt Gaunt

Daha önce Geolocation API daha önce kullandığınız her şeyi kullanmak için izniniz olup olmadığını İsteme neden olmadan coğrafi konum. Bu mümkün değildi. Mevcut konumu istemeniz gerekiyordu. 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 benzersiz bir güncellemeyle mevcut izin durumunu şuradan kontrol edebilirsiniz: Notification.permission.

Web platformu API'lerde büyüdükçe, mobil uygulamaları geliştiricilerin bir iznin durumunu hatırlamak nasıl çalıştığını gösterir. Chrome sürüm 43'te kullanılabilen İzin API'si bu şekilde tasarlanmıştır.

permissions.query()

permissions.query() yöntemini kullanarak bir iznin durumunu kontrol edin. Bu, verildi (izniniz var), reddedildi (şundan engellendiniz) durumunu döndürür: API'ye erişme) veya istem (kullanıcının sorulduğunda). Ö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, PermissionDescriptor nesnesini tanımlayın. Yanıt bir Vaat kullanıcıya PermissionStatus nesnesini tanımlayın. Bu nesneden durumu permissionStatus.state ile kontrol edebilirsiniz "granted" (verildi), "denied" (reddedildi) veya "istem". Ayrıca bir etkinlik de permissionStatus.onchange için işleyicisi ve izindeki değişiklikleri işleme durumu.

Desteklenen İzin Tanımlayıcıları

Yukarıdaki örnekte, şu izin tanımlayıcısına sahip coğrafi konum: {name:'geolocation'}.

Bildirim izni tanımlayıcısı, yalnızca bir ad özelliği: {name:'notifications'}.

Push ve midi'nin her biri için ek bir erişim öğesi vardır. parametresini kullanabilirsiniz.

Push izni için bir userVisibleOnly parametresi sağlayabilirsiniz. Bu, her push mesajı için bir bildirim göstermek isteyip istemediğinizi belirtir. veya sessiz push bildirimleri gönderebiliyor olmanız gerekir (Şu anda yalnızca Chrome bildirim içeren push mesajlarını destekler). Bunu şu şekilde kullanırsınız:

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

Midi, sysex parametresine izin verir. Bu, bir projeyi başlatmak ve/veya özel mesajlar oluşturabilirsiniz. Midi için bu değer şu şekilde olacaktır:

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 bilgisi, getCurrentPosition() ç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() numarasını 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');
});

Burada önemli olan, Permission API'nin, izinlerin kullanıcı kaynaklı olarak izinlerin durumunu ve mevcut API çeşitliliğini destekleyebilmesini sağlar. yardımcı olur.

Bunun en büyük avantajı, müşteriler için daha iyi deneyimler (kullanıcıya neden ekstra açıklamaya ihtiyaç duyduğu açıkça anlaşıldığında sorarak) ve en iyi uygulamalara sahip olduğunuzu bildiğinizde bu API'lerden izin verildi.

Kapsamlı bir örnek grubunu burada bulabilirsiniz.

Tarayıcı Desteği

Chrome bunu uygulayan ilk tarayıcıdır ve Mozilla Microsoft da bu API'ye ilgi göstermiştir.

Bilinen sorunlar

  • Kullanıcı izni kapatırsa coğrafi konum izni yeniden gösterilmez isteğinde bulunabilirsiniz. Ancak izin durumu "istem" olarak kalır. [bugs.chromium.org]