1. Registrá tu juego
Ingresá con SaltoUruguayServer, abrí la consola y creá un proyecto. El juego empieza como borrador privado. Configurá su descripción, distribución y logros casuales antes de enviarlo a revisión.
2. Cargá el SDK
El script publica window.SaltoPlay. En hosted, /sdk/saltoplay.js se sirve desde el runtime. En external, usá la URL del portal. Esta versión inicial se distribuye como script; el paquete npm todavía no está publicado.
<script src="/sdk/saltoplay.js"></script>
<script>
const play = await SaltoPlay.init();
const player = await play.player.getSaltoTag();
</script>3. Guardá el progreso
El SDK conserva la versión leída por slot. Si otra sesión cambió el guardado, saves.set devuelve save_conflict. Recuperá el estado actual y resolvé el conflicto antes de reintentar.
const progress = await play.saves.get('slot-1');
await play.saves.set('slot-1', { level: 3 });4. Celebrá un logro
Creá una clave en la consola y solicitala desde el juego. Los desbloqueos son idempotentes. Los logros casuales enviados por navegador no otorgan XP global.
await play.achievements.requestUnlock('first-win');
const achievements = await play.achievements.list();5. La misma UI en todos los juegos
Desde SDK 0.3, al conectar una sesión autenticada se muestra «Bienvenido, {SaltoTag}» con avatar si el permiso profile:read está disponible. Requiere saltotag:read para mostrar el tag; si sólo hay acceso al perfil, usa el nombre visible. No se muestra para invitados. Podés desactivarlo con ui: { welcome: false }. Los avisos usan cápsulas oscuras, formas redondeadas y una expansión breve que respeta movimiento reducido. Además, un logro recién confirmado por la API muestra automáticamente la notificación de SaltoPlay con su nombre y descripción. Si ya estaba desbloqueado, no se repite. En hosted la UI la presenta el portal por encima del juego; en external la dibuja el SDK con el mismo diseño, aislado mediante Shadow DOM. No tenés que mostrar otro aviso de logro en tu juego.
const play = await SaltoPlay.init({
// Agregá tu configuración OAuth si es external.
ui: { position: 'bottom-center', duration: 5500 }
});
await play.achievements.requestUnlock('first-win'); // UI automática
await play.ui.notify({
title: 'Partida guardada',
message: 'Tu progreso está sincronizado.',
tone: 'success'
});Configurar y previsualizar la UI
Hay seis posiciones: top/bottom combinados con left/center/right. La duración se limita a 2.5–12 segundos. Los avisos se encolan (máximo 20 pendientes), se pueden cerrar y pausan su temporizador al pasar el cursor, enfocar el cierre u ocultar la pestaña. Respetan movimiento reducido y usan anuncios accesibles sin forzar el foco. showAchievement sólo dibuja una vista visual: no desbloquea logros ni concede XP. Para premiar al jugador usá requestUnlock y la respuesta de la API. La demo de Órbita se etiqueta como Demo, sin recompensas de cuenta. La visualización en pantalla completa usa la capa superior de popovers cuando el navegador la admite.
await play.ui.configure({ position: 'top-right', duration: 5000 });
await play.ui.showAchievement({ title: 'Ejemplo de logro', description: 'Vista previa de la UI', demo: true });
await play.ui.dismissAll();
await play.ui.configure({ enabled: false });