Ir para o conteúdo

Últimas considerações

Muito já foi falado, mas é preciso entender um conceito muito importante que ainda não foi discutido.

Todo widget é executado no DSME Player como uma mídia DOOH. Apesar de ter a mesma estrutura e usar as mesmas tecnologias, ele não é apresentado como um site ou uma página web convencional. Até porque nenhum usuário irá interagir com o widget enquanto ele estiver sendo exibido no player.

Como ele é uma mídia, que será intercalada com outras mídias dentro de um looping, ele deve estar disponível no momento em que o player o executar. Isso significa que ele não deve fazer requisições externas porque não pode aguardar o download ser concluído.

Imagine o seguinte cenário: um widget está configurado para ser executado durante 15 segundos. Ele será exibido em um player que está instalado em um elevador. No momento em que o player inicia sua execução, ele requisita uma informação de uma fonte de dados qualquer para só então começar a exibir a informação. Acontece que neste exato momento a conexão com a internet está ruim, ou nem mesmo existe. Então essa requisição demora alguns segundos ou sequer é completada. O resultado é que dos 15 segundos totais, boa parte é perdida deixando o widget "travado", apresentado uma interface quebrada ou alguma mensagem de "carregando".

Agora imagine você, usuário final, entrar no elevador e se deparar com uma tela com um loader rodando? Neste tipo de ambiente, mesmo 5 segundos parecem uma eternidade.

Portanto, o widget tem que ser executado levando-se em consideração que ele está offline, e que a informação deve ser apresentada para o usuário o quanto antes, para que o tempo de execução seja aproveitado por completo.

Não faça isto

Resumindo a história acima: não carregue conteúdo externo durante a execução do widget. O widget é executado offline como uma mídia DOOH, e as pessoas que o assistem não devem aguardar por um carregamento demorado para ver sua informação.

Todo conteúdo que ele precisar será disponibilizado durante a compilação. Sendo assim, ele deve ser executado por completo assim que o player o iniciar.

Mas também existe o outro lado. Quando o player carregar o arquivo index.html do widget, todos os arquivos de recurso, como imagens, fontes, CSS e JS precisam ser carregados antes que a informação seja exibida. Isto porque da mesma forma que não é legal que o usuário final veja uma tela de loading no elevador, também não é legal que ele veja o widget sendo "montado", nem que seja por 1 segundo.

Por exemplo, você pode querer utilizar alguma biblioteca MVVM, como Angular ou Vue.js. Neste caso, será primeiro necessário carregar todos os arquivos e depois iniciar a aplicação para que o HTML seja devidamente renderizado. Isso geralmente leva só alguns centésimos de segundo, mas é tempo suficiente para que o usuário perceba o processo.

A ideia então é só exibir a interface depois que absolutamente tudo estiver pronto. Para isto existem dois mecanismos.

O evento ready

Primeiro, você deve escutar o evento ready do objeto Content.

Este evento só é disparado depois que todos os recursos já foram carregados, e depois que o player já fez tudo o que tinha que fazer. Em resumo, ele serve para dizer que da parte do player está tudo pronto.

widget.js

Content.on('ready', function(){
    // tudo pronto chefe!
});

Depois que o evento é disparado, é a vez do widget fazer algum pré-processamento antes de exibir a informação para o usuário. Use este evento para iniciar bibliotecas, carregar dados, compilar templates e o que mais precisar fazer.

Splashscreen ou tela preta

Enquanto o widget não estiver totalmente pronto para exibir a informação, ele deve exibir alguma splashscreen, ou mais fácil ainda, exibir nada.

Tela preta

Por padrão a cor de fundo da tela do player é preto. Isso quer dizer que se você simplesmente colocar um display: none no seu elemento raiz, será exibida uma tela preta para o usuário. No momento em que você decidir exibir a sua interface, é só mudar para display: block.

Você deve configurar seu CSS para exibir uma tela preta por exemplo, e no evento ready, após você fazer tudo o que tinha pra fazer, manipular o CSS para exibir a interface com a informação de fato.

Faça isto

Durante o carregamento dos recursos e o pré-processamento dos dados, escolha por exibir uma splashscreen ou uma tela preta. Configure isto via CSS, e no evento ready exiba a interface com a informação pronta.

Conclusão

Parabéns por ter chegado até aqui! A estrada foi longa, mas nós vimos tudo o que é necessário para criar um widget pronto para execução na plataforma DSME.

Agora cabe a você criar novas experiêncas para impactar as milhares de pessoas que diariamente consomem informação em nossos players.