Neztraťte se v AI: Komplexní průvodce, jak používat umělou inteligenci v roce 2025 jako běžný uživatel

3. 4. 2025

Sdílet

AI jako pomocník při práci Autor: Cnews (s využitím GPT-4o Image Generator)
Jak používat AI v roce 2025 jako běžný uživatel?
Objevte, jak umělá inteligence v roce 2025 mění každodenní život. Zjistěte, jak snadno využívat AI nástroje pro zjednodušení práce a zvýšení kreativity.

Umělá inteligence je v roce 2025 běžnou součástí našich životů, a to nejen díky chytrým asistentům, nástrojům pro generování obrázků a hudby, ale i AI, která nám pomáhá plánovat stravu nebo zlepšit spánek.

Tento článek vám přiblíží nástroje AI dostupné pro každodenní uživatele – od univerzálních multimodálních nástrojů až po specializované aplikace pro tvorbu obsahu, produktivitu či zdraví. Vše přehledně a jednoduše, aby to zvládl pochopit jak odborník, tak i AI nepolíbený „Franta uživatel“.

Pro větší přehlednost je článek rozdělen do několika záložek, které se samostatně věnují multimodálním umělým inteligencím, inteligencím vhodným pro konkrétní činnosti, praktické AI užitečné při běžném denním životě a v neposlední řadě také důležité informace týkající se bezpečnosti při jejím používání.

Obsah:

  • Úvod
  • 1. Multimodální AI: Univerzální pomocník pro každý den
  • 2. AI na konkrétní úkoly: Specializované nástroje pro konkrétní činnost
  • 3. AI pro začátečníky: Které nástroje tedy skutečně potřebuji?
  • 4. Jak používat umělou inteligenci bezpečně a efektivně

Multimodální AI: Univerzální pomocník pro každý den

Multimodální AI je typ umělé inteligence, který zvládá zpracovávat a interpretovat různé typy dat – od textu a obrázků až po zvuk a kód. Díky své univerzálnosti se stává neocenitelným pomocníkem, který dokáže sloužit široké škále uživatelů při každodenních úkolech. Níže najdete nejvíce populárních multimodálních umělých inteligencí.

ChatGPT – nejpopulárnější a objektivně nejuniverzálnější AI

ChatGPT je pokročilý multimodální model, který umožňuje interakci ve více formátech. Dokáže pracovat s textem, generovat a upravovat kód, analyzovat obrázky a reagovat na hlasové vstupy. 

Hlavní předností je jeho flexibilita – uživatelé mohou například poslat fotografii a získat k ní textové vysvětlení nebo využít hlasové příkazy pro rychlou komunikaci. Tento model tak usnadňuje nejen každodenní úkoly, ale také kreativní projekty, kde jsou potřeba různé formy komunikace.

Rozhraní ChatGPT 

Autor: Depositphotos

I přes své silné stránky má ChatGPT také některé možné nedostatky. Vyžaduje vysoký výpočetní výkon a občas se může potýkat s přesností při složitějších úlohách. Nicméně, díky neustálému vývoji a optimalizacím se stává stále spolehlivějším a přístupnějším nástrojem, který je vhodný jak pro profesionály, tak pro běžné uživatele.

Gemini – integrace s Google službami, tvorba multimédií

Gemini od Google představuje další skvělý příklad multimodální AI, která se výrazně integruje s Google službami. Tento model umožňuje snadné propojení s populárními aplikacemi, což uživatelům usnadňuje využití AI napříč různými činnostmi – od vyhledávání informací po tvorbu multimediálního obsahu. Díky své schopnosti pracovat s různými formáty dat poskytuje komplexní řešení, které zvyšuje efektivitu a produktivitu práce.

Mezi hlavní přednosti Gemini patří intuitivní uživatelské rozhraní a vysoká kompatibilita s dalším softwarem v Google ekosystému. Na druhou stranu může mít omezenou specializaci při řešení specifických úkolů, které vyžadují hlubší zaměření. I přes toto omezení se Gemini řadí mezi vysoce efektivní nástroje, které umožňují široké spektrum využití pro běžné i profesionální uživatele.

Imagen 3 je nyní dostupný všem

Imagen 3 je nyní dostupný všem

Autor: Cnews

Copilot – pomocník od Microsoftu pro práci napříč kancelářskými nástroji

Copilot, vyvinutý Microsoftem ve spolupráci s OpenAI (ChatGPT), je inteligentní asistent navržený především pro zvýšení produktivity v programech Office. Tento model se integruje přímo s kancelářskými nástroji Office a dalšími aplikacemi, což umožňuje uživatelům snadno získávat potřebné informace a efektivně pracovat s daty napříč soubory, s kterými pracují.

Mezi hlavní přednosti Copilota patří jeho vysoká efektivita a adaptabilita na specifické pracovní potřeby. Naopak, některé úlohy mohou odhalit omezenou flexibilitu tohoto modelu, zejména pokud jde o velmi specializované požadavky.

Seznam předběhl Google. Nabízí u nás praktickou sumarizaci vyhledávání, a to rovnou v češtině Přečtěte si také:

Seznam předběhl Google. Nabízí u nás praktickou sumarizaci vyhledávání, a to rovnou v češtině

AI na konkrétní úkoly: Specializované nástroje pro konkrétní činnost

Umělá inteligence dnes zvládá nejen obecné úkoly, ale existuje i celá řada specializovaných nástrojů, které se zaměřují na konkrétní činnosti. Od psaní a tvorby grafiky po organizaci práce nebo péči o zdraví – AI může být užitečným pomocníkem ve všech těchto oblastech. V této sekci si představíme nejzajímavější nástroje, které běžnému uživateli usnadní život a práci.

Text a psaní

Umělá inteligence výrazně zjednodušuje proces psaní a úpravy textů. Grammarly je jedním z nejoblíbenějších nástrojů, který opravuje gramatické chyby, stylistiku i tón textu v angličtině. Pomáhá nejen s překlepy, ale také navrhuje profesionálnější formulace například pro pracovní e-maily. 

Pro ty, kteří píší v jiných jazycích, je skvělý DeepL Write, který podporuje více jazyků, včetně češtiny. Tento nástroj dokáže vylepšit stylistiku, navrhnout přirozenější formulace a pomoci s překlady. Pokud se zaměřujete na marketingové texty, články nebo příspěvky na sociální sítě, Jasper AI je ideální volbou. Umí generovat obsah rychle a kreativně, přičemž nabízí strukturované návrhy, které šetří čas.

Obrázky a grafika

V oblasti vizuální tvorby jsou AI nástroje neocenitelným pomocníkem zejména díky možnosti generování téměř jakéhokoliv obrázku na základě vašeho zadání. V této oblasti je velmi oblíbený nástroj Midjourney nebo DALL-E od OpenAI, kterého však co do kvality předčí GPT-4o Image Generator od stejnojmenné společnosti.

GPT-4o image generator

Ukázka GPT-4o Image Generator od OpenAI

Autor: OpenAI

Pro ty, kteří potřebují rychle vytvořit profesionálně vypadající grafiku, je ideální například Canva AI

Video a hudba

Tvorba videí a hudby je díky AI přístupná i těm, kteří nemají profesionální zkušenosti. Runway ML je nástroj, který usnadňuje editaci videí, například odstranění pozadí bez green screenu, animaci statických obrázků nebo dokonce generování celých videosekvencí podle zadání. Jeho jednoduché ovládání z něj dělá skvělou volbu i pro začátečníky. 

V oblasti hudby je zajímavým nástrojem Udio nebo Suno AI, které generují skladby na základě zadaného stylu a nálady. Stačí zadat popis, například „relaxační hudba na pozadí“, a během chvíle získáte originální skladbu. Tento nástroj je ideální pro tvůrce obsahu, kteří potřebují vlastní hudbu do videí, podcastů nebo her.

Produktivita a organizace

AI nástroje mohou výrazně zlepšit organizaci práce a zvýšit produktivitu. Notion AI je chytrý asistent, který pomáhá s automatickým shrnováním dlouhých textů, generováním nápadů a organizací úkolů. Umožňuje například vytvořit přehledné seznamy klíčových bodů z rozsáhlých dokumentů nebo doporučit, jak lépe strukturovat poznámky.

Dalším užitečným nástrojem je Rewind AI, který funguje jako osobní paměť. Zaznamenává vše, co na počítači děláte, a umožňuje se k těmto informacím kdykoli vrátit. Pokud si například nemůžete vzpomenout na článek, který jste četli před týdnem, Rewind vám ho rychle najde. Tyto nástroje ocení studenti, profesionálové i kdokoli, kdo pracuje s velkým množstvím informací.

Poprask okolo DeepSeek pokračuje. Generuje obrázky, krade data OpenAI a podle NÚKIBu je kybernetickou hrozbou Přečtěte si také:

Poprask okolo DeepSeek pokračuje. Generuje obrázky, krade data OpenAI a podle NÚKIBu je kybernetickou hrozbou

Zdraví a životní styl

AI může být užitečná i v oblasti zdraví a péče o životní styl. MyFitnessPal AI je oblíbený nástroj pro sledování stravy a kalorií. Díky umělé inteligenci dokáže analyzovat vaše stravovací návyky, navrhovat personalizované jídelní plány a doporučovat zdravější alternativy potravin. Stačí zadat své cíle, například hubnutí nebo nabírání svalové hmoty, a aplikace vám pomůže s plánováním jídelníčku.

Jak často využíváte jakoukoliv z forem umělé inteligence?

Sleep AI se zaměřuje na analýzu spánkových vzorců. Pomocí dat z chytrých hodinek nebo telefonu dokáže identifikovat problémy se spánkem a doporučit zlepšení. Tyto nástroje jsou ideální pro každého, kdo chce zlepšit své zdraví a životní styl bez složitých procesů.

Všechna doporučení od umělé inteligence však berte v rozumné míře. Samotná AI může být užitečná, není ovšem bezchybná a nikdy neporozumí vašemu tělu tak dobře, jako vy sami. Pokud si nejste něčím jisti, vždy si raději vyžádejte pomoc od odborného lékaře.

AI pro začátečníky: Které nástroje tedy skutečně potřebuji?

Umělá inteligence nabízí nepřeberné množství nástrojů. Pro běžného uživatele nemusí být snadné se v nich vyznat. Pokud s AI teprve začínáte, není nutné hned zvládat složité modely nebo testovat desítky různých aplikací. Stačí vám jen několik základních nástrojů, které vám zjednoduší každodenní úkoly – ať už jde o psaní, organizaci práce, tvorbu obrázků nebo lepší správu času.

Níže najdete přehled nejdostupnějších a nejjednodušších AI nástrojů, které může začít používat úplně každý.

ChatGPT jako univerzální asistent pro každého

Pokud si chcete vyzkoušet AI bez složitých nastavení, ChatGPT je ideální volbou. Funguje jako virtuální asistent, kterému můžete klást otázky, nechat si poradit s textem, získat shrnutí dlouhých článků nebo třeba naplánovat výlet.

Jak vám ChatGPT pomůže?

  • Odpoví na (téměř) jakoukoliv otázku a vysvětlí složité věci jednoduše

  • Pomůže s e-maily, psaním textů nebo úpravou stylu

  • Dokáže generovat recepty, cestovní itineráře nebo seznamy úkolů

Proč je vhodný pro začátečníky?

  • Není třeba instalace, jelikož funguje přímo v prohlížeči

  • Jednoduché ovládání. Stačí napsat otázku jako do chatu

Grammarly pro kontrolu pravopisu a stylu psaní

Psaní e-mailů, zpráv nebo pracovních dokumentů může být stresující, zvlášť pokud si nejste jistí gramatikou. Grammarly vám pomůže s opravou chyb, zlepšením stylistiky a jasností textu – a to vše automaticky při psaní.

Jak vám Grammarly pomůže?

  • Opraví gramatiku a překlepy v angličtině

  • Navrhne lepší formulace podle tónu zprávy (formální, přátelský apod.)

  • Funguje v prohlížeči i jako doplněk do Wordu a Gmailu

Proč je vhodný pro začátečníky?

  • Automatická kontrola při psaní – nemusíte nic nastavovat

  • Snadná instalace – přidáte si ho jako rozšíření do prohlížeče

Canva AI jako pomocník při rychlé tvorbě grafiky

Nemusíte být grafik, abyste vytvořili hezkou prezentaci, příspěvek na sociální sítě nebo pozvánku na oslavu. Canva AI vám pomůže s návrhem, barvami i texty.

Jak vám Canva AI pomůže?

  • Automaticky navrhne rozvržení a barvy podle obsahu

  • Umí generovat obrázky podle popisu

  • Usnadní tvorbu prezentací, letáků nebo příspěvků na sociální sítě

Proč je vhodná pro začátečníky?

  • Jednoduché rozhraní – stačí si vybrat šablonu a upravit text

  • Bez nutnosti grafických znalostí – AI dělá většinu práce za vás

Canva AI

Canva AI

Autor: Cnews (Dominik Dobrozenský)

Notion AI jako váš chytrý organizátor poznámek

Pokud si rádi děláte poznámky, ale pak se v nich nevyznáte, Notion AI vám pomůže s automatickým tříděním, shrnováním a vyhledáváním informací.

Jak vám Notion AI pomůže?

  • Automaticky shrne dlouhé texty a vytáhne hlavní body

  • Doporučí, jak poznámky uspořádat pro lepší přehlednost

  • Pomůže se seznamy úkolů a plánováním projektů

Proč je vhodný pro začátečníky?

  • Uživatelsky přívětivý – vypadá jako běžný poznámkový blok

  • Pomáhá lidem, kteří pracují s velkým množstvím informací

MyFitnessPal AI pro jednoduché sledování jídelníčku

Zdravý životní styl bývá náročný na plánování, ale MyFitnessPal AI vám usnadní kontrolu nad tím, co jíte. Stačí naskenovat čárový kód potraviny nebo zapsat jídlo a AI spočítá kalorický příjem a doporučí vylepšení.

Jak vám MyFitnessPal AI pomůže?

  • Automaticky počítá kalorie a nutriční hodnoty

  • Doporučí zdravější alternativy potravin

  • Analyzuje váš jídelníček a navrhne úpravy podle vašich cílů

Proč je vhodný pro začátečníky?

  • Jednoduché zadávání – většina potravin je v databázi

  • Skvělý pro každého, kdo chce zdravější stravování bez složitého počítání

Jak používat umělou inteligenci bezpečně a efektivně

Umělá inteligence může být skvělým pomocníkem, ale zároveň je důležité vědět, jak ji používat zodpovědně a bezpečně. Přestože většina AI nástrojů nabízí uživatelsky přívětivé prostředí, stále existují určitá rizika, na která je dobré myslet.

V této sekci se podíváme na hlavní bezpečnostní zásady, etické otázky spojené s AI a tipy, jak z ní získat co nejvíce.

Soukromí a ochrana osobních údajů

Mnoho AI nástrojů sbírá data o uživatelích, což může být problém, pokud jde o citlivé informace. Před použitím AI si vždy ověřte:

  • Jaká data aplikace ukládá a zda je sdílí s třetími stranami

  • Zda je možné historii konverzací smazat – například u ChatGPT můžete deaktivovat ukládání historie

  • Zda je nástroj zabezpečený – vyhněte se zadávání osobních údajů do neověřených aplikací

Pokud používáte AI v práci, zkontrolujte firemní pravidla ohledně používání těchto nástrojů. Některé společnosti zakazují vkládat do AI citlivé informace, jako jsou interní dokumenty nebo data o klientech.

Co vše stačí podvodníkům, aby ukradli vaši identitu? Tři sekundy vašeho hlasu Přečtěte si také:

Co vše stačí podvodníkům, aby ukradli vaši identitu? Tři sekundy vašeho hlasu

Etické otázky a zkreslení AI

AI modely se učí z obrovského množství dat, která mohou obsahovat zkreslení nebo nepravdivé informace. To může vést k situacím, kdy AI:

  • Poskytuje nepřesné nebo zavádějící odpovědi

  • Upřednostňuje určité názory nebo stereotypy

  • Není schopna rozpoznat kontext a nuance lidské komunikace

Důležité je vždy si informace ověřovat, zejména pokud jde o zprávy, historická fakta nebo lékařské rady. AI je skvělým nástrojem pro inspiraci a zjednodušení práce, ale nenahrazuje odborníky ani kritické myšlení.

Závislost na AI a ztráta dovedností

Umělá inteligence může ušetřit čas, ale neměli bychom se na ni spoléhat úplně ve všem. Pokud AI například za vás přepisuje texty nebo odpovídá na e-maily, může se stát, že časem ztratíte schopnost formulovat vlastní myšlenky jasně a strukturovaně.

Doporučení je jednoduché – AI používejte jako pomocníka, ne jako náhradu vlastního myšlení.

Nespoléhejte se jen na umělou inteligenci. Vždy používejte vlastní hlavu a selský rozum.

Autor: Cnews (s využitím DALL-E)

Ptejte se správně a zkuste více variant

AI odpovídá na základě toho, jak se ptáte. Pokud vám odpověď nevyhovuje, zkuste přeformulovat otázku nebo být konkrétnější. Například místo „Jak napsat dobrý e-mail?“ zkuste „Jak napsat formální e-mail s žádostí o schůzku?“

Můžete také zkusit zadat stejnou otázku do více AI nástrojů a porovnat odpovědi. Každá AI má totiž trochu jiný přístup k informacím.

Nezapomínejte ověřovat informace

I když AI dokáže odpovědět na širokou škálu otázek, není neomylná. Před použitím informací z AI pro důležité rozhodnutí (např. finanční rady, zdravotní informace) si je vždy ověřte z důvěryhodných zdrojů.

Kombinujte AI s vlastním myšlením

Nechte AI, aby vám pomohla s inspirací, nápady nebo základním návrhem textu, ale vždy si výsledek upravte podle sebe. To platí zejména u kreativních textů, pracovních dokumentů nebo důležitých e-mailů.

Umělá inteligence je výkonný nástroj, který může usnadnit každodenní život, pokud s ní pracujete správně. Důležité je používat AI bezpečně, kriticky vyhodnocovat informace a chránit své soukromí.

Pokud AI využijete rozumně, může vám pomoci zrychlit práci, rozšířit obzory a ušetřit čas, aniž byste ztratili kontrolu nad svými dovednostmi nebo daty.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »