;(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
Topo

Termo de uso polêmico fez WhatsApp perder 1,8 milhão de contas em um só dia

Backer Design
Imagem: Backer Design

Guilherme Tagiaroli

De Tilt, em São Paulo

02/12/2021 15h44Atualizada em 07/12/2021 15h09

Mal 2021 tinha começado, e o WhatsApp disparou uma mensagem dizendo que excluiria quem não aceitasse os novos termos de uso. Que a mudança não foi bem aceita, isso era claro. Mas ninguém sabia o dano que tinha causado: 1,8 milhão de pessoas apagaram suas contas apenas em 10 de janeiro, três dias depois que as notificações começaram a ser enviadas.

O número de contas excluídas apareceu publicamente pela primeira vez agora que a ex-funcionária s Haugen vazou os chamados Facebook Papers, documentos internos da rede social aos quais Tilt teve o. Um dos estudos revela a preocupação da empresa em medir as perdas causadas pelo aceite compulsório dos termos.

O relatório diz que Turquia, Egito e Hong Kong foram os que mais sentiram a debandada. Só na Turquia cerca de 500 mil usuários deixaram o mensageiro naquele dia. Não há detalhes dos números das outras duas localidades.

Vale dizer que para uma rede social com mais de 2 bilhões de usuários ativos mensalmente, foi um impacto pequeno. Mas a enorme repercussão chamou a atenção para:

  • os termos de uso que ninguém lê;
  • os dados sensíveis compartilhados entre empresas.

Ficou óbvio para muita gente, naquele momento, que as redes sociais não nos dão muita opção. Ou você aceita ou você sai dos apps que mais usa —e, em muitos casos, depende financeiramente.

À época, o WhatsApp disse que quem não aceitasse o compartilhamento de dados de clientes das contas comerciais (Business) com as empresas do Facebook teria a conta suspensa.

O movimento chamou a atenção dos órgãos de proteção de dados e práticas competitivas.

Na Turquia, assim que o WhatsApp ou a notificar as pessoas, o órgão antitruste do país ou a investigar o caso e houve uma campanha nas redes sociais pedindo #WhatsAppSiliyoruz (#EstamosDeletandoOWhatsApp", em tradução livre), enquanto as pessoas migraram em massa para o BiP (um sistema de mensagem da operadora Turkcell), Dedi, Telegram e Signal, segundo a mídia local.

Em Hong Kong, o Signal virou o app mais baixado em 12 de janeiro. No Egito, o Telegram liderou. No Brasil, os dois apps foram baixados por milhões de pessoas, e a rede foi investigada pela defensoria pública de São Paulo e o MPF (Ministério Público Federal).

Depois disso, o WhatsApp flexibilizou a aceite. Hoje, quem ignora o termo de uso pode continuar trocando mensagens sem grandes prejuízos. É assim que funciona hoje no Brasil (veja o que ele diz aqui), por exemplo.

Mas, para quem vive na União Europeia, os termos são outros e ainda mais detalhados e flexíveis. Em novembro, os órgãos reguladores de proteção de dados do bloco multaram a empresa em 225 milhões de euros (R$ 1,4 bilhão), um valor recorde, e obrigou a Meta (dona de WhatsApp, Facebook e Instagram) a alterar o texto das regras.

Segundo investigação do IDPC (sigla em inglês para Comissão de Proteção de Dados da Irlanda), o termo não era claro e precisava dar detalhes sobre quais dados são coletados e usados pela empresa, por que eles são armazenados e quando são deletados e quais serviços outras empresas prestam ao WhatsApp com base nos dados compartilhados.

Também cobrou ainda explicações mais consistentes sobre por que o app envia dados para outros países e de que maneira eles são protegidos.

Na ocasião, o WhatsApp informou que recorreria da multa e que fez "ajustes de linguagem" para atender à decisão do IDPC. A plataforma diz que continua com o compromisso com a privacidade dos usuários, independentemente da localização deles.

Como as mudanças vêm por imposição, quem usa WhatsApp na União Europeia não terá de clicar em nada para "aceitar" essas alterações.

Procurado por Tilt para comentar as informações do documento sobre a perda de usuários, o WhatsApp disse: "Embora não possamos comentar sobre um documento que não vimos, agradecemos a oportunidade de dizer aos nossos usuários que o WhatsApp é criptografado de ponta a ponta".

Além disso, reforçou o que já havia dito em maio: que "a maioria das pessoas que recebeu a atualização a aceitou" e que o app "continua crescendo".

*

As informações foram tiradas de documentos revelados à Comissão de Valores Mobiliários dos EUA (SEC, na sigla em inglês) e fornecidas ao Congresso dos Estados Unidos de forma editada pela assessoria legal de s Haugen. Desde então, um consórcio de veículos de notícias analisa o material. No Brasil, o Núcleo Jornalismo teve o aos documentos e fez uma parceria com Tilt para que as informações fossem compartilhadas.