Dluhy v rámci Milostivého léta odpustí banky i úvěrovky. Co pro to musíte udělat?

22. 11. 2021
Doba čtení: 8 minut

Sdílet

Autor: Depositphotos
V současnosti probíhá tzv. Milostivé léto. Akce, během níž se lidi v exekuci mohou levně zbavit veřejnoprávních dluhů. Se stejnou nabídkou teď přichází i několik bank, úvěrové společnosti, stavební spořitelny a další zdravotní pojišťovna.

Milostivé léto dokáže osvobodit lidi s exekucí od podstatné části jejich dluhu. S návrhem přišel stát, vzápětí se se stejnou nabídkou ozvala i první banka a nebankovní společnost. Postupně se však začaly ozývat i další banky, další úvěrovka a další zdravotní pojišťovna.

Soukromé subjekty se samozřejmě přímo k akci odpouštění veřejnoprávních dluhů vyplývající z novely občanského soudního řádu připojit nemohou, ale přichází s vlastním konceptem, který více či méně kopíruje podmínky Milostivého léta.

Pravidla Milostivého léta pro veřejnoprávní dluhy a přesný postup pro dlužníky najdete v článku Začínají běžet tři měsíce, během kterých se někteří lidé mohou levně zbavit dluhů.

Akce, kterou vyhlásily soukromé subjekty, se obecně vztahuje na fyzické osoby s probíhající exekucí vymáhanou soudním exekutorem (ne osoby v oddlužení). Většinou jim stačí splatit původní výši dluhu plus uhradit poplatek pro exekutora 908 Kč za ukončení exekuce. Výjimky s odlišnými pravidly se ale najdou.

Air Bank a Home Credit

Jako první se trochu nenápadně přihlásila Air Bank spolu s úvěrovkou Home Credit, která patří do stejné finanční skupiny PPF. Air Bank nabídku sice veřejně nekomunikovala, ale svým klientům zaslala informaci, kterou pak veřejně sdílel na svém twitterovém účtu Daniel Hůle z organizace Člověk v tísni.

Air Bank vyhlásila svou akci pro období od 28. října 2021 do 28. ledna 2022. Aktivně jsme oslovili přibližně dva tisíce klientů s individuální nabídkou, která spočívá v tom, že klientům promineme část dluhu, který u nás mají. Konkrétně se jedná o všechny úroky po zesplatnění, náklady na soudní řízení i exekuci, řekla serveru Měšec.cz mluvčí banky Jana Pokorná a dodala, že podmínkou je, aby klienti do 28. 1. 2022 zaplatili alespoň původní část dluhu k okamžiku zesplatnění a k tomu jednorázovou částku 908 Kč na ukončení exekuce.

Individuální řešení klientům nabízíme dlouhodobě nejen během období, které kopíruje dobu trvání takzvaného Milostivého léta. Proto se na nás může obrátit i klient, kterého jsme přímo s touto nabídkou akce neoslovili, a společně se pokusíme najít individuální řešení i pro něj, dodala Pokorná.

Úvěrová společnost Home Credit ze stejné finanční skupiny nabízí podobnou akci, ale s výrazným omezením pro ty, kteří se snaží svou situaci řešit. Pokud od 28. října do 28. ledna 2022 klienti zaplatí jistinu dluhu a jednorázový poplatek 908 Kč jako náklad za exekutora, Home Credit podá návrh na zastavení exekuce. Klienti dostanou možnost uhradit původní výši dluhu ve třech splátkách.

Společnost Home Credit však na svém webu uvádí, že akce se bude týkat primárně klientů, kteří svůj dluh ještě nezačali splácet. Pokud se této věty bude držet, vyřadí ze hry paradoxně ty dlužníky v exekuci, kteří se snaží svůj dluh splácet. Další skupinou, kterou budeme individuálně posuzovat, jsou ti dlužníci, kteří se nacházejí v mimořádně tíživé životní situaci a mají snahu své dluhy aktivně řešit. V případě zájmu je nutné kontaktovat společnost Home Credit, uvedl mluvčí úvěrovky Michal Fila.

Česká kancelář pojistitelů

Úvahy nad tím, zda se do podobné akce zapojí, nám potvrdila také Česká kancelář pojistitelů: V současné chvíli tyto kroky také zvažujeme a analyzujeme možnosti, jak něco takového můžeme v rámci ČKP udělat, řekla nám mluvčí Veronika Nová.

Česká spořitelna a Buřinka

Ke kampani na odpouštění příslušenství dluhu se připojila také Česká spořitelna a Stavební spořitelna České spořitelny. Klienti s nesplaceným dluhem vymáhaným exekučně mohou uhradit původní dlužnou částku (nebo její zbývající část) a poplatek pro exekutora a banka jim zbytek dluhu odpustí.

Spořka nyní oslovuje přes 12 tis. klientů v exekuci pomocí SMS zpráv a spustila telefonní linku na čísle 956 777 385. Zde se klienti dozví výši své jistiny a účet, kam mají dlužnou částku a poplatek ve výši 907,50 Kč poukázat. Po zaplacení jistiny se pak již Spořitelna postará o veškerou komunikaci s exekutory a zajistí vymazání zbývajícího dluhu a ukončení exekuce klienta, vysvětlil Filip Hrubý, mluvčí České spořitelny, s tím, že usnesení o zastavení exekuce pošle klientovi přímo soudní exekutor do několika pracovních dnů.

Zájemci musí úhradu stihnout nejpozději do 28. února 2022. Mají tedy o měsíc delší termín než klienti ostatních subjektů.

Fio banka

Fio banka zatím zapojení do akce nepotvrdila, pro její klienty to ale vypadá nadějně: V současné chvíli přemýšlíme, že se do akce tohoto typu také zapojíme. Pokud se v nějaké podobě přidáme, určitě o tom budeme informovat včetně dalších podrobností, řekl nám mluvčí Jakub Heřmánek.

Komerční banka, Modrá pyramida a ESSOX

Další velkou bankou, která se zapojila, je Komerční banka i s dceřinou společností, úvěrovkou ESSOX, a stavební spořitelnou Modrá pyramida.

Dlužníci v exekuci mohou tyto jednotlivé společnosti do konce ledna 2022 požádat o možnost zaplatit jistinu úvěru. Po její úhradě a zaplacení poplatku 908 Kč nejpozději do konce února 2022 jim bude odpuštěno příslušenství dluhu a náklady spojené s nesplácením.

Žádost o využití této akce musí zákazníci jednotlivých společností zaslat na e-mail:

V tomto případě se mohou dluhů zbavit všechny fyzické osoby, tedy občané i podnikatelé. Akce se vztahuje na hypotéky, úvěry ze stavebního spoření, spotřebitelské úvěry, podnikatelské úvěry, kreditní karty a kontokorentní úvěry.

Jsme připraveni pomoci i klientům, kterým se nepodaří zajistit potřebné prostředky do stanoveného data, a individuálně se budeme jejich případům věnovat, uvedl mluvčí Komerční banky Pavel Zúbek s tím, že po zaslání žádosti na uvedený e-mail budou společnosti všechny klienty zpětně telefonicky kontaktovat a hledat řešení pro každý jednotlivý případ.

mBank

mBank zatím účast na podobné akci rozmýšlí: mBank zvažuje částečné zapojení se do akce Milostivého léta, avšak ne ve zcela totožném formátu, který je určen pro veřejnoprávní instituce. Momentálně připravujeme konkrétní podobu a pravidla pro naše klienty, uvedla pro server Měšec.cz mluvčí Kristýna Dolejšová.

Moneta Money Bank

Moneta Money Bank se do akce zapojila, nastavila ale přívětivější podmínky pro to, kdo se může zapojit a jak bude splácení probíhat.

Milostivé léto v jejím podání bude dostupné pouze pro klienty, kteří byli k 31. říjnu 2021 v prodlení se splácením nezajištěných dluhů více jak 90 dní. Pak jim banka odpustí sankční poplatky a penalizace.

Samotný generální pardon na tuto penalizaci banka udělí až v okamžiku doplacení jistiny a obchodního úroku. Banka s nimi nastaví novou splátkovou dohodu a na doplacení budou mít klienti až sedm let, což je mnohem více času než jinde. Pokud bude klient novou splátkovou dohodu řádně plnit, nebude banka během této doby účtovat žádný úrok ani penalizaci a penalizaci odpustí dlužníkům od počátku prodlení.

O zapojení do Milostivého léta musí klienti požádat banku online přes web banky, ale musí to stihnout do konce ledna 2022. Banka spustí podávání online žádostí 24. listopadu.

I Moneta vztáhne svou akci na občany i podnikatele – fyzické osoby a jejich úvěry. V obou případech však musí jít o úvěry nezajištěné. Nabídka se na rozdíl od ostatních subjektů nevztahuje na klienty v exekuci (ani v insolvenci, což ale platí všude).

Naším cílem je umožnit řešit své finanční problémy širšímu množství klientů, než jen těm v exekuci. Zastáváme názor, že ukončení exekuce jednorázovou úhradou dlužné jistiny je nabídka spíše vhodná pro dluhy za veřejnoprávními subjekty, kdy průměrná jistina je nižší, než samotná penále. Naopak u soukromých finančních institucí je to naopak. Ze zkušenosti víme, že reakce klientů banky na podobnou nabídku je malá, neb klienti ve finančních potížích nedisponují tak velkým finančním obnosem, aby mohli uhradit celou dlužnou jistinu najednou, vysvětlila pro Měšec.cz mluvčí Zuzana Filipová.

Klientům v exekuci banka od letoška opouští až 50 % dlužné částky. Konkrétní procento se řídí způsobem splacení dluhu. Např. při splacení do 1 roku bylo odpuštění 30 %.

Dodala také, že klientům v exekuci umožňuje Moneta požádat o posouzení jejich situace individuálně už od prvního kvartálu letošního roku.

I tito klienti, kteří projeví zájem o další řešení svých finančních závazků, mohou nicméně online žádost podat. Jsme připraveni jim nabídnout individuální pomoc, uvedl Tomáš Spurný, výkonný ředitel banky, a dodal, že pokud klienti předpokládají, že teprve budou mít problémy se splácením, nabízí jim banka možnost úpravy splátkového kalendáře.

RBP zdravotní pojišťovna

Podle zákona se má Milostivé léto vztahovat také na dluhy u zdravotní pojišťovny, VZP se ale zprvu zdráhala uznat penále jako součást odpouštěného příslušenství dluhu. Po čase ale stanovisko změnila.

K Milostivému létu se přidává také zdravotní pojišťovna RBP. I našim dlužníkům umožníme v termínu od 28. října 2021 do 28. ledna 2022 ukončit exekuční řízení pouhým zaplacením původní vymáhané částky a jednorázového poplatku exekutorovi ve výši 907,50 Kč vč. DPH. Ten pak následně ukončí samostatnou exekuci na penále, které jim bude odpuštěno a jednou pro vždy umazáno, uvedl výkonný ředitel RBP Antonín Klimša.

Podmínkou zdravotní pojišťovny je, aby dlužníci projevili zájem a snahu a věc řešili s příslušným exekutorem. Akce je určena pro ty, jejichž exekuce byla zahájena před spuštěním akce, tedy před 28. říjnem.

Když dva dělají totéž…

Veřejnoprávní Milostivé léto už probíhá od konce října. Exekutoři k němu přistupují různě. Daniel Hůle na svém twitterovém účtu upozornil například na exekutora Juraje Podkonického (vymáhá například pro ČEZ, Českou televizi, Dopravní podnik Praha či Home Credit), který má v rámci akce Milostivé léto navyšovat své náklady na dvojnásobek a tím zvyšovat konečné náklady, které spotřebitelé mají s ukončováním svých exekucí. Hůle spotřebitelům radí, aby mu nic neplatili a nejprve v této věci kontaktovali organizaci Člověk v tísni na e-mail [email protected].

bitcoin_smenarna

Soudní exekutor Kamil Košina naproti tomu na své náklady rozesílá dlužníkům informační dopisy i s vyčíslením původní dlužné částky a vyzývá je k využití Milostivého léta. Odpuštění části dluhu navíc dohodl i u vybraných komerčních společností, které využívají jeho služby.

Spotřebitelům pomáhá i zmíněná organizace Člověk v tísni, která kromě informační kampaně spustila také sbírku SOS Milostivé léto, jejíž výtěžek pomůže lidem, kteří mají šanci se v rámci Milostivého léta zbavit svých dluhů, ale nemají prostředky na úhradu jistiny. Organizace zároveň spustila webové stránky milostiveleto.cz, jejichž součástí je i Exekuční poradce, který lidem poradí, zda se na ně Milostivé léto vztahuje.

Autor článku

Autorka je zástupkyní šéfredaktora serveru Měšec.cz.

'; 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'; } }
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; 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 »