IMA for HTML5 3.331.1 preloading and vpaid broken -> please roll back

645 views
Skip to first unread message

Timothy Ace

unread,
Sep 16, 2019, 6:08:18 PM9/16/19
to Interactive Media Ads SDK
With the 3.331.1 version released today, preloading VAST tags containing VPAID JS files is broken.

With enablePreloading set to true, calling AdsManager.init() in 3.331.1 makes calls to load VAST documents, but if the VAST document contains only a VPAID JS media file, IMA now will not:
  1. generate a new friendly frame
  2. load the VPAID JS file
  3. call VPAID's initAd
  4. trigger a google.ima.AdEvent.Type.LOADED event when the VPAID ad reports an AdLoaded event
Instead these actions are now all being performed after AdsManager.start() is called.

Although eliminating the preloading of the VPAID file reduces efficiency, that's not what the problem is. The problem is the lack of a google.ima.AdEvent.Type.LOADED event.

Non-VPAID VAST tag containing video files behave differently. Calling AdsManager.init() with a non-VPAID VAST tag correctly triggers a google.ima.AdEvent.Type.LOADED event.

Disabling preloading entirely and calling AdsManager.start() immediately after AdsManager.init() is currently the only workaround.

IMA SDK

unread,
Sep 16, 2019, 10:41:48 PM9/16/19
to ta...@synacor.com, ima...@googlegroups.com

Hi Timothy,

Thank you for reaching out to us and for sharing this information.
Would you be able to replicate the issue with our IMA SDK for HTML5 advanced sample? Let me know if you will encounter the same behavior.

Also, could you share the Ad tag that you are using to help us check the issue on our end as well? You can use "Reply Privately to Author" to share the Ad tag privately.


Regards,
Sherwin Diesta
IMA SDK Team



ref:_00D1U1174p._5001UHGzYx:ref

Timothy Ace

unread,
Sep 17, 2019, 12:01:10 AM9/17/19
to Interactive Media Ads SDK
These test pages were created using the "simple" sample. Not much is different except AdManager.start() is called by the google.ima.AdEvent.Type.LOADED handler instead of being called immediately after AdManager.init(). Additionally, I've added a console.log message of "LOADED event!" that occurs when the google.ima.AdEvent.Type.LOADED handler runs.

I have two sets of files below.

The "_mp4" versions call a tag that returns VAST with video files -- no VPAID. The tag is:
The "_vpaid" versions call VAST tags that load a VPAID JS wrapper that loads the same ad tag as in the "_mp4" versions. The tag for this is:
Each loads the corresponding IMA version listed in the URL.

These function properly:
This one does not function:
The issue with the last one is two-fold:
  1. The AdManager.init() call loads the ad tag, but does not generate a friendly iframe or load the VPAID JS file.
  2. The AdManager.init() call never triggers a google.ima.AdEvent.Type.LOADED event.

Please treat this bug with the highest priority and issue a full rollback to 3.330.0. A lot of money and time was lost today because of this. I'm sure there are other organizations who have not been able to develop and deploy a workaround as fast as we have.

If you would like assistance in testing future versions of IMA before they are released, please reach out. We represent ~150m IMA loads per day across ~14k+ sites.

Vincent van Laar

unread,
Sep 17, 2019, 4:41:12 AM9/17/19
to Interactive Media Ads SDK
We're also experiencing this issue and losing a lot of ad impressions. If a quick rollback is possible that would be great!

Yohan Boutin

unread,
Sep 17, 2019, 4:54:13 AM9/17/19
to Interactive Media Ads SDK
Same issue here.

The LOADED event is not trigger on VPAID, video are working correctly


On Tuesday, 17 September 2019 00:08:18 UTC+2, Timothy Ace wrote:

IMA SDK

unread,
Sep 17, 2019, 6:22:03 AM9/17/19
to ta...@synacor.com, ima...@googlegroups.com

Hi Timothy,

Thank you for your response and for sharing this information.

I have tried to copy your implementation with our IMA SDK advance sample, by moving the AdManager.start() in the google.ima.AdEvent.Type.LOADED handler with the ad tags you have shared and below are the results.

  • First ad tag (no vpaid js) - Working fine.
  • Second ad tag (with vpaid js) - Throws an error message: Ad error: AdError 402: VAST media file loading reached a timeout of 8 seconds.
With this, you can check out this Ad Manager documentation for possible causes and recommended actions with regard to this error.

However, please enlighten me, on why you need to move the AdsManager.start() in the AdEvent LOADED? Our Preloading documentation doesn't specify this approach. Also, could you confirm if the ad tag (with vpaid js) requires a friendly iframe? I was able to load the ad successfully by updating the ImaSdkSettings.VpaidMode to "ENABLE".

Please also note that I wasn't able to replicate the issue with our out of the box IMA SDK advance sample.

Let me know if you have questions and clarifications and I'll be glad to assist you.




Regards,
Sherwin Diesta
IMA SDK Team



ref:_00D1U1174p._5001UHGzYx:ref

Yohan Boutin

unread,
Sep 17, 2019, 7:17:40 AM9/17/19
to Interactive Media Ads SDK
Hi IMA Team

here's a test page to reproduce the behavior change between 3.330.0 and 3.331.0

the issue is that calling AdsManager.init() on a VPAID creative doesn't trigger the LOADED event. So if you wait for LOADED to call start, it never work.
this is a major outage, because you cannot preload the creative, and start it when loaded at the wanted time (for example wait for the creative to be in view before call start).

Please keep us posted

Cédric Ambrugeat

unread,
Sep 17, 2019, 9:58:01 AM9/17/19
to Interactive Media Ads SDK

+1 we have the same issue please rollback 

Timothy Ace

unread,
Sep 17, 2019, 10:35:54 AM9/17/19
to Interactive Media Ads SDK
Sherwin,

The issue is not with the VPAID tag I provided. I do not need to diagnose a errors with it. This issue is with IMA. If you are having issues with the VPAID tag I provided. Surely you have other VPAID tags that you use for testing IMA releases which you can utilize.

Regarding why we call AdsManager.start() after a LOADED event:

Calling AdManager.start() immediately after AdManager.init() (as the advance sample does) is not preloading. That is loading and playing immediately. If you consult your IMA documentation about preloading: https://developers.google.com/interactive-media-ads/docs/sdks/html5/preload:

Screen Shot 2019-09-17 at 10.32.13 AM.png


AdManager.init() is called with preloading on to pre-load the ad. AdManager.start() is where the loading occurs when preloading is off.

Additionally, that documentation states:
VPAID will be preloaded, but none of the ad's dependencies, including media played by that ad are loaded until the ad is executed.
This statement is now false with 3.331.1. There is no network request being made for the VPAID JS file (which IS the VPAID and is not a dependency media file) during the AdsManager.init() call used for preloading.

However, asking why we're calling AdsManager.start() in the AdEvent LOADED is the wrong question. The proper question you should be asking is: Why is no "LOADED" event returned at all for VPAID creatives anymore?

As has already been stated:
  • Starting in 3.331.1, AdsManager.init() returns a LOADED event for a video VAST, but does not for a VPAID VAST. This is an inconsistency.
  • In 3.330.0, AdsManager.init() returns a LOADED event for BOTH a video VAST and a VPAID VAST. In is consistent.
When an ad tag is called, the caller does not know if the tag will return a video VAST or a VPAID VAST, so an inconsistency in behavior makes this impossible to code for.

Regarding ImaSdkSettings.VpaidMode of "ENABLE":

Our implementation MUST use a friendly frame because our player, itself is already located inside a SafeFrame. As per the SafeFrame specification, you cannot nest a SafeFrame inside another SafeFrame. To do so prevents the ad servers from being able to detect the current page domain in browsers that do not have ancestorOrigins support (which is still a large share of browsers). Even so, IMA provides support for "INSECURE". If IMA is providing something that doesn't work, it's broken.

You now have multiple people confirming this as a bug along with an additional test page provided by Yohan Boutin. Can you please give a timeline for when this will be rolled back?

IMA SDK

unread,
Sep 17, 2019, 11:08:33 AM9/17/19
to ta...@synacor.com, ima...@googlegroups.com
Hello Timothy,

Thank you for reaching out to us about the issue with 3.331.1

We have had some complications with rolling back this release.  This has been escalated to our engineering team and they are currently working to resolve the issue and anticipate the fix being finished before the end of day.

Thanks for your patients, and please let me know if you have any questions.

Thank you,
Jackson
IMA SDK DevRel

ref:_00D1U1174p._5001UHGzYx:ref

Yohan Boutin

unread,
Sep 17, 2019, 11:08:56 AM9/17/19
to Timothy Ace, Interactive Media Ads SDK
Hey Timothy

Did you have a look at the test page i provide. You can also test it with your VPAID if you want.
The bug is when you call adsManager.init() and wait for LOADED event to call start.

Also, still waiting for google to fix the behavior, because sure it's a major bug

--
You received this message because you are subscribed to the Google Groups "Interactive Media Ads SDK" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ima-sdk+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ima-sdk/94d81b3a-2601-491f-b965-a06dece318c1%40googlegroups.com.


--
Yohan Boutin Video Product Owner

Timothy Ace

unread,
Sep 17, 2019, 11:13:34 AM9/17/19
to Interactive Media Ads SDK
Yeah, it's pretty slick.
To unsubscribe from this group and stop receiving emails from it, send an email to ima...@googlegroups.com.

Timothy Ace

unread,
Sep 17, 2019, 11:14:02 AM9/17/19
to Interactive Media Ads SDK
Thank you for the update.

IMA SDK

unread,
Sep 17, 2019, 6:37:37 PM9/17/19
to ta...@synacor.com, ima...@googlegroups.com
Hi Timothy,

I wanted to update you on our progress on this issue.

The scope of the issue was larger than expected and had to involve more engineers than we originally thought. Despite that, a fix has been made and we are in the process of testing the changes. Because of that these changes will not be live until tomorrow.

Again, thank you for waiting on this update.

IMA SDK

unread,
Sep 18, 2019, 10:31:30 AM9/18/19
to ta...@synacor.com, ima...@googlegroups.com
Hi Timothy,

Following up about the vpaid preloading issue. The fix for this bug has been made and is added in our newest release of the SDK, v3.332.1

You should find that the issue has been resolved, but please let me know if any problems persist.

Timothy Ace

unread,
Sep 18, 2019, 11:53:17 AM9/18/19
to Interactive Media Ads SDK
Thank you for following up. I do see that the LOADED event is now being fired from calling AdsManager.init().

However, IMA is no longer preloading VPAID creatives anymore, which is definitely a feature change from 3.330.0 -- and one that seems to be regressing the functionality of IMA.

It's also something that should have been mentioned in the release notes instead of "Service release; no new features."

As was stated, in 3.330.0 and before, calling AdsManager.init() would load the VPAID JS file and call initAd() on the VPAID object. The LOADED event was then returned by the AdsManager after the VPAID code returned an appropriate AdLoaded VPAID event upon completion of loading it's assets. A subsequent call to AdsManager.start() would then pass a VPAID startAd() call to the VPAID creative beginning playback immediately. This was the proper way to preload a VPAID creative.

Also, the current documentation for preloading is now incorrect (https://developers.google.com/interactive-media-ads/docs/sdks/html5/preload). It says:

VPAID will be preloaded, but none of the ad's dependencies, including media played by that ad are loaded until the ad is executed.

However, the VPAID is not being preloaded at all now. The VPAID JS file isn't even requested. The documentation could be *somewhat* true if the code at least did only that and didn't call the VPAID's handshakeVersion and initAd.

The loading of the VPAID and calling the VPAID's initAd has a specific purpose in the industry. The majority of VPAID creatives are actually wrappers for ad exchanges that first load code in the VPAID's initAd call to evaluate the current page URL and other metrics. Afterward it sends these gathered metrics in a request to their backend ad server to run an auction and fetch an ad. This backend request may either return a creative or may return a no-bid condition. Upon receiving a response with a creative, the VPAID wrapper calls the AdLoaded handler the caller (IMA) registered so it can know an ad was loaded and is ready to play when startAd is called. However, if a no-bid response was received, the VPAID calls the AdError handler instead to inform the caller (IMA) that no ad was loaded. There are also many VPAID wrappers that aggregate multiple calls to different exchanges (such as prebid.js header bidding endpoints) when initAd is called.

By no longer performing any of this when AdsManager.init is called, the player now waits until the ad break is encountered -- making the user wait while the VPAID loads and performs actions during the VPAID's initAd call. For pre-roll/post-roll, this can delay playback by several seconds. This is not only a bad user experience, but also decreases revenues by adding additional time between ad requests for a player that is executing an infinite playlist of multiple videos.

Additionally, the player cannot perform any handling for no-bid cases prior to the ad break being encountered. With the proper preloading with 3.330.0 and before, an error encountered by the player due to a no-bid event had an opportunity to change to a different ad tag (such as a 100% fill house ad) and execute AdsManager.init again before the ad break is encountered. This is no longer possible.

If this is a conscious change to remove VPAID preloading, can we get an explanation from the team as to why? It was working fine before so removing a feature that was working doesn't make sense.

Yohan Boutin

unread,
Sep 18, 2019, 12:16:34 PM9/18/19
to Timothy Ace, Interactive Media Ads SDK
Hi Timothy

If i understand correctly, now the VPAID initAd is called on AdsManager.start().

From my side i confirm what you said about the industry : adsManager.init() => call initAd, adsManager.start() -> call startAd
If this behavior has been changed, this mean we won't be able anymore to have the Error (no ads for example) during the init, but during the start.
This also mean that you can start rendering an ad that can fail to error, while the it could have been detected during init ...

@Interactive Media Ads SDK can you explain us the exact change ?

--
You received this message because you are subscribed to the Google Groups "Interactive Media Ads SDK" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ima-sdk+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ima-sdk/cbc10e6c-566f-4b7f-b2f1-997289ae4153%40googlegroups.com.

Tomasz Skibinski

unread,
Sep 18, 2019, 1:18:51 PM9/18/19
to Interactive Media Ads SDK
I want to mention one detail: for last 4 hours (since 16:00 18.09.2019 GMT+1) we observe very low viewability measured with viewable_impression. Drop is from about 75% to 10%.
Please check Your viewability. 
Is it possible that new flow of IMA VPAID load,init and start can cause lower viewability ?
Tested on many ads sources.

IMA SDK

unread,
Sep 18, 2019, 4:22:50 PM9/18/19
to skib...@gmail.com, ima...@googlegroups.com

Hello,

Thank you all for reaching out regarding the IMA SDK for html5.

The SDK is currently undergoing a significant refactoring, and as part of the refactor VPAID preloading is currently unavailable.

I apologize for not conveying this through updates in our documentation. Because of the internal nature of the change, it was not flagged to be included in the release notes. Steps are being taken so other such changes do make it in to future sets of release notes.

Because of the size of the refactoring, we do not currently have information about future releases supporting VPAID preloading.  Please refer to future releases of the SDK regarding the status of VPAID preloading.

Thank you, and please reach out if you have any questions on changes to the SDK. Updates to the docs regarding VPAID preloading will be coming shortly.

Jackson
IMA SDK DevRel



ref:_00D1U1174p._5001UHGzYx:ref

Michael Duran

unread,
Sep 18, 2019, 7:56:23 PM9/18/19
to Interactive Media Ads SDK
Hi,

Can you specify how to load the version prior to breaking changes, i.e. v3.330.0? I wasn't able to find this documented (url param? different path? something else?)

Thank you,
Michael D.

Timothy Ace

unread,
Sep 19, 2019, 8:34:14 AM9/19/19
to Interactive Media Ads SDK
Although I'm sure it's not officially supported, the old version (and every other previous IMA version) is available if you load from the 'prerelease' path:

ex: <script type="text/javascript" src="//imasdk.googleapis.com/prerelease/js/3.330.0/ima3.js"></script>

A policy of "we broke something while refactoring and have decided to remove support for it rather than fix it" is not the way to run a product.

Given this, we will continue loading v3.330.0 this way until we can completely remove IMA dependence.

IMA SDK

unread,
Sep 19, 2019, 3:28:18 PM9/19/19
to ta...@synacor.com, ima...@googlegroups.com
Hi Timothy,

Thank you for reaching out and staying persistent in advocating for VPAID preloading. We were able to work with the engineering team using this thread as evidence to support the need for VPAID preloading. We have identified this change as a regression and are working to have VPAID perloading functionality re-implemented asap, the change is expected early next week.

The 'prerelease' link shared previously is not a supported use of the IMA SDK, and implementing the link in a production environment could lead to instability and outages.

Please keep an eye on the release history for updates to the IMA SDK, and feel free to reach out with any questions you have.

Thank you

Interactive Media Ads SDK

unread,
Oct 8, 2019, 1:03:45 PM10/8/19
to Interactive Media Ads SDK
Hi all,

I just wanted to follow up on this issue. We returned function for VPAID preloading with version 3.334.0.

Please follow up if you continue to have problems in regards to this issue.

Thank you,
Reply all
Reply to author
Forward
0 new messages