The provided ad type: nonlinear is not supported

12 views
Skip to first unread message

zys

unread,
May 26, 2025, 3:34:54 AM5/26/25
to Interactive Media Ads SDK
i can't play nonlinear ad with ios 18.4, iPhone 12, ima sdk 3.26.1.
and it can appear when i change the code in Basic Example App, using  (https://developers.google.cn/interactive-media-ads/docs/sdks/ios/client-side/companions?hl=zh-cn).
The code is:
```
#import "ViewController.h"

@import AVFoundation;

@import GoogleInteractiveMediaAds;

@interface ViewController () <IMAAdsLoaderDelegate, IMAAdsManagerDelegate>

/// Content video player.

@property(nonatomic, strong) AVPlayer *contentPlayer;

/// Play button.

@property(nonatomic, weak) IBOutlet UIButton *playButton;

/// UIView in which we will render our AVPlayer for content.

@property(nonatomic, weak) IBOutlet UIView *videoView;

@property(nonatomic, strong) UIView *companionView;

// SDK

/// Entry point for the SDK. Used to make ad requests.

@property(nonatomic, strong) IMAAdsLoader *adsLoader;

/// Playhead used by the SDK to track content video progress and insert mid-rolls.

@property(nonatomic, strong) IMAAVPlayerContentPlayhead *contentPlayhead;

/// Main point of interaction with the SDK. Created by the SDK as the result of an ad request.

@property(nonatomic, strong) IMAAdsManager *adsManager;

@end

@implementation ViewController

// The content URL to play.

NSString *const kTestAppContentUrl_MP4 =

    @"https://storage.googleapis.com/gvabox/media/samples/stock.mp4";

// Ad tag

//NSString *const kTestAppAdTagUrl = @"https://pubads.g.doubleclick.net/gampad/ads?"

//  @"iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&"

//  @"ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&"

//  @"impl=s&correlator=";

NSString *const kTestAppAdTagUrl = @"https://cdn.theoplayer.com/demos/ads/vast/vast-nonlinear.xml";

- (void)viewDidLoad {

  [super viewDidLoad];

  self.playButton.layer.zPosition = MAXFLOAT;

    CGRect initialFrame = CGRectMake(self.videoView.frame.origin.x, self.videoView.frame.origin.y, 0, 0);

    self.companionView = [[UIView alloc] initWithFrame:initialFrame];

    [self.view addSubview:self.companionView];    

    [self setupAdsLoader];

    [self setUpContentPlayer];

}

- (IBAction)onPlayButtonTouch:(id)sender {

  [self requestAds];

  self.playButton.hidden = YES;

}

#pragma mark Content Player Setup

- (void)setUpContentPlayer {

  // Load AVPlayer with path to our content.

  NSURL *contentURL = [NSURL URLWithString:kTestAppContentUrl_MP4];

  self.contentPlayer = [AVPlayer playerWithURL:contentURL];

  // Create a player layer for the player.

  AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.contentPlayer];

  // Size, position, and display the AVPlayer.

  playerLayer.frame = self.videoView.layer.bounds;

  [self.videoView.layer addSublayer:playerLayer];

  // Set up our content playhead and contentComplete callback.

  self.contentPlayhead = [[IMAAVPlayerContentPlayhead alloc] initWithAVPlayer:self.contentPlayer];

  [[NSNotificationCenter defaultCenter] addObserver:self

                                           selector:@selector(contentDidFinishPlaying:)

                                               name:AVPlayerItemDidPlayToEndTimeNotification

                                             object:self.contentPlayer.currentItem];

}

#pragma mark SDK Setup

- (void)setupAdsLoader {

  self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:nil];

  self.adsLoader.delegate = self;

}

- (void)requestAds {

    IMACompanionAdSlot *cc = [[IMACompanionAdSlot alloc] initWithView:self.companionView];

  // Create an ad display container for ad rendering.

  IMAAdDisplayContainer *adDisplayContainer =

      [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView

                                          viewController:self

                                          companionSlots:@[cc]];

  // Create an ad request with our ad tag, display container, and optional user context.

  IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:kTestAppAdTagUrl

                                                adDisplayContainer:adDisplayContainer

                                                   contentPlayhead:self.contentPlayhead

                                                       userContext:nil];

  [self.adsLoader requestAdsWithRequest:request];

}

- (void)contentDidFinishPlaying:(NSNotification *)notification {

  // Make sure we don't call contentComplete as a result of an ad completing.

  if (notification.object == self.contentPlayer.currentItem) {

    [self.adsLoader contentComplete];

  }

}

#pragma mark AdsLoader Delegates

- (void)adsLoader:(IMAAdsLoader *)loader adsLoadedWithData:(IMAAdsLoadedData *)adsLoadedData {

  // Grab the instance of the IMAAdsManager and set ourselves as the delegate.

  self.adsManager = adsLoadedData.adsManager;

  self.adsManager.delegate = self;

  // Create ads rendering settings to tell the SDK to use the in-app browser.

  IMAAdsRenderingSettings *adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init];

  adsRenderingSettings.linkOpenerPresentingController = self;

  // Initialize the ads manager.

  [self.adsManager initializeWithAdsRenderingSettings:adsRenderingSettings];

}

- (void)adsLoader:(IMAAdsLoader *)loader failedWithErrorData:(IMAAdLoadingErrorData *)adErrorData {

  // Something went wrong loading ads. Log the error and play the content.

    NSLog(@"Error loading ads: %@, %@", adErrorData.adError.message, @(adErrorData.adError.code));

  [self.contentPlayer play];

}

#pragma mark AdsManager Delegates

- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {

  // When the SDK notified us that ads have been loaded, play them.

  if (event.type == kIMAAdEvent_LOADED) {

    [adsManager start];

  }

}

- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdError:(IMAAdError *)error {

  // Something went wrong with the ads manager after ads were loaded. Log the error and play the

  // content.

  NSLog(@"AdsManager error: %@", error.message);

  [self.contentPlayer play];

}

- (void)adsManagerDidRequestContentPause:(IMAAdsManager *)adsManager {

  // The SDK is going to play ads, so pause the content.

  [self.contentPlayer pause];

}

- (void)adsManagerDidRequestContentResume:(IMAAdsManager *)adsManager {

  // The SDK is done playing ads (at least for now), so resume the content.

  [self.contentPlayer play];

}

@end

and i open the debug mode and got the message 'AdsManager error: The provided ad type: nonlinear is not supported.' 

The IMAError code is 200.

The code which i modified are in bold. 

How can i fix this bug? Thanks~🙏🏻🙏🏻

IMA SDK

unread,
May 26, 2025, 12:08:11 PM5/26/25
to mapl...@gmail.com, ima...@googlegroups.com

Hi,

Thank you for contacting the IMA SDK support team.

According to discussions in the developer forum, this is a known issue specific to 18.4 version. It's not related to the IMA SDK, but rather originates from Apple's side. This is a know issue and the team is currently working on it. We will let you know as soon as I have an update.

Thanks,
 
Google Logo IMA SDK Team

Feedback
How was our support today?

rating1    rating2    rating3    rating4    rating5
[2025-05-26 16:08:02Z GMT] This message is in relation to case "ref:!00D1U01174p.!500Ht01qYClH:ref" (ADR-00308326)



Reply all
Reply to author
Forward
0 new messages