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

Saiba como ficar de olho no que seu filho vê e posta no TikTok

IStock
Imagem: IStock

Nicole D'Almeida

Colaboração para Tilt

28/11/2020 04h00

Rede social de vídeos curtos, o TikTok tem feito bastante sucesso principalmente entre os adolescentes. Mas depois de ter sido acusada de violação de privacidade por coletar dados de menores de 13 anos, em 2019, e receber uma multa de US$ 5,7 milhões, a plataforma tem ampliado suas ferramentas de controle de pais e responsáveis.

No controle parental do TikTok, os responsáveis conseguem regular as atividades dos mais novos, gerenciando o tempo de uso, bloqueando a função de busca e até mesmo restringindo as mensagens que eles enviam ou recebem.

Recentemente, essa ferramenta foi atualizada e ganhou novos recursos. Agora, o controle parental permite bloquear termos de pesquisa, usuários e hashtags, controlar quem pode comentar nos vídeos publicados e restringir o o somente a vídeos de amigos das crianças.

Todos esses recursos podem ser encontrados na Sincronização Familiar, que permite a vinculação entre as contas dos pais e dos filhos. Veja como configurá-la.

Celular do responsável

e na aba "Eu".

Toque nos três pontinhos no canto superior direito.

Entre em "Sincronização Familiar".

Toque em "Continuar".

Selecione "Pai/Mãe".

Toque em "Avançar".

Celular da criança

Logado na conta do seu filho, repita o processo anterior e selecione "Adolescente" na etapa 5.

Toque em "Avançar".

Toque em "Digitalizar código".

Mire a câmera para o QRcode que apareceu no celular do responsável. Toque em "Vincular contas".

Confirme tocando em "Vincular".

Pronto, as contas já estão vinculadas. Você pode regular as atividades da conta da criança tanto pela sua conta quanto pela dela.

Gerenciamento de tempo de tela

Esta função permite configurar um tempo limite para o uso do aplicativo. Quando o tempo for atingido, será solicitado uma senha para continuar o uso. Outro ponto interessante é que com o gerenciamento de tempo de tela ativado, a conta vinculada não poderá sair dela ou entrar em outra conta.

Para ativá-la:

Toque em "Gerenciamento de tempo de tela".

Escolha o tempo limite em "Limite de tempo".

Toque em "Ativar para (nome da conta)".

Para verificar o código de o, toque em "Obter código de o".

Modo

Este recurso bloqueia conteúdos considerados inapropriados para menores. Quando ativado, a conta vinculada não poderá sair dela ou entrar em outra conta também.

Para ativá-lo:

Toque em "Modo ".

Toque em "Ativar para (nome da conta)".

Procurar

Esta função bloqueia a barra de pesquisa da aba Descobrir. Dessa forma, o usuário não poderá buscar por usuários e hashtags.

Para ativá-la:

Toque em "Procurar".

Toque em "Ligado".

Privacidade e segurança

Em Privacidade e segurança, você encontra outras ferramentas para a proteção do seu filho.

Você pode ativar a opção "Conta privada" que transforma a conta vinculada em privada. Ou seja, só seguidores terão o aos vídeos. Quando desativada, a opção "Sugerir a conta do seu filho adolescente a outras pessoas" não irá sugerir a conta para outros usuários.

Além disso, você pode selecionar quando poderá enviar mensagens diretas, quem poderá ver os vídeos curtidos e quem poderá comentar nos vídeos publicados.