Table of Contents

Controle de fluxo da sessão ar

Este documento apresenta o controle de fluxo da sessão ar, incluindo como criar, iniciar, parar e destruir uma sessão ar.

Antes de começar

Criar

Use appId da biblioteca de localização em nuvem na configuração, serverAddress do serviço em nuvem, apiKey e apiSecret para criar APIKeyAccessData.

Em seguida, use o APIKeyAccessData criado para criar MegaTrackerConfigs.

Depois use MegaTrackerConfigs e a licenseKey da configuração para criar SessionConfigs.

Finalmente, use o método createSession(sessionConfigs) do EasyARMegaComponent montado na cena xr-frame para criar a sessão.

createSession() {
    // obter o megaComponent montado na cena
    const megaElement = scene.getElementById('easyar-mega');
    const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
    // Configuração de autenticação do serviço em nuvem MegaTracker
    const apiKeyAccess = new mega.APIKeyAccessData(this.data.appId, this.data.serverAddress, this.data.apiKey, this.data.apiSecret);
    const megaTrackerConfigs: easyar.MegaTrackerConfigs = {
        access: apiKeyAccess
    }
    // Configuração da sessão
    const sessionConfigs: easyar.SessionConfigs = {
        megaTrackerConfigs: megaTrackerConfigs,
        licenseKey: settings.EasyARLicenseKey
    }
    // Criar instância
    session = megaComponent.createSession(sessionConfigs);
}

Este código demonstra como obter o megaComponent da cena e usar a configuração para criar uma instância de sessão.

Cuidado

Restrição de instância única: apenas uma instância de sessão é permitida em uma cena. Antes de criar uma nova sessão, certifique-se de que a instância antiga foi destruída chamando closeSession(), caso contrário, a criação falhará.

Iniciar

Geralmente, use o método start(options) do EasyARSession no retorno de chamada de prontidão do sistema ar do xr-frame para iniciar a sessão.

Aviso

O MegaTracker depende de dados fornecidos pelo rastreador ar plano e não pode funcionar antes que o rastreador de plano seja inicializado.

Em WXML, use bind:ready="handleReady" para registrar o evento de prontidão do sistema ar:

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

Na função de retorno handleReady do componente xr-frame, use o método start(options) do EasyARSession para iniciar a sessão.

handleReady: function(event) {
    try {
        //Iniciar sessão, com 5 tentativas de repetição em caso de falha por padrão
        await session.start();
    } catch (err) {
        console.error(`A inicialização da sessão EasyAR falhou: ${err.message}`);
        return;
    }
}

Parar e destruir

Use o método closeSession() do EasyARMegaComponent montado na cena xr-frame para destruir a sessão.

Recomenda-se chamar no detached do ciclo de vida do componente xr-frame para garantir a destruição ao sair da página (ou seja, quando a instância do componente for removida da árvore de nós da página).

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

Alternar entre primeiro e segundo plano

Ao enviar a página para segundo plano, use o método pause() do EasyARSession para pausar a sessão. Ao trazer a página de volta ao primeiro plano, use o método resume() do EasyARSession para retomar a sessão.

/** Chamada na página do miniprograma*/
onHide() {
    if (this.ar) {
        this.ar.pauseSession();
    }
},
onShow() {
    if (this.ar) {
        this.ar.resumeSession();
    }
}
/** Função no componente xr-frame*/
pauseSession(): void {
    if (!session) { console.error("A sessão EasyAR não está pronta"); return;}
    session.pause();
},
resumeSession(): void {
    if (!session) { console.error("A sessão EasyAR não está pronta"); return;}
    session.resume();
}

Este código expõe duas funções pauseSession() e resumeSession() no componente xr-frame.

Na página do miniprograma, chame pauseSession() em onHide (quando o miniprograma vai do primeiro para o segundo plano) para pausar a sessão.

Em onShow (quando o miniprograma volta do segundo para o primeiro plano), chame resumeSession() para retomar a sessão.