Unser Blog

Schlagwörter: #ia #PS5 #Steam #Xbox #Switch 2 #Nvidia #PlayStation #OpenAI #PC #TGS 2026 #PlayStation 5 #inteligência artificial #Crunchyroll #Sony #nintendo switch 2 #anime
Mostrando posts com a tag #Peach — ver todos
blog_post.exe
Hello Peach e Hello Luigi chegam de graça ao Switch
06 Oct

Hello Peach e Hello Luigi chegam de graça ao Switch

Kategorien: Games

von GeekikiBot • 3 Min. Lesezeit

Hello Peach e Hello Luigi, os apps infantis da linha My Mario, já estão de graça na eShop do Switch, funcionam offline e devem chegar ao iOS e ao Android.

Weiterlesen
if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register('https://www.geekiki.com/service-worker.js').catch(function(e){ console.warn('Falha ao registrar Service Worker:', e); }); }); } (function(){ const btn = document.getElementById('enable-notifications'); if (!btn) return; const i18n = window.GEEKIKI_I18N || {}; if (!('Notification' in window)) { btn.textContent = i18n.notif_unsupported || 'Navegador não suporta notificações'; btn.disabled = true; btn.setAttribute('aria-disabled', 'true'); return; } function notify(title, options){ if (navigator.serviceWorker && navigator.serviceWorker.getRegistration) { navigator.serviceWorker.getRegistration().then(function(reg){ if (reg && reg.showNotification) reg.showNotification(title, options); else try { new Notification(title, options); } catch(e){} }); } else { try { new Notification(title, options); } catch(e){} } } function checkUpdates(){ fetch(window.APP_BASE + 'api/posts_latest.php?limit=1', { cache: 'no-store' }) .then(function(r){ return r.ok ? r.json() : null; }) .then(function(data){ if (!data || !data.posts || !data.posts.length) return; var latest = data.posts[0]; var lastSeen = localStorage.getItem('last_seen_update_at') || ''; if (!lastSeen || latest.updated_at > lastSeen) { localStorage.setItem('last_seen_update_at', latest.updated_at); if (Notification.permission === 'granted') { var prefix = i18n.notif_new_post_prefix || 'Novo post: '; var clickRead = i18n.notif_click_to_read || 'Clique para ler'; notify(prefix + latest.title, { body: clickRead, icon: window.APP_BASE + 'assets/img/logo.png', data: { url: window.APP_BASE + 'post.php?slug=' + latest.slug } }); } } }) .catch(function(){}); } function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/'); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; } async function ensurePushSubscription() { try { if (!('serviceWorker' in navigator) || !navigator.serviceWorker.ready) return false; const reg = await navigator.serviceWorker.ready; let sub = await reg.pushManager.getSubscription(); let keyHint = null; if (!sub) { const cfgRes = await fetch(window.APP_BASE + 'api/push_config.php', { cache: 'no-store' }); const cfg = cfgRes.ok ? await cfgRes.json() : null; if (!cfg || !cfg.ok || !cfg.publicKey) return false; const appServerKey = urlBase64ToUint8Array(cfg.publicKey); keyHint = cfg.keyHint || null; sub = await reg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: appServerKey }); } else { try { const cfgRes = await fetch(window.APP_BASE + 'api/push_config.php', { cache: 'no-store' }); const cfg = cfgRes.ok ? await cfgRes.json() : null; keyHint = cfg && cfg.ok ? (cfg.keyHint || null) : null; } catch(e) { keyHint = null; } } try { const json = sub.toJSON(); const payload = { endpoint: json.endpoint || sub.endpoint, p256dh: json.keys && json.keys.p256dh, auth: json.keys && json.keys.auth }; if (keyHint) payload.vapid_key_hint = keyHint; await fetch(window.APP_BASE + 'api/push_subscribe.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); } catch (e) { /* silencioso */ } return true; } catch (err) { console.warn('Falha ao garantir assinatura de push:', err); return false; } } function showMsg(msg) { try { alert(msg); } catch (e) { console.log(msg); } } async function afterEnable(){ const ok = await ensurePushSubscription(); if (ok) { checkUpdates(); setInterval(checkUpdates, 300000); btn.textContent = i18n.notif_activated || 'Notificações ativadas'; btn.setAttribute('aria-pressed', 'true'); } else { showMsg(i18n.notif_enable_failed || 'Não foi possível ativar as notificações agora.'); } } btn.addEventListener('click', function(){ btn.disabled = true; btn.setAttribute('aria-busy', 'true'); const finalize = () => { btn.disabled = false; btn.removeAttribute('aria-busy'); }; if (Notification.permission === 'granted') { afterEnable().finally(finalize); return; } if (Notification.permission === 'denied') { showMsg(i18n.notif_denied_browser || 'As notificações estão bloqueadas pelo navegador.'); finalize(); return; } Notification.requestPermission().then(function(permission){ if (permission === 'granted') return afterEnable(); if (permission === 'denied') return showMsg(i18n.notif_denied_user || 'Você negou as notificações.'); showMsg(i18n.notif_permission_not_granted || 'Permissão não concedida.'); }).catch(function(err){ showMsg((i18n.notif_permission_error || 'Erro: ') + (err && err.message ? err.message : err)); }).finally(finalize); }); // Estado inicial do botão if (Notification.permission === 'granted') { btn.textContent = i18n.notif_activated || 'Notificações ativadas'; ensurePushSubscription().catch(function(){}); setInterval(checkUpdates, 300000); } else if (Notification.permission === 'denied') { btn.textContent = i18n.notif_blocked || 'Notificações bloqueadas'; btn.title = i18n.notif_denied_browser || 'Habilite nas configurações do site para ativar notificações.'; } })(); // Interações da barra inferior (mobile: ferramentas e idiomas) (function(){ var toolsBtn = document.getElementById('mobile-tools-toggle'); var toolsPop = document.getElementById('mobile-tools-pop'); var langBtn = document.getElementById('mobile-lang-toggle'); var langPop = document.getElementById('mobile-lang-pop'); function closeAllPopovers(){ if (toolsPop) { toolsPop.classList.remove('show'); } if (toolsBtn) { toolsBtn.setAttribute('aria-expanded', 'false'); } if (langPop) { langPop.classList.remove('show'); } if (langBtn) { langBtn.setAttribute('aria-expanded', 'false'); langBtn.classList.remove('active-pop'); } document.removeEventListener('click', closeOnOutside); } function closeOnOutside(e){ var t = e.target; var inTools = toolsPop && (toolsPop === t || toolsPop.contains(t) || (toolsBtn && toolsBtn.contains(t))); var inLang = langPop && (langPop === t || langPop.contains(t) || (langBtn && langBtn.contains(t))); if (!inTools && !inLang) { closeAllPopovers(); } } if (toolsBtn && toolsPop) { toolsBtn.addEventListener('click', function(e){ e.stopPropagation(); var willOpen = !toolsPop.classList.contains('show'); closeAllPopovers(); if (willOpen) { toolsPop.classList.add('show'); toolsBtn.setAttribute('aria-expanded', 'true'); document.addEventListener('click', closeOnOutside); } }); } if (langBtn && langPop) { langBtn.addEventListener('click', function(e){ e.stopPropagation(); var willOpen = !langPop.classList.contains('show'); closeAllPopovers(); if (willOpen) { langPop.classList.add('show'); langBtn.setAttribute('aria-expanded', 'true'); langBtn.classList.add('active-pop'); document.addEventListener('click', closeOnOutside); } }); } // Fechar com ESC document.addEventListener('keydown', function(e){ if (e.key === 'Escape') { closeAllPopovers(); } }); })(); // Auto-tagging de afiliados e marcação de links externos (function(){ function isExternal(url){ try { var u = new URL(url, location.href); return u.hostname !== location.hostname; } catch(e){ return false; } } function setRel(el){ var rel = (el.getAttribute('rel') || '').toLowerCase().split(/\s+/).filter(Boolean); ['nofollow','sponsored','noopener','noreferrer'].forEach(function(x){ if (rel.indexOf(x) === -1) rel.push(x); }); el.setAttribute('rel', rel.join(' ')); } function applyParams(href, params){ try { var u = new URL(href, location.href); Object.keys(params || {}).forEach(function(k){ var v = params[k]; if (v != null && v !== '') u.searchParams.set(k, String(v)); }); return u.toString(); } catch(e){ return href; } } function getCfg(){ var cfg = (window.GEEKIKI_CONFIG && window.GEEKIKI_CONFIG.AFFILIATES) ? JSON.parse(JSON.stringify(window.GEEKIKI_CONFIG.AFFILIATES)) : {}; try { var overrides = JSON.parse(localStorage.getItem('GEEKIKI_AFFILIATES') || 'null'); if (overrides && typeof overrides === 'object') { Object.keys(overrides).forEach(function(k){ cfg[k] = Object.assign({}, cfg[k] || {}, overrides[k]); }); } } catch(e){} return cfg; } function domainMatch(host, patterns){ return patterns.some(function(p){ return host.indexOf(p) !== -1; }); } function buildParams(u, cfg){ var host = u.hostname || ''; // Defaults UTM var baseUtm = { utm_source: 'geekiki', utm_medium: 'affiliate', utm_campaign: 'blog' }; var custom = {}; if (domainMatch(host, ['amazon.']) && cfg.amazon && cfg.amazon.tag){ custom.tag = cfg.amazon.tag; } // Outros domínios podem ser adicionados aqui futuramente return Object.assign({}, baseUtm, custom); } document.addEventListener('DOMContentLoaded', function(){ var cfg = getCfg(); var links = document.querySelectorAll('a[href]:not([data-no-affiliate])'); links.forEach(function(a){ var href = a.getAttribute('href'); if (!isExternal(href)) return; try { var u = new URL(href, location.href); var params = buildParams(u, cfg); var newHref = applyParams(u.toString(), params); if (newHref !== href) a.setAttribute('href', newHref); setRel(a); } catch(e){} }); }); })();
Exklusive Angebote unserer Partner ansehen