;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

Marcas iniciam ações no Clubhouse; confira os primeiros aprendizados

Reprodução
Imagem: Reprodução

Renato Pezzotti

Colaboração para o UOL, em São Paulo

17/02/2021 04h01

O Clubhouse, nova rede social de conversas por voz, é o assunto do momento. Criado há menos de um ano, o aplicativo já tem 6 milhões de usuários e foi avaliado em US$ 1 bilhão. A plataforma, mesmo restrita entre os usuários de iPhone, tem sido palco de iniciativas de alguns anunciantes - enquanto outros esperam os próximos os da rede.

Na semana ada, logo após o primeiro grande buzz sobre o aplicativo, algumas marcas já se aventuraram na plataforma. Audi e Nescau foram as primeiras.

A reportagem de UOL Mídia e Marketing conversou com os executivos das empresas para colher as primeiras impressões sobre as experiências. Confira:

Audi discutiu 'A Era dos Carros Elétricos'

A Audi foi a primeira montadora a promover uma sala de debates. Segundo Cláudio Rawicz, diretor de comunicação e marketing da empresa, a decisão aconteceu pelo fato de a audiência ser extremamente segmentada no aplicativo.

"Ali está o público-alvo de Audi. Neste momento, ele é super nichado e podemos, assim, trazer um tema de discussão segmentado. Também nos ajudou o fato de não precisar de aprovações do escritório central, na Alemanha. Essa autonomia no Brasil nos faz atuar de forma muito rápida e muito assertiva", diz o executivo.

O que faz os ouvintes escolherem as salas, na maioria das vezes, é o tema - segundo Cláudio, escolher o assunto da Audi foi fácil. "Somos líderes em carros elétricos no Brasil. Assim, convidamos diversas personalidades do meio, jornalistas do setor e apaixonados por carros elétricos para falar sobre o tema. Também não tivemos problema de falar de outras marcas, de forma aberta", declara Rawicz.

Segundo o executivo, mais de 1.000 pessoas aram pela sala durante os 90 minutos de transmissão. Mas, com esse público, a plataforma não pode se tornar um SAC 4.0?

"É possível ter clientes não satisfeitos, claro. A plataforma não é local com foco comercial. Por ser um 'podcast ao vivo', por que não levantar salas de pós venda para resolvermos problemas? Fica a ideia", afirma o diretor da Audi.

Nescau promove 'Sports Talk'

Na quinta-feira(11), a Nestlé promoveu a 1ª edição do 'Nescau Sports Talks'. O bate papo teve a participação da paratleta Verônica Hipólito e da ginasta Flávia Saraiva, embaixadoras da marca.

A mediação do debate foi de Abner Bezerra, head de marketing de Nescau e bebidas Nestlé. "A ideia foi tirar dúvidas das pessoas e promover o espírito de Nescau, de estar conectado com o consumidor. Teremos outras ações nas próximas semanas, com outros embaixadores da marca", afirma Abner.

Para o executivo, o espaço serve para interagir com as pessoas, abrir diálogo com os consumidores e trazê-los para perto da marca. "É uma mistura de grupos de WhatsApp, podcast e bate papo, onde tudo acontece em tempo real. É um formato novo e vai ser desafiador descobrir as novidades junto com consumidores e convidados", declara o executivo.

Sobre a plataforma oferecer um espaço para críticas ao vivo, Abner não vê problema. "Lidamos com isso o tempo todo, por meio das redes sociais e do telefone. Faz parte ouvir os comentários. Mas acredito que as pessoas entram na sala para aproveitar os temas, as discussões. Pelo que sentimos na primeira edição, elas estão engajadas em participar do debate", diz.