Zavřené pobočky a nefunkční bankovnictví. Co mohou dělat klienti Sberbank?

25. 2. 2022
Doba čtení: 8 minut

Sdílet

Pobočka Sberbank v Ostravě. (25. 2. 2022)
Autor: Dalibor Z. Chvátal
Pobočka Sberbank v Ostravě. (25. 2. 2022)
Aktualizováno 26. 2. 2022 23:25
Během pátku česká Sberbank uzavřela své pobočky a vypnula internetové a mobilní bankovnictví. Neustála run klientů na banku, kteří chtěli vybrat nebo převést peníze. Jakákoli agrese k jejím zaměstnancům ale nemá ve slušné společnosti prostor.

Lidé připravení vybrat si své peníze nebo zrušit účty ve Sberbank měli v pátek 25. 2. 2022 šanci jen během dopoledních hodin. Pod náporem klientů banka přestala zvládat požadavky. Ve 14 hodin předčasně zavřela své pobočky a zároveň vypnula i internetové a mobilní bankovnictví. Pobočky Sberbank začali poté hlídat policisté. Při mém neformálním rozhovoru s několika z nich mi dva potvrdili, že jsou na pobočkách spíše preventivně, protože potřebovali klienty z banky dostat ven a zaměstnanci již na to neměli sílu.

Nefunkční mobilní bankovnictví Sberbank. (25. 2. 2022)
Autor: Dalibor Z. Chvátal

Nefunkční mobilní bankovnictví Sberbank. (25. 2. 2022)

Bohužel se objevily bezpečnostní problémy na našich pobočkách. Naši zaměstnanci jsou převážně občané ČR a musíme jim zajistit zvýšenou bezpečnostní ochranu, protože čelí fyzickým atakům, uvedla mluvčí Radka Černá, což jen potvrdilo důvody přítomnosti českých policistů v bance. Jenže to některé lidi vyděsilo ještě více.

Nefunkční internetové bankovnictví Sberbank CZ (25. 2. 2022)
Autor: Ivana Bondareva Dubnová

Nefunkční internetové bankovnictví Sberbank CZ (25. 2. 2022)

Chovejte se k zaměstnancům banky slušně

Máte právo být naštvaní na Rusko a na Sberbank, která je prodlouženou rukou agresivního státu. Ale nezapomeňte, že v té bance pracují lidé, kteří velmi často bydlí i ve stejném městě, jako je pobočka té banky, a většinou jsou to Češi. Ale i kdyby měli jinou národnost, je to jedno a dělají práci, na kterou byli najati.

Nemohou nijak ovlivnit to, že Rusko napadlo Ukrajinu. Svůj odmítavý postoj můžete vyjádřit s grácii: slušně do banky vejdete a slušně požádáte o zrušení účtu. Není to těžké. Zaměstnanci Sberbank prožívají úplně to samé co ostatní lidé. Nenadávejme jim a neútočme na ně nijak – ani slovně, ani fyzicky, to je prostě špatně.

Platební karty s omezením do 10 000 Kč

Přestože některé bankomaty Sberbank byly již bez hotovosti (což by byl každý bankomat pod náporem klientů), platební karty Sberbank jsou plně funkční a lze je používat pro všechny typy transakcí s jedinou výjimkou: banka pro ně plošně změnila limit na 10 000 Kč denně, a to pro soukromé i firemní klienty.

Bankomat a vkladovat Sberbank ve Frýdku-Místku v obchodním centru Frýda. (25. 2. 2022)
Autor: Dalibor Z. Chvátal

Bankomat a vkladomat Sberbank ve Frýdku-Místku v obchodním centru Frýda. (25. 2. 2022)

Vklad hotovosti v bankomatu Sberbank proběhl úspěčně. (25. 2. 2022)
Autor: Dalibor Z. Chvátal

Vklad hotovosti v bankomatu Sberbank proběhl úspěšně. (25. 2. 2022)

To jsem osobně vyzkoušel, s kartou lze platit, vybírat hotovost i vkládat do vkladomatů Sberbank. O výsledku transakce se dozvíte jen z bankomatu, protože přímé bankovnictví stále nefunguje, zůstatek na stvrzence však ukazuje správnou částku.

Sberbank od 25. 2. 2022 plošně snížila limity pro platební karty.
Autor: Dalibor Z. Chvátal

Sberbank od 25. 2. 2022 plošně snížila limity pro platební karty.

Aktualizováno 26. 2. 2022, 14:00. Platební karty už nefungují

Během soboty 26. 2. 2022 platební karty Sberbank přestaly fungugovat a jsou zablokované. Banka o tom opět krátce informovala na svém webu:

26. 2. 2022

Sberbank CZ, která patří do skupiny Sberbank Europe, je českou bankou, obsluhující české klienty a regulovanou Českou národní bankou. Díky zhoršující se situaci byla Sberbank CZ nucena své pobočky z bezpečnostních důvodů uzavřít a rovněž dočasně zastavit veškeré karetní transakce. Internetové bankovnictví je již částečně obnoveno. Omlouváme se Vám za tyto komplikace a děkujeme Vám za pochopení.

Při platbě kartou se obchodníhovi zobrazuje chybový kód RC:056, což v definici znamená toto:

Vydavatel karty zákazníka transakci odmítl, protože číslo karty neexistuje. Zákazník by měl použít jinou kartu.

V překladu to znamená, že Sberbank své karty úplně zrušila.

V té souvislosti informovala o částečné obnově internetového bankovnictví, ale to stále nefunguje.

Internetové bankovnictví zůstane vypnuté

Internetové a mobilní bankovnictví nejprve nefungovalo z důvodu přetížených serverů banky, ale následně už zůstává vypnuté na základě rozhodnutí banky. „Zastavujeme služby internetového bankovnictví od 25. 2. 2022“, uvádí banka v písemném oznámení na svých pobočkách.

Banka je zdravá, o peníze se nebojte

Sberbank je zdravou bankou s dobrou likviditou. Kromě toho, že své peníze máte pojištěné do výše 100 000 € (2 471 619 Kč k 25. 2. 2022), banka má dostatek hotovosti. Nicméně každá, opakuji každá banka bude mít velký problém, když na ni naběhnou všichni klienti a v jednom okamžiku začnou vybírat peníze v hotovosti nebo je převádět.

Zaprvé, pokladny banky nemají nekonečnou zásobu peněz, takže jednoduše v nich peníze dojdou a musejí se přivézt další. Na run klientů není žádná banka připravena.

Zadruhé, masivní převody směrem z banky ven, kdy do banky naopak tolik peněz nepřichází, opět naruší cash-flow banky, kterému pak banka musí čelit. Banka se poté začne bránit rychle ubývající likviditě a jedním z řešení je vypnout možnost zadávat platby, tedy zrušit online přístupy do banky.

Pokud chcete u Sberbank zůstat, je to vaše volba. Pokud se chcete připojit k dalším klientům, kteří z banky na protest proti ruským okupantům odcházejí, ukážeme si možnosti. Ne vždy je to tak snadné, jak to vypadá.

Zrušení běžného účtu

Pro soukromou osobu a malou OSVČ je zrušení běžného účtu otázkou jedné hodiny. Buď si vše zařídíte sami v internetovém bankovnictví (až bude fungovat) a následně jen dojdete na pobočku banky ukončit smlouvu (až se otevře), nebo můžete využít službu mobility klientů, kterou poskytují téměř všechny retailové banky.

Služba mobilita klientů v praxi znamená, že si v nové bance otevřete účet a dáte jí plnou moc uzavřít ten váš původní. Vše si už sama zařídí nová banka. Rychleji si to ale uděláte sami, mobilita klientů probíhá klasickou poštou. Za otevření účtu přes mobilitu klientů banky dávají i finanční bonusy, ale o tom jindy.

Pro větší podnikatele, firmy a organizace je zrušení účtu otázka min. měsíce. Kromě standardních změn platebních příkazů to znamená mj.

  • změnit disponenty,
  • zařídit nové platební karty,
  • nastavit nová práva,
  • změnit účty na hlavičkových papírech,
  • informovat obchodní partnery,
  • informovat úřední orgány,
  • informovat úřady vyplácející dotace,
  • nastavit nové exporty pro účetní programy
  • a další.

To není zrovna administrativně snadný proces a nikdo jej rád nepodstupuje. Komplikací pak můžou být i navázané rozčerpané úvěry, které nová banka nemusí přeúvěrovat za původních, třeba výhodných podmínek.

Vyjádření České národní banky


Česká národní banka situaci kolem Sberbank v důsledku napadení Ukrajiny Ruskem nejen monitoruje, ale především dohledově řeší. Pro tyto situace jsou nastaveny standardní postupy jak na straně dohlíženého subjektu, tak České národní banky s cílem minimalizovat dopady na klienty.

Spotřebitelské úvěry

Stávající spotřebitelský úvěr lze dnes velmi snadno refinancovat, a to i při zvyšujících se úrokových sazbách.

Pokud by ale nabídka konkurence byla pro vás značně nevýhodná, je rozumnější úvěr doplatit v termínu a až poté z banky odejít.

Firemní úvěry

S firemním úvěrem odejít ke konkurenci není snadné. Bude zásadně záležet na posouzení nové banky rizikovosti vašeho odvětví a může se naprosto běžně stát, že tak výhodné podmínky jako u stávající banky nedostanete a budete muset překousnout zůstat u ní. Nebo to holt budete mít dražší.

Hypotéky

Máte u Sberbank nevýhodnou úrokovou sazbu? Hypotéku refinancujte, každá konkurenční banka vám s ochotou pomůže.

Nejspíše máte ale u Sberbank dobrou úrokovou sazbu, protože hypotéky Sberbank uměla dobře. Pokud jste připraveni z důvodu vlastenectví této bance už nedat ani korunu, hypotéku refinancujte, jenže… stávající úrokové sazby atakují 5 % p.a. Pokud jste připraveni platit měsíčně o pár tisíc více, do toho. Ale lepší je zůstat u Sberbank, hypotéku s nízkou úrokovou sazbou už nikde neseženete. Až budete mít konec fixace, rozhodnete se podle aktuálních možností na trhu za předpokladu, že tu Sberbank ještě v tobě otočky fixace bude.

Investice

Prodávat v této době investice by téměř jistě znamenalo ztrátu. Pokud jste dobře zainvestovali, zůstaňte u Sberbank, a až to bude dávat smysl, můžete investice ukončit a přejít jinam.

Alternativně můžete ve Sberbank z principu investice odprodat, investiční účet uzavřít a odejít.

Spořicí účty

Spořicí účet můžete kdykoli zrušit a jít ke konkurenci. Nabídek na trhu je požehnaně.  (Srovnávač spořicích účtů)

Termínované vklady

Zrušit termínovaný vklad lze i předčasně, ale Sberbank si za to naúčtuje poplatek 2 % z předčasně vybírané částky, min. 1000 Kč. O úroky nepřijdete, spočítají se vám však přirozeně jen od začátku vkladu ke dni jeho zrušení. (Srovnávač termínovaných vkladů)

Sberbank prakticky končí

Krach Sberbank je velmi nepravděpodobný, poté by fungoval systém pojištění vkladů. Jednou z možností je, že Sberbank ukončí činnost, což může nastat dvěma způsoby.

  1. Sberbank bude prodána jiné bance se všemi klienty.
  2. Sberbank zcela ukončí činnost. Depozitní vklady by poté (i předčasně a bez sankcí) vyplatila na své náklady k datu, které bude sděleno. (Takto postupovala HSBC Bank, když končila v retailovém bankovnictví.) Úvěry a další závazky by Sberbank nejspíše prodala jinému věřiteli za stávajících smluvních podmínek (takto postupovala Citibank, když končila v retailovém bankovnictví.)

Vše by proběhlo hladce a bez komplikací, toto jsou standardní procesy.

bitcoin_smenarna

Pokud máte hypotéku nebo jiný závazek, neradujte se, že byste jej nemuseli splácet. Trval by dál, jen by peníze šly jinému věřiteli.

Že se blíží postupný konec Sberbank odhalují další společnosti, které s ní ukončují spolupráci v pro banku významně důležitých obchodních vztazích. Jednou z nich je česká společnost ABRA Software, která o odpojení Sberbank od jejich informačních systému informovala na svém webu. Výpověď smlouvy Sberbank už odeslala i další česká IT společnost Etnetera.

ABRA Software ukončuje spolupráci s některými firmami v souvislosti s napadením Ukrajiny

Praha, 25. února 2022 – V případě, že firmy přímo jsou, nebo mají majetkové a podobné vazby na fyzické a právnické osoby uvedené na sankčních seznamech Evropské komise, znemožní jim v co nejkratším čase profitovat z pokročilých softwarových technologií a využívat produkty společnosti. Jednou z těchto společností je Sberbank CZ.

Zároveň zdvořile prosí i jiné technologické firmy o následování.

Předseda představenstva Jaroslav Řasa k tomu sdělil: V České republice dobře víme, co to je žít 22 let s kremelským vojákem v zádech. Naše podnikání a mise podporovat podnikatele kdekoli na světě v tom, aby měnili svět k lepšímu, by v nesvobodném světě vůbec nebyla možná. Proto není důležité, jaké hospodářské ztráty můžeme utrpět, z těch se vždy vzpamatujeme. Ze ztráty hodnot a svobody nikoliv. Jak řekl náš prezident Václav Havel: Naděje není to přesvědčení, že něco dobře dopadne, ale jistota, že má něco smysl – bez ohledu na to, jak to dopadne.

Autor článku

Autor se věnuje publikační činnosti v oblasti osobních financí. Specializuje se na finanční produkty, spotřebitelská témata a osobní silniční dopravu.

'; 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 »