Permisos del dispositivo

Los juegos corren en un frame aislado. Por defecto no pueden usar la cámara ni el micrófono: el portal bloquea esos pedidos y el autotest avisa. Un juego que de verdad necesita uno (chat de voz, un juego de cantar, un filtro de realidad aumentada) lo declara en su ficha, explica por qué, y una persona lo aprueba en la revisión.

PermisoPara qué
microphonegetUserMedia({ audio: ... }): chat de voz, control por voz, juegos musicales
cameragetUserMedia({ video: ... }): filtros de cámara, juegos de movimiento

Ubicación, notificaciones y lectura del portapapeles no están disponibles para los juegos.

Encontrá lo que necesitás

gamealia analyze (o gamealia_analyze_project) busca en el build las llamadas a getUserMedia y lista el permiso que necesita cada una, con archivo y línea: audio es microphone, video es camera. Si las opciones no son un objeto literal sugiere los dos; fijate cuál usa el código. Declará solo lo que el juego realmente usa.

Declaralos, con una justificación

El revisor lee tu justificación antes de aprobar. Sé concreto: qué función es, cuándo lo pide el juego y qué pasa si el jugador dice que no. Entre 10 y 1000 caracteres.

Chat de voz pulsando para hablar en las salas multijugador. El juego lo pide solo cuando el jugador mantiene apretado el botón de hablar; sin micrófono se puede jugar completo con emotes de texto.

  • Portal de desarrolladores: la página del juego → Permisos del dispositivo, marcalos y completá "¿Por qué los necesita tu juego?".
  • CLI:

    gamealia permissions mi-juego --microphone --why "Chat de voz pulsando para hablar en las salas; se puede jugar sin él."
    gamealia permissions mi-juego --none   # quitarlos
  • MCP: gamealia_update_listing {game, permissions: [{name: "microphone", justification: "..."}]} (una justificación por permiso; [] los quita).

Cuándo se aplican

Un cambio se aplica solo cuando se aprueba una versión probada con él. El flujo:

  1. Declarás los permisos con la justificación.
  2. Subís una versión nueva: el autotest corre con ellos, y un getUserMedia declarado pasa el chequeo permissions.
  3. La enviás. El revisor ve los permisos pedidos, los que están publicados hoy y tu justificación.
  4. Al aprobarla, el frame del juego recibe el permiso (el navegador igual le pregunta al jugador).

Mientras una versión espera la revisión, los permisos no se pueden cambiar. Un envío que agrega un permiso sin justificación se rechaza: gamealia submit y el MCP te dicen qué comando lo arregla. Si cambiás los permisos después de que una versión se probó, esa versión se vuelve a probar antes de poder enviarla.

En tu código

No hay una llamada del SDK para esto: usá la API normal del navegador (o la de tu motor) y manejá el rechazo. El jugador siempre puede decir que no, así que el juego tiene que seguir funcionando sin el dispositivo.

async function enableVoice() {
  try {
    const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
    startVoiceChat(stream);
  } catch {
    showToast("El chat de voz está apagado: el micrófono no está disponible");
  }
}