Table of Contents

Controle de fluxo da AR Session

Este documento apresenta o controle de fluxo da AR Session, incluindo como criar, iniciar, parar e destruir a AR Session.

Antes de começar

Criar

Use o appId da cloud localization library, o serverAddress do cloud service, apiKey e apiSecret na configuração para criar APIKeyAccessData.

Depois use o APIKeyAccessData criado para criar MegaTrackerConfigs.

Em seguida, use MegaTrackerConfigs e o licenseKey na configuração para criar SessionConfigs.

Por fim, use o método createSession(sessionConfigs) de EasyARMegaComponent montado na cena xr-frame para criar a session.

createSession() {
    // obtem o megaComponent montado na cena
    const megaElement = scene.getElementById('easyar-mega');
    const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
    // configuracao de autenticacao do servico 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
    }
    // configuracao de Session
    const sessionConfigs: easyar.SessionConfigs = {
        megaTrackerConfigs: megaTrackerConfigs,
        licenseKey: settings.EasyARLicenseKey
    }
    // cria uma instancia
    session = megaComponent.createSession(sessionConfigs);
}

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

Cuidado

Limite de instância única: apenas uma instância Session pode existir em uma cena. Antes de criar uma nova Session, certifique-se de que closeSession() foi chamado para destruir a instância antiga, caso contrário a criação falhará.

Iniciar

Geralmente, no callback em que o sistema AR do xr-frame está pronto, use o método start(options) de EasyARSession para iniciar a session.

Aviso

MegaTracker depende dos dados fornecidos pelo planar AR tracker e não pode funcionar antes da inicialização do planar tracker ser concluída.

No WXML, use bind:ready="handleReady" para registrar o evento de sistema AR pronto:

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

No callback handleReady do componente xr-frame, use o método start(options) de EasyARSession para iniciar a session.

handleReady: function(event) {
    try {
        //inicia Session; por padrao tenta novamente 5 vezes em caso de falha
        await session.start();
    } catch (err) {
        console.error(`EasyAR Session initialization failed: ${err.message}`);
        return;
    }
}

Parar e destruir

Use o método closeSession() de EasyARMegaComponent montado na cena xr-frame para destruir a session.

Recomenda-se chamá-lo no lifecycle detached do componente xr-frame para garantir a destruição ao sair da página, ou seja, quando a instância do componente é 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 foreground e background

Quando a página vai para background, use o método pause() de EasyARSession para pausar a session. Quando a página volta para foreground, use o método resume() de EasyARSession para retomar a session.

/** chamada da pagina do Mini Program*/
onHide() {
    if (this.ar) {
        this.ar.pauseSession();
    }
},
onShow() {
    if (this.ar) {
        this.ar.resumeSession();
    }
}
/** funcao no componente xr-frame*/
pauseSession(): void {
    if (!session) { console.error("EasyAR Session is not ready"); return;}
    session.pause();
},
resumeSession(): void {
    if (!session) { console.error("EasyAR Session is not ready"); return;}
    session.resume();
}

Neste código, o componente xr-frame expõe as duas funções pauseSession() e resumeSession().

Na página Mini Program, chame pauseSession() em onHide, isto é, quando o Mini Program entra em background a partir de foreground, para pausar a session.

Chame resumeSession() em onShow, isto é, quando o Mini Program volta de background para foreground, para retomar a session.