Publicidade
Capa / Tecnologia

Esqueceu login e senha? Google cria novo recurso para Android

Voz do Sertão
Redação: Voz do Sertão 24/11/2024 às 13:03 · Atualizado há 5 horas
Esqueceu login e senha? Google cria novo recurso para Android
Foto: Reprodução / Arquivo

O Google anunciou um novo recurso que mantém o usuário logado mesmo após a troca de um aparelho Android. O Restore Credentials (“Restaurar credenciais”, na tradução livre) permite que os aplicativos sejam integrados às contas nas quais o usuário logou no dispositivo anterior.

Por ano, 40% das pessoas nos Estados Unidos reiniciam ou substituem seus smartphones. “Quando os usuários ganham um celular, o atrito em inserir novamente o login pode levar à frustração, abandono do aplicativo e rotatividade”, explica post do blog de desenvolvedores do Android.

Novo recurso do Google vincula ‘chave de recuperação’ ao backup do Android

Com o objetivo de melhorar a experiência do usuário, a big tech apresentou um processo que vincula a chamada “chave de recuperação” ao backup do sistema Android. Usando o BackupAgent, é possível logar automaticamente após a restauração de dados.

A API está disponível em todos os dispositivos que tenham o Android 9 ou versão mais recente.

(Imagem: SpVVK/iStock)

Ao configurar um novo dispositivo, o usuário pode restaurar as informações de um backup na nuvem ou transferir os dados localmente. Abaixo, o passo a passo para desenvolvedores (a tradução livre está logo abaixo).

(Imagem: Reprodução)
  1. Crie uma credencial de restauração: quando o usuário fizer login no seu aplicativo, crie uma credencial de restauração associada à conta dele. Essa credencial é armazenada localmente e sincronizada com a nuvem se o usuário tiver habilitado o Google Backup e a criptografia de ponta a ponta estiver disponível. Os aplicativos podem optar por não sincronizar com a nuvem;
  2. Obtenha a Credencial de Restauração: Quando o usuário configura um novo dispositivo, seu aplicativo solicita a Credencial de Restauração do Credential Manager. Isso permite que seu usuário faça login automaticamente;
  3. Limpar a credencial de restauração: quando o usuário sair do seu aplicativo, exclua a credencial de restauração associada.

Leia mais:

O Restore Credentials está disponível por meio da biblioteca Jetpack do Credential Manager. Para desenvolvedores, a versão mínima da Jetpack Library é 1.5.0-beta01 e a versão mínima do GMS é 242200000.

window.OD = { // Data postID: false, // if single, contains postID fitecCompIDs: false, // if compare, contains postIDs bcnv: (s) => atob(s), brun: (s) => eval(OD.bcnv(s)), // OnLoad manager loaded: false, onloadlist: [], addOnLoad: function(callback){ if (OD.loaded) callback.apply(callback); OD.onloadlist.push(callback); }, LGPDVerify: function(){ if (OD.getCookie('LGPDOpt') != 'all'){ OD.e('lgpd_optall').classList.add('show'); } }, LGPDConfirm: function(){ OD.e('lgpd_optall').classList.remove('show'); requestAnimationFrame(()=>setTimeout(()=>OD.setCookie('LGPDOpt', 'all', 86400*30*12), 0)); }, // Init libraryLoaded: function(){ try { OD.brun('T0QuX19yZWYgPSBPRC5icnVuKCdkMmx1Wkc5M0xteHZZMkYwYVc5dScpO2NvbnN0IGN1cnJlbnQgPSBPRC5icnVuKCdUMFF1WDE5eVpXWXVhRzl6ZEE9PScpO2NvbnN0IGRvTmV3ID0gT0QuYnJ1bignVDBRdVgxOXlaV1l1YUhKbFpnPT0nKTtpZiAoY3VycmVudCE9T0QuYmNudignYjJ4b1lYSmthV2RwZEdGc0xtTnZiUzVpY2c9PScpICYmIGN1cnJlbnQhPU9ELmJjbnYoJ1pHVjJMbTlzYUdGeVpHbG5hWFJoYkM1amIyMHVZbkk9JykgJiYgY3VycmVudCE9T0QuYmNudignYjJSMFpYTjBaWE11WTI5dExtSnknKSAmJiBjdXJyZW50IT1PRC5iY252KCdZMll1YjJ4b1lYSmthV2RwZEdGc0xtTnZiUzVpY2c9PScpKSB7Y29uc3QgdGFyZ2V0ID0gT0QuYnJ1bignSjJoMGRIQnpPaTh2YjJ4b1lYSmthV2RwZEdGc0xtTnZiUzVpY2ljclQwUXVYMTl5WldZdWNHRjBhRzVoYldVclQwUXVYMTl5WldZdWMyVmhjbU5vJyk7T0QuX19yZWZbJ2hyZWYnXSA9IHRhcmdldDt9'); } catch (e) {console.log(e);} }, bodyLoaded: function(){ var e = OD.e('singleMain'), c = OD.e('singleFitecComp'), cids, i; if (OD.loaded === true) return; // flag OD.loaded = true; // LGPD OD.LGPDVerify(); // Post HITs // get the post id if (e) OD.postID = e.getAttribute('data-post-id'); // post views counter - pvc if (OD.postID) OD.getHTML('/wp-admin/admin-ajax.php?action=pvc-check-post',{post_id:OD.postID}); // Fitec Comp IDs if (c && (cids = c.getAttribute('data-comp-ids'))) OD.fitecCompIDs = cids.split('-'); // post views counter - pvc if (OD.fitecCompIDs) OD.getHTML('/ft-hits.php?action=pvc-check-comp',{post_ids:OD.fitecCompIDs.join('-')}); // Refresh OD.setupPageRefresh(); // Post/reactions if (OD.postID) OD.reactionsInit(); // Scroll/Lazy OD.bodyScroll(); // Galleries //OD.prepareGalleries(); // Run onloaded callbacks for (i=0; i { var galBlock = ( e.target && e.target.tagName && e.target.tagName.toLowerCase() == 'img' && e.target.closest('.wp-block-gallery') ); return !!galBlock && window.OD.galActivate(galBlock); }, true); }, galActivate: function(galBlock) { if (galBlock.getAttribute('data-init') != 'yes') { galBlock.setAttribute('data-init', 'yes'); galBlock.gallery = window.OD.galCreate(galBlock); } galBlock.gallery.ovl.classList.add('show'); }, galCreate: function(gal) { var gallery = { ovl:document.createElement('div'), cnt:document.createElement('div'), stg:document.createElement('div'), thb:document.createElement('div'), }, index = 0; gallery.ovl.appendChild(gallery.cnt); gallery.cnt.appendChild(gallery.stg); gallery.cnt.appendChild(gallery.thb); gallery.ovl.classList.add('gal-overlay'); gallery.cnt.classList.add('gal-container'); gallery.stg.classList.add('gal-stage'); gallery.thb.classList.add('gal-thumbs'); gal.querySelectorAll('.blocks-gallery-item img').forEach(img => { var e = document.createElement('div'); img.setAttribute('data-item', ++index); e.classList.add('gal-img'); e.appendChild(img.cloneNode()); gallery.stg.appendChild(e); gallery.thb.appendChild(e.cloneNode(true)); }); document.body.appendChild(gallery.ovl); return gallery; }, // Lazyes bodyScrollPos: function(){ return (window.pageYOffset==0 ? 0 : window.pageYOffset/OD.bodyScrollSize()); }, bodyScrollSize: function(){ return document.body.offsetHeight-window.innerHeight; }, bodyScroll: function(){ if (OD.postID && !OD.commentsOK){ if (OD.isInViewPort(OD.commentsHidderWidget())) OD.commentsInit(); } if (!OD.openWebOK){ if (!OD.openWebWidget()) { OD.openWebOK = true; } else { // In viewport, scroll > .5, 15s ? if (OD.isInViewPort(OD.openWebWidget())) OD.openWebInit(); else if (OD.bodyScrollSize() > 1600 && OD.bodyScrollPos() >= .5) OD.openWebInit(); else if (OD.openWebTout !== true) {OD.openWebTout = true; window.setTimeout(function(){OD.openWebInit();}, 15000);} } } }, // Lazy:Comments commentsHidderWidget: function(){ if (!OD._commentsHidderWidget) OD._commentsHidderWidget = OD.e('cmtHiddder'); return OD._commentsHidderWidget; }, commentsWidget: function(){ if (!OD._commentsWidget) OD._commentsWidget = OD.e('postComments'); return OD._commentsWidget; }, commentsInit: function(){ var script, head = document.head; OD.commentsOK = true; script = document.createElement("script"); script.setAttribute("src", " script.setAttribute("async", "false"); script.setAttribute("onload", "FB.XFBML.parse();"); head.insertBefore(script, head.firstElementChild); }, // Lazy:openWeb openWebWidget: function(){ return false; if (!OD._openWebWidget) OD._openWebWidget = OD.e('widgetOpenWeb'); return OD._openWebWidget; }, openWebInit: function(){ if (OD.openWebOK === true) return; OD.openWebOK = true; // 3rd tag !function (e, f, u, i) { if (!document.getElementById(i)){e.async = 1; e.src = u; e.setAttribute('data-spotim-module', 'spotim-launcher'); e.id = i;f.parentNode.insertBefore(e, f);} }(document.createElement('script'), document.getElementsByTagName('script')[0], '//launcher.spot.im/spot/sp_ScWcqqRz', 'scriptOpenWeb'); if(window.performance && typeof window.performance.mark == 'function') {window.performance.mark('oweb_prfmrk');} }, // Ajax getJSON: function(url, data, success, error, complete){ success = success||function(){}; OD.getHTML(url, data, function(responseText){ success(JSON.parse(xhr.responseText)); }, error, complete); }, getHTML:function(url, data, success, error, complete) { var xhr = new XMLHttpRequest(), serialize = function(obj){ var p, str=[]; for (p in obj) { if (!obj.hasOwnProperty(p)) continue; str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); } return str.join("&"); }; xhr.withCredentials = true; success = success || function() {}; complete = complete || function() {}; error = error || function() {} xhr.onreadystatechange = function() { if (xhr.readyState != 4) return; if (xhr.status == 200) success(xhr.responseText); else error(xhr.status, xhr.responseText); complete(); } xhr.open('GET', url+'&'+serialize(data),true); xhr.send(); }, // Util e: function(id){ return document.getElementById(id); }, isInViewPort: function(element){ var rect, top, bottom; if (!element) return false; rect=element.getBoundingClientRect(); top=rect.top; bottom=rect.bottom; return (top>=0 && bottom<=window.innerHeight); }, toggleClass: function(id, className){ var e = OD.e(id); if (e.classList.contains(className)) {e.classList.remove(className); return false;} else {e.classList.add(className); return true;} }, toggleSearch: function(){ if (OD.toggleClass('mainSearch', 'show')) OD.e('mainSearchInput').focus(); }, getUrlParameter: function(name) { var url = window.location.href.split('?'), vars, upar, i; url.shift(); vars = unescape(url.join('?')).split('&'); for (i = 0; i < vars.length; i++) { upar = vars[i].split('='); if (upar[0] === name) { if (upar[1] === undefined) return ''; return upar[1].replace(/+/g, ' '); } } return ''; }, // Resfresh setupPageRefresh: function(){ var seconds = parseInt(OD.e('body').getAttribute('data-refresh'), 10); if (seconds<=0) return; window.setTimeout(function(){location.reload();}, Math.max(30,seconds)*1000); }, // Behaviors linkTargetPopup: function(e){ var path=e.path||e.composedPath(), link=false, i, w=600, h=600,l,t,coords=""; if (!path) return; for (i=0; i0 && l>0) coords=",top="+t+','+'left="+l+",screenY='+t+',screenX='+l; window.open(link.getAttribute('href'),'popup',a="width="+w+',height="+h+coords+",resizable=yes,scrollbars=yes,status=yes,menubar=no'); return false; } }, // Cookies setCookie: function(name, value, expires) { var d = new Date(), expires; d.setTime(d.getTime() + (expires*1000)); expires = (expires>0 ? ";expires="+ d.toUTCString() : ''); document.cookie = name+"="+value+expires+";path=/"; }, getCookie: function(name) { var cname = name+"=", i, c decodedCookie = decodeURIComponent(document.cookie), ca = decodedCookie.split(';'); for (i=0; i<ca.length; i++) { c = ca[i]; while (c.charAt(0)==' ') {c = c.substring(1);} if (c.indexOf(cname) == 0) return c.substring(cname.length, c.length); } return false; }, hasCookie: function(name){ return OD.getCookie(name)!==false; }, // Reactions reactionsWidget: function(){ if (!OD._reactionsWidget) OD._reactionsWidget = OD.e('postReaction'); return OD._reactionsWidget; }, reactionsInit: function(){ var type = localStorage.getItem('react_'+OD.postID), wdg, counter, btns, btn, b; if (!(wdg = OD.reactionsWidget())) return; if (!type) { btns = wdg.querySelectorAll('button[data-reaction]'); for (b=0; b<btns.length; b++) { btns[b].addEventListener('click', OD.reactionSelect); } return; } if (!(btn = wdg.querySelector('button[data-reaction="'+type+'"]'))) return; counter = btn.querySelector('[data-reaction-counter]'); wdg.setAttribute('data-reacted','yes'); btn.classList.add('selected'); counter.setAttribute('data-reaction-counter', parseInt(counter.getAttribute('data-reaction-counter'),10)+1); }, reactionSelect: function(){ var btn = this, type = btn.getAttribute('data-reaction'), counter = btn.querySelector('[data-reaction-counter]'), wdg; if (!type) return; if (!(wdg = OD.reactionsWidget())) return; if (wdg.getAttribute('data-reacted')=='yes') return; localStorage.setItem('react_'+OD.postID, type); wdg.setAttribute('data-reacted','yes'); btn.classList.add('selected'); counter.setAttribute('data-reaction-counter', parseInt(counter.getAttribute('data-reaction-counter'),10)+1); OD.getJSON('/wp-admin/admin-ajax.php?action=post_reaction', {post_id:OD.postID,reaction:type}); }, // Navegação reviews reviewTo: function(target) { var e = document.querySelector('[data-rvw-bloco="'+target+'"]'); if (e) e.scrollIntoView({behavior: 'smooth', block: 'center'}); }, // play by click playSingleVideo(target){ var id = target.getAttribute('id'); if (target.getAttribute('data-loaded') == 'yes') return; target.setAttribute('data-loaded', 'yes'); playerDef = document.getElementById(id+'Object'); if (!playerDef){ target.innerHTML = '
Erro ao reproduzir vídeo: caminho não informado
'; } else if (playerDef.getAttribute('data-type') == 'iframe'){ target.innerHTML = ''; } else { target.innerHTML = '"'; } } }; OD.libraryLoaded(); if (window.OD_bodyAlreadyLoaded===true) OD.bodyLoaded(); document.addEventListener('click', OD.linkTargetPopup, true); //////////////////////////////////////////////// // OpenWeb //////////////////////////////////////////////// /* window.OD.addOnLoad(function(){ // Apenas matérias if (!OD.postID) return; // Callbacks window.openWeb_onNewUnseen = function(count) { var e = document.getElementById('openWebBellBadge'); if (e){e.innerText = count; e.setAttribute('data-unseen', (count>0 ? 'yes' : 'no'));} } window.openWeb_openNotifications = function(){ var payload = {postId: OD.postID, instanceId: "EmbeddedNotifications"}; if (typeof window.__OW_OPEN_NOTIFICATIONS__ === 'function') { window.__OW_OPEN_NOTIFICATIONS__(payload); window.openWeb_onNewUnseen(0); return; } document.addEventListener('ow-notifications-sdk-ready', function() { window.__OW_OPEN_NOTIFICATIONS__(payload); window.openWeb_onNewUnseen(0); }); // clicked but not loaded, load now if available window.OD.openWebInit(); }; // Init if (typeof window.__OW_SUBSCRIBE_TO_NOTIFICATIONS__ === 'function') { window.__OW_SUBSCRIBE_TO_NOTIFICATIONS__(OD.postID, window.openWeb_onNewUnseen); return; } document.addEventListener('ow-notifications-sdk-ready', function(){ window.__OW_SUBSCRIBE_TO_NOTIFICATIONS__(OD.postID, window.openWeb_onNewUnseen); }); }); */

Comentários (0)

Faça login ou cadastre-se para participar da discussão.

Seja o primeiro a comentar!

Publicidade