Geolocation API를 사용한 적이 있는 경우 저작권 침해를 방지하기 위한 사용 권한이 있는지 메시지를 표시하지 않고 위치정보를 표시합니다. 이는 불가능했습니다. 현재 위치를 요청해야 했으며 이렇게 하면 권한 상태를 나타내거나 사용자에게 메시지가 표시됩니다.
모든 API가 이러한 방식으로 작동하는 것은 아닙니다. Notifications API는 독자적인 방식으로 kubectl 명령어를 통해 현재 권한 상태를 Notification.permission을 받을 수 있습니다.
웹 플랫폼이 API에서 성장함에 따라 이를 위한 단일 표준 방법이 개발자가 권한 상태를 확인하도록 하기 위해 작동 방식을 자세히 살펴봤습니다 Chrome 버전 43에서 사용할 수 있는 Permission API는 다음과 같습니다. API의 권한 상태를 확인하기 위한 이 하나의 표준 방법이 될 것입니다.
permissions.query()
permissions.query()
메서드를 사용하여 권한 상태를 확인합니다. 이렇게 하면
허용됨 (권한 있음), 거부됨 (다음에서 차단됨)상태 반환
API 액세스) 또는
프롬프트 (사용자 요구사항
나타납니다. 예를 들면 다음과 같습니다.
// 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);
};
});
쿼리 메서드는
PermissionDescriptor
객체에서 권한의 이름을 정의합니다. 응답은 프로미스입니다.
해결 중인
PermissionStatus
객체를 지정합니다. 이 객체에서 permissionStatus.state
를 사용하여 상태를 확인할 수 있습니다.
: 'granted', 'denied' '프롬프트'로 지정합니다 또한 이벤트를 구현하여
permissionStatus.onchange
의 핸들러를 만들고 권한 변경사항을 처리합니다.
있습니다.
지원되는 PermissionDescriptors
위의 예에서는
{name:'geolocation'}
권한 설명자가 있는 위치정보
알림 권한 설명자는
name 속성: {name:'notifications'}
.
푸시 및 midi 각각에는 매개변수 값으로 사용됩니다.
푸시 권한의 경우 userVisibleOnly
매개변수를 제공할 수 있습니다.
모든 푸시 메시지에 대한 알림을 표시할지 여부를 나타냅니다.
또는 무음 푸시 알림을 전송할 수 있습니다. 현재
알림이 있는 푸시 메시지를 지원합니다.) 다음과 같이 사용합니다.
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi는 sysex
매개변수를 허용합니다. 이는 해당 클라이언트에게 메시지를 보내는
시스템 전용 메시지입니다. MIDI의 경우 다음과 같습니다.
navigator.permissions.query({name:'midi', sysex:true})
권한 요청
사용자의 권한 요청은 특정 API에 따라 다릅니다. 예를 들어
getCurrentPosition()
를 호출하면 위치정보에서 권한 메시지를 표시합니다.
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
반면에 알림은 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');
});
여기서 요점은 Permission API를 사용하면 현재 사용 중인 다양한 API 범위를 지원할 수 있도록 하는 동시에 있습니다.
이 방법의 가장 큰 장점은 사용자에게 추가 리소스가 필요한 이유가 명확할 때만 메시지를 표시함 API를 최대한 활용할 수 있도록 권한을 부여해야 합니다.
브라우저 지원
Chrome은 이 기능을 구현한 최초의 브라우저이며, 모질라가 출시를 계획하고 있습니다. Microsoft는 API에 관심을 보였습니다.
알려진 문제
- 사용자가 권한을 해제하면 위치정보에서 메시지가 다시 표시되지 않음 합니다. 하지만 권한 상태는 '프롬프트'로 유지됩니다. [bugs.chromium.org]