Permisos API para Web

Permisos API para Web

Si has trabajado con la API de geolocalización antes, lo más probable es que hayas querido comprobar si tenía permiso para utilizar Geolocalización sin provocar un aviso. Esto simplemente no era posible. Había que solicitar la posición actual y esto indicaría el estado del permiso o provocaría un mensaje que mostrar al usuario.

No todas las API funcionan de esta manera. La API de notificaciones tiene su propia manera que permite comprobar el estado de permiso actual a través de Notification.permission.

A medida que la plataforma web crece en número de API’s, es necesario que haya una única manera estándar para que los desarrolladores comprueben el estado de un permiso, en lugar de tener que recordar cómo funcionan todas y cada una de las API. La Permission API, disponible en la versión de Chrome 43, está destinada a ser este único método estándar para comprobar el estado de los permisos de una API.

permissions.query ()

Comprobar el estado de un permiso utilizando el método permissions.query(). Esto devuelve un estado concedido (que tiene permiso), negado (que está bloqueado el acceso a la API) o un mensaje (el usuario necesita que se le pregunte). Por ejemplo:

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

El método de consulta toma el objeto PermissionDescriptor, donde se define el nombre del permiso. La respuesta es una promesa a una resolución del objeto PermissionStatus. A partir de este objeto, se puede comprobar el estado con permissionStatus.state para 'concedido', 'negado' o 'aviso'. También puedes aplicar un controlador de eventos para permissionStatus.onchange y manejar los cambios en el estado del permiso.

PermissionDescriptors soportados

En el ejemplo anterior, destacamos cómo consultar el estado del permiso para la geolocalización con el siguiente permission descriptor: {name:'geolocation'}.

El Notification permission descriptor es similar, ya que sólo requiere un atributo de nombre: {name:'notifications'}.

Push y midi tienen cada uno un parámetro adicional que se específica para esa API.

Para el permiso de push, puedes proporcionar un parámetro userVisibleOnly. Esto indica si deseas mostrar una notificación por cada mensaje de inserción o ser capaz de enviar notificaciones push silenciosas (por el momento Chrome sólo soporta mensajes push con notificaciones). Deberías usarlo este modo:

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

Midi permite un parámetro sysex. Esto indica si es necesario recibir o no mensajes exclusivos del sistema. Para midi esto sería:

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

Solicitando Permissions

La solicitud del permiso del usuario depende de la API específica. Por ejemplo, la geolocalización mostraría un indicador de permiso cuando haces la llamada getCurrentPosition().

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

Considerando las notificaciones se avisará al usuario cuando haces la llamada 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');  
});

Lo importante aquí es que la Permission API permite una manera consistente de supervisar el estado de los permisos y a la vez es capaz de soportar la gama actual de API’s en la web.

La gran ventaja de esto es que te permite construir una mejor experiencia para tus usuarios, solo se avisa cuando es evidente para los usuarios que necesitas privilegios adicionales, y aprovechas al máximo estas API cuando sabes que el permiso se ha concedido.

Puedes encontrar un conjunto completo de ejemplos aquí.

Navegadores

Chrome es el primer navegador que implementa esto, Mozilla planea hacerlo, y Microsoft ha mostrado interés en la API.

Comentarios

Sin comentarios
Ha habido un error en el envío
Comentario enviado. Será revisado por la moderación antes de ser publicado.

Deja tu comentario

Tu nombre:
Tu email:
Tu comentario: