Skip to content

[BUG] googima + FreeWheel VMAP not working on IOS #245

Description

@normtronics

Describe the bug

On iOS with googima, a FreeWheel VMAP tag (resp=vmap1) configured as a schedule break tag correctly substitutes [GOOGLE_INSTREAM_VIDEO_NONCE] into givn (confirmed in Charles). When looking in Charles I can see FreeWheel returns HTTP 200 with a valid VMAP 1.0 document. But in the Xcode console I see this error Ad Error [1009]: The response does not contain any valid ads.

The same FreeWheel VMAP + googima setup works on Android (nonce substitutes, preroll plays). Failure is iOS-specific.

This is not a FreeWheel no-fill and not a missing nonce, iOS is rendering a playable VMAP response when the URL is supplied via the schedule tag path.

To Reproduce

Set advertising: { client: 'googima' }.

Use a FreeWheel-style tag with resp=vmap1 and literal givn=[GOOGLE_INSTREAM_VIDEO_NONCE]
Attach it to the playlist item as a schedule break tag, e.g.:

adschedule: {
  adBreak1: {
    offset: 'pre',
    ad: { source: 'googima', tag: '<freewheel-vmap-url>' },
  },
}

(Android uses the equivalent googima + VMAP tag wiring that succeeds in our app.)
Start playback on iOS.
In Charles/Proxyman: confirm outbound request has a real givn= (substitution works).
Confirm response is VMAP 1.0 + inline VAST 3.0 + at least one video/mp4 MediaFile.
Observe player/Xcode: Ad Error 1009.

Expected behavior

iOS should behave like Android: with googima and a FreeWheel resp=vmap1 tag, after nonce substitution and a valid VMAP/VAST/MP4 response, the preroll should play without error 1009.

Desktop (please complete the following information):

Response structure:

<vmap:VMAP xmlns:vmap="http://www.iab.net/vmap-1.0" version="1.0">
  <vmap:AdBreak breakType="linear" timeOffset="start">
    <vmap:AdSource>
      <vmap:VASTAdData>
        <VAST version="3.0">
          <Ad>
            <InLine>
              <AdSystem>FreeWheel</AdSystem>
              <Creatives>
                <Creative>
                  <Linear>
                    <Duration>00:00:30</Duration>
                    <MediaFiles>
                      <MediaFile type="video/mp4" delivery="progressive"
                        width="1280" height="720">
                        <![CDATA[ https://cdn.example.com/creative.mp4 ]]>
                      </MediaFile>
                    </MediaFiles>
                  </Linear>
                </Creative>
              </Creatives>
            </InLine>
          </Ad>
        </VAST>
      </vmap:VASTAdData>
    </vmap:AdSource>
  </vmap:AdBreak>
</vmap:VMAP>

iOS player: JWPlayerKit Ad Error [1009]: The response does not contain any valid ads.
Android: same response shape plays successfully.

react-native: 0.81.6
@jwplayer/jwplayer-react-native: 1.6.0
iOS pods: JWPlayerKit 4.26.2, GoogleAds-IMA-iOS-SDK 3.22.1

ℹ️ While Issues are valuable for open-source collaboration, a JWP request ensures that you will receive clear timelines and efficient support.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingnative-sdk-issueWork is blocked by native SDK

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions