Table of Contents

Control de flujo de sesión AR

Este documento presenta el control del flujo de sesión AR, incluyendo cómo crear, iniciar, detener y destruir una sesión AR.

Antes de comenzar

Creación

Utilice el appId de la biblioteca de localización en la nube de la configuración, la dirección del servidor serverAddress, apiKey y apiSecret del servicio en la nube para crear APIKeyAccessData.

Luego, utilice el APIKeyAccessData creado para crear MegaTrackerConfigs.

A continuación, utilice MegaTrackerConfigs y la licenseKey de la configuración para crear SessionConfigs.

Finalmente, utilice el método createSession(sessionConfigs) del componente EasyARMegaComponent montado en la escena xr-frame para crear la sesión.

createSession() {
    // Obtener el componente mega en la escena
    const megaElement = scene.getElementById('easyar-mega');
    const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
    // Configuración de autenticación del servicio en la nube MegaTracker
    const apiKeyAccess = new mega.APIKeyAccessData(this.data.appId, this.data.serverAddress, this.data.apiKey, this.data.apiSecret);
    const megaTrackerConfigs: easyar.MegaTrackerConfigs = {
        access: apiKeyAccess
    }
    // Configuración de sesión
    const sessionConfigs: easyar.SessionConfigs = {
        megaTrackerConfigs: megaTrackerConfigs,
        licenseKey: settings.EasyARLicenseKey
    }
    // Crear instancia
    session = megaComponent.createSession(sessionConfigs);
}

Este código demuestra cómo crear una instancia de sesión usando la configuración después de obtener megaComponent de la escena.

Precaución

Restricción de instancia única: solo se permite una instancia de sesión en una escena. Antes de crear una nueva sesión, debe asegurarse de que la instancia anterior haya sido destruida llamando a closeSession(), de lo contrario la creación fallará.

Inicio

Generalmente, se utiliza el método start(options) de EasyARSession en la devolución de llamada de preparación del sistema AR de xr-frame para iniciar la sesión.

Advertencia

MegaTracker depende de los datos proporcionados por el rastreador AR de plano, y no puede funcionar antes de que el rastreador de plano se inicialice.

En WXML, registre el evento de preparación del sistema AR usando bind:ready="handleReady":

<xr-scene ar-system="modes:Plane; planeMode: 1" bind:ready="handleReady">

En la función de devolución de llamada handleReady del componente xr-frame, utilice el método start(options) de EasyARSession para iniciar la sesión.

handleReady: function(event) {
    try {
        // Iniciar sesión, con 5 reintentos predeterminados en caso de fallo
        await session.start();
    } catch (err) {
        console.error(`La inicialización de la sesión EasyAR falló: ${err.message}`);
        return;
    }
}

Detención y destrucción

Utilice el método closeSession() del componente EasyARMegaComponent montado en la escena xr-frame para destruir la sesión.

Se recomienda llamarlo en el ciclo de vida detached del componente xr-frame para garantizar la destrucción al salir de la página (es decir, cuando la instancia del componente se elimina del árbol de nodos de la página).

lifetimes: {
    detached: function() {
        const megaElement = scene.getElementById('easyar-mega');
        const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
        megaComponent.closeSession();
    }
}

Cambio entre primer y segundo plano

Cuando la página pasa a segundo plano, utilice el método pause() de EasyARSession para pausar la sesión. Cuando la página vuelve al primer plano, utilice el método resume() de EasyARSession para reanudar la sesión.

/** Implementación en la página del mini programa*/
onHide() {
    if (this.ar) {
        this.ar.pauseSession();
    }
},
onShow() {
    if (this.ar) {
        this.ar.resumeSession();
    }
}
/** Funciones dentro del componente xr-frame*/
pauseSession(): void {
    if (!session) { console.error("La sesión EasyAR no está lista"); return;}
    session.pause();
},
resumeSession(): void {
    if (!session) { console.error("La sesión EasyAR no está lista"); return;}
    session.resume();
}

Este código expone dos funciones pauseSession() y resumeSession() en el componente xr-frame.

En la página del mini programa, se llama a pauseSession() en onHide (cuando el mini programa pasa de primer a segundo plano) para pausar la sesión.

Se llama a resumeSession() en onShow (cuando el mini programa vuelve de segundo a primer plano) para reanudar la sesión.