API Quyền cho web

Nếu đã từng làm việc với API định vị địa lý, thì có thể bạn muốn kiểm tra xem mình có quyền sử dụng API định vị địa lý mà không cần đưa ra lời nhắc hay không. Điều này đơn giản là không thể. Bạn phải yêu cầu vị trí hiện tại và điều này sẽ cho biết trạng thái cấp quyền hoặc khiến lời nhắc xuất hiện cho người dùng.

Không phải API nào cũng hoạt động theo cách này. API Thông báo có cách riêng để cho phép bạn kiểm tra trạng thái quyền hiện tại thông qua Notification.permission.

Khi nền tảng web phát triển trong API, nhà phát triển cần có một cách duy nhất và chuẩn để kiểm tra trạng thái của một quyền thay vì phải nhớ cách hoạt động của từng API. Permission API (API quyền) có trong Chrome phiên bản 43, được thiết kế để trở thành cách duy nhất và chuẩn để kiểm tra trạng thái quyền của một API.

permissions.query()

Kiểm tra trạng thái của một quyền bằng phương thức permissions.query(). Thao tác này sẽ trả về trạng thái là granted (bạn có quyền), denied (bạn bị chặn truy cập vào API) hoặc prompt (người dùng cần được nhắc). Ví dụ:

// 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);
    };
    });

Phương thức truy vấn sẽ nhận một đối tượng PermissionDescriptor, trong đó bạn xác định tên của quyền. Phản hồi là một Lời hứa giải quyết đến đối tượng PermissionStatus. Từ đối tượng này, bạn có thể kiểm tra trạng thái bằng permissionStatus.state cho "granted" (đã cấp), "denied" (bị từ chối) hoặc "prompt" (nhắc). Bạn cũng có thể triển khai trình xử lý sự kiện cho permissionStatus.onchange và xử lý các thay đổi đối với trạng thái quyền.

PermissionDescriptors được hỗ trợ

Trong ví dụ trên, chúng tôi nêu bật cách truy vấn trạng thái quyền cho tính năng vị trí địa lý bằng chỉ số mô tả quyền sau: {name:'geolocation'}.

Nội dung mô tả quyền Thông báo cũng tương tự như vậy, chỉ yêu cầu thuộc tính tên: {name:'notifications'}.

Pushmidi đều có một tham số bổ sung dành riêng cho API đó.

Đối với quyền đẩy, bạn có thể cung cấp tham số userVisibleOnly. Giá trị này cho biết bạn có muốn hiển thị thông báo cho mọi thông báo đẩy hay không hoặc có thể gửi thông báo đẩy không có thông báo hay không (Hiện tại, Chrome chỉ hỗ trợ thông báo đẩy có thông báo). Bạn sẽ sử dụng như sau:

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

Midi cho phép tham số sysex. Thuộc tính này cho biết liệu bạn có cần và/hoặc nhận được tin nhắn độc quyền của hệ thống hay không. Đối với midi, bạn sẽ thấy:

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

Yêu cầu quyền

Việc yêu cầu người dùng cấp quyền phụ thuộc vào API cụ thể. Ví dụ: tính năng vị trí địa lý sẽ hiển thị lời nhắc cấp quyền khi bạn gọi getCurrentPosition().

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

Trong khi đó, thông báo sẽ nhắc người dùng khi bạn gọi requestPermission().

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');
});

Điểm mấu chốt ở đây là Permission API cho phép theo dõi trạng thái của các quyền một cách nhất quán, đồng thời có thể hỗ trợ nhiều API hiện có trên web.

Ưu điểm lớn của việc này là cho phép bạn xây dựng trải nghiệm tốt hơn cho người dùng, chỉ nhắc khi người dùng thấy rõ lý do bạn cần thêm đặc quyền và tận dụng tối đa các API này khi bạn biết mình đã được cấp quyền.

Bạn có thể xem bộ ví dụ đầy đủ tại đây.

Hỗ trợ trình duyệt

Chrome là trình duyệt đầu tiên triển khai API này, Mozilla đang lên kế hoạch phát hành API này và Microsoft đã thể hiện sự quan tâm đến API này.

Vấn đề đã biết

  • Tính năng vị trí địa lý sẽ không hiển thị lại lời nhắc nếu người dùng đóng yêu cầu cấp quyền. Tuy nhiên, trạng thái quyền vẫn là "nhắc". [bugs.chromium.org]