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

Mudança na privacidade do iOS desencadeia guerra entre Apple e Facebook

dole777/ Unsplash
Imagem: dole777/ Unsplash

Fernando Barros

Colaboração para Tilt

28/04/2021 04h00

O lançamento esta semana do iOS 14.5, atualização do sistema operacional dos iPhones, virou motivo de guerra entre a Apple e o Facebook. Isso porque a empresa de Zuckerberg tem se posicionado contra um novo recurso de privacidade do sistema. Agora, todos os aplicativos que quiserem rastrear dados e atividades da pessoa dentro dos apps e sites terá que pedir a sua permissão para isso.

A solicitação de consentimento será feita por meio de uma notificação pop-up na tela do celular. A novidade, diz a Apple, é uma forma de dar às pessoas um maior controle em relação à coleta dos seus dados pessoais e à sua privacidade. Assim, quem não quiser ter seus os monitorados pode negar a permissão aos aplicativos.

Essa mudança afeta diretamente os negócios de empresas que coletam dados para anúncios personalizados, como é o caso do Facebook. Hoje, calcula-se que grande parte da sua receita vem da publicidade digital. De US$ 86 bilhões obtidos pela companhia em 2020, US$ 84,1 bilhões (97%) vieram dos anúncios, segundo seu último balanço anual.

Com tais números, a gigante estava montando uma verdadeira ofensiva contra a empresa da maçã, alegando que o novo recurso de privacidade vai tornar a internet "mais cara". Isso porque muitos aplicativos dizem que dependem da publicidade para manter a gratuidade do serviço.

A empresa foi além e diz que a medida da Apple prejudica o negócio de pequenas empresas que usam Facebook e Instagram para anunciar seus produtos e serviços.

Segundo o Facebook, a mudança na política de privacidade da Apple é uma maneira de tentar eliminar a concorrência, priorizando seus próprios aplicativos e a coleta de dados realizada por eles. A empresa de Cupertino afirma que até seus apps também seguirão as novas regras.

Ao perder essa queda de braço, Mark Zuckerberg, chefe do Facebook, recentemente mudou de postura e agora diz que a mudança pode ser boa. "A realidade é que estou confiante de que seremos capazes de istrar bem essa situação e estaremos em uma boa posição", disse em uma sala do app Clubhouse.

Duelo de titãs

Essa batalha entre as duas gigantes de tecnologia não é de hoje. Em dezembro do ano ado, o chefe da Apple, Tim Cook, já tinha jogado lenha na fogueira com um tuíte alfinetando o Facebook sobre privacidade.

Na ocasião, ele afirmou que a rede social continuaria rastreando as pessoas em aplicativos e sites, só que teria que pedir sua permissão primeiro. Já no inicio deste ano, aproveitando o Dia da Privacidade de Dados, celebrado em 28 de janeiro, a Apple distribuiu comunicado à imprensa sobre a importância de proteger os dados e informações das pessoas online e como a empresa vem atuando nesse sentido.

Mesmo sem citação direta ao Facebook, o recado estava dado. "Nosso objetivo é criar tecnologia que mantenha as informações das pessoas seguras e protegidas. Acreditamos que a privacidade é um direito humano fundamental e nossas equipes trabalham todos os dias para incorporá-la a tudo o que fazemos", afirmou no comunicado o vice-presidente sênior de Engenharia de Software da Apple, Craig Federighi.

Durante conferência em janeiro, para apresentação dos resultados financeiros do Facebook nos últimos três meses de 2020, Mark Zuckerberg fez duras críticas à empresa de Cupertino. O executivo disse que, por trás das alegações de defesa de privacidade da companhia da Apple, há na verdade uma postura anticompetitiva.

O site The Information noticiou no dia 28 de janeiro que o Facebook planeja processar a Apple por prática de truste —quando empresas tentam estabelecer um monopólio para controlar a oferta de produtos ou serviços e dominar o mercado.

Também em janeiro, Zuckerberg afirmou que a Apple é uma das suas principais concorrentes, mesmo que —pelo menos por enquanto— ainda não possua nenhuma rede social. No caso, se referia ao iMessage, o sistema de mensagem da Apple nativo em diferentes produtos da empresa. Isso, segundo Zuckerberg, reduz as chances de crescimento de outros aplicativos do gênero, como as do grupo Facebook —WhatsApp e Messenger.