Ciclo de vida y guardado
Una experiencia tranquila también se comporta bien. Empieza pronto, descansa cuando nadie la mira, nunca pierde un guardado ni lo escribe dos veces.
El saludo de conexión
- La plataforma carga tu entrada con
#zc_parent=…&zc_instance=…en el fragmento. connect()envíazc.readycon tu identificador y versión cada 250 milisegundos hasta recibir respuesta.- La plataforma comprueba tu identificador, versión y protocolo con la aprobación, y responde con
zc.connected, el contexto y un puerto privado; si no, te rechaza. - Desde ese momento, todas las llamadas pasan por ese puerto. Si se vuelve a cargar la página, la sesión termina y quien visita empieza de nuevo desde la plataforma.
Prepárate en 15 segundos
Llama primero a loading.start() y a loading.ready() en cuanto se pueda empezar. Después carga los recursos pesados. Si no estás listo en 15 segundos, la plataforma avisará de que algo no va bien. Si no puedes iniciar, llama a loading.fail(message).
Comandos del ciclo de vida
| Comando | Acción |
|---|---|
pause | Detén el sonido, la animación y la entrada. Informa de paused. |
resume | Continúa desde donde lo dejó quien visita. Informa de running. |
visibility | Se envía una vez tras conectar y después con cada cambio. Si visible es falso, descansa como si estuvieras en pausa. |
dispose | Detén los temporizadores y deja que el SDK envíe los guardados. El marco se retira al responder o, como máximo, tras un segundo. |
Informa de la sesión, no cuentes el tiempo
Llama a session.report({state, mode}) cada vez que cambie el estado y repítelo cada pocos segundos mientras siga en marcha. La plataforma mide el tiempo en el servidor a partir de estos informes. Deja de contar al recibir paused o si no recibe nada durante 12 segundos.
Las revisiones protegen cada guardado
Cada guardado tiene una revisión que aumenta en uno con cada escritura. Pasa la última revisión que viste. Si alguien ha escrito entretanto, por ejemplo desde otra pestaña u otro dispositivo, la escritura falla con CONFLICT en vez de sobrescribir su progreso.
Reintenta con el mismo identificador de solicitud
Un error TIMEOUT o INTERNAL no significa que la escritura haya fallado, sino que no sabes qué ocurrió. Envía los mismos datos con el mismo requestId. El servidor devuelve el primer resultado y evita una segunda escritura. Si reutilizas un identificador con datos distintos, falla con IDEMPOTENCY_CONFLICT.
Deja que el guardado automático marque el ritmo
storage.createAutosave(save) llama a tu función como máximo una vez por intervalo: 10 segundos de forma predeterminada y entre 10 segundos y 5 minutos. Llama a schedule() cuando algo cambie. Al pausar, ocultar o cerrar, y antes de terminar una partida o de salir, el SDK envía el guardado de inmediato. Tras tres intentos fallidos, informa de SAVE_UNCONFIRMED mediante onError. Devuelve false desde tu función si aún hay cambios nuevos que guardar.
Cuando se cierra el canal
onDisconnect se activa una vez. Mantén lo que ve quien visita, deja de guardar y dile con calma que puede volver a abrir la experiencia para continuar. No intentes reconectar por tu cuenta.