Conceptos básicos

Proyectos, claves, sesiones de jugador y cómo comunican los SDK los resultados y los errores.

Los comentarios del código y los nombres de la API se mantienen en inglés para que coincidan con los SDK.

En esta página

Proyectos y claves#

Cada juego es un proyecto. Sus claves identifican el proyecto, no a un jugador.

CredencialDónde se usa
Base URLLa dirección de esta instalación. La API está bajo /v1.
Project IDEn cada solicitud, como X-Project-ID. Público.
Clave de cliente pk_live_…En las builds del juego y las páginas web, como X-Client-Key. Pública: solo puede actuar en nombre de jugadores con sesión iniciada.
Clave secreta sk_live_…Solo en tus propios servidores, como X-Secret-Key. Se muestra una vez y se almacena como hash; da acceso a los endpoints exclusivos de servidor.
Nunca pongas la clave secreta (sk_live_…) en una build del juego ni en una página web. Todo lo que se entrega a los jugadores se puede leer.

Jugadores y sesiones#

Las llamadas de jugador necesitan un token de acceso. Al iniciar sesión se obtiene uno (válido durante una hora) junto con un token de actualización (válido durante 30 días).

  • Los SDK guardan la sesión en el dispositivo y la renuevan antes de que caduque, así que los jugadores mantienen la sesión iniciada entre ejecuciones.
  • Los tokens de actualización rotan con cada uso. Reutilizar uno antiguo cierra esa sesión en todas partes (detección de robo).
  • Todos los jugadores empiezan como invitados y más tarde pueden vincular una cuenta de correo o de Google; el progreso del invitado se conserva. Consulta Jugadores.

Resultados en lugar de excepciones#

Las llamadas del SDK nunca lanzan excepciones por errores de red o del servidor. Devuelven un resultado con ok, un valor y un error con un código estable, un mensaje y el ID de solicitud.

C#
var top = await Majacloud.Leaderboards.GetTopAsync("coins", 10);
if (top.Ok)
{
    foreach (var entry in top.Value.Entries)
        Debug.Log($"#{entry.Rank} {entry.PlayerName} {entry.Score}");
}
else if (top.Error.IsRetryable)
{
    // Network, timeout, 5xx or rate limit: try again later
    Debug.Log("Retry in " + top.Error.RetryAfterSeconds + " s");
}
else
{
    Debug.LogWarning(top.Error.Code + ": " + top.Error.Message + " (" + top.Error.RequestId + ")");
}

Reintentos y límites de frecuencia#

Los SDK reintentan las solicitudes seguras ante errores de red y respuestas 5xx con espera exponencial, y ante una respuesta 429 esperan el tiempo que indica Retry-After.

  • Cada proyecto puede enviar hasta 120 solicitudes por minuto; por encima de eso, la API responde rate_limited.
  • Cada cuenta tiene una cuota diaria de solicitudes que depende del plan (consulta Límites); por encima de ella, la API responde quota_exceeded hasta las 00:00 UTC.
  • Las respuestas incluyen X-RateLimit-Limit, X-RateLimit-Remaining y, cerca de la cuota, X-RateLimit-Daily-Remaining.

ID de solicitud y registros#

Cada respuesta tiene una cabecera X-Request-ID, y cada error incluye request_id. Búscalo en la página Registros de tu proyecto para ver el endpoint, el estado, la latencia y el jugador.

Busca en títulos, encabezados y texto de las páginas.

↑↓ para navegar ↵ para abrir Esc para cerrar