Пользовательский интерфейс с IMA SDK для iOS

В этом руководстве показано, как реализовать собственный рекламный интерфейс с помощью IMA SDK для iOS. Для этого вам необходимо отключить пользовательский интерфейс по умолчанию, настроить новый пользовательский интерфейс, а затем заполнить новый пользовательский интерфейс рекламной информацией, полученной из SDK. Это руководство основано на базовом примере Objective-C для iOS. Вы можете скачать полный пример пользовательского интерфейса .

Определите новые элементы пользовательского интерфейса

Прежде чем писать какой-либо код, измените раскадровку, добавив элементы для кнопки «Подробнее» , кнопки «Пропустить рекламу» и таймера обратного отсчета. Убедитесь, что ваша кнопка «Пропустить рекламу» является «Пользовательской» кнопкой (как показано ниже), чтобы она не мигала при обновлении таймера обратного отсчета пропуска.

Кнопка «Узнать больше»

Learn More button

Кнопка «Пропустить рекламу»

Skip Ad button

Ярлык обратного отсчета рекламы

Ad Countdown label

Убедитесь, что эти новые элементы подключены к переменным в вашем ViewController . Также добавьте переменные для отслеживания текущей рекламы и времени, пока рекламу можно будет пропустить, что будет использоваться позже.

ViewController.m

@property(nonatomic, weak) IBOutlet UIButton *learnMore;
@property(nonatomic, weak) IBOutlet UIButton *skipAd;
@property(nonatomic, weak) IBOutlet UILabel *adCountdown;
@property(nonatomic) NSTimeInterval timeTillSkip;
@property(nonatomic, strong) IMAAd *currentAd;

Отключить встроенный пользовательский интерфейс

Для начала сообщите SDK, что вы хотите отключить его встроенный пользовательский интерфейс.

ViewController.m

- (void)setUpContentPlayer {
  ...
  IMAAdsRenderingSettings *adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init];
  adsRenderingSettings.disableUi = YES;
  [self.adsManager initializeWithAdsRenderingSettings:adsRenderingSettings];
}

Скройте свой собственный пользовательский интерфейс и покажите его только тогда, когда это разрешено.

Некоторые объявления Google, например объявления AdSense, не допускают использования пользовательского интерфейса. Вместо этого они всегда отображают собственный пользовательский интерфейс. Скройте свой пользовательский интерфейс по умолчанию:

ViewController.m

- (void)viewDidLoad {
  ...
  [self hideCustomUi];
  self.timeTillSkip = INFINITY;
  self.learnMore.layer.zPosition = MAXFLOAT;
  self.skipAd.layer.zPosition = MAXFLOAT;
  self.adCountdown.layer.zPosition = MAXFLOAT;
  ...
}

- (void)hideCustomUi {
  self.learnMore.hidden = YES;
  self.adCountdown.hidden = YES;
  self.skipAd.hidden = YES;
}

Показывать пользовательский интерфейс только в том случае, если воспроизводимое в данный момент объявление скрывает свой интерфейс. Скрывайте пользовательский интерфейс после каждого объявления, если следующее объявление не поддерживает пользовательский интерфейс:

ViewController.m

- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
  // When the SDK notified you that ads have been loaded, play them.
  if (event.type == kIMAAdEvent_LOADED) {
    [adsManager start];
  } else if (event.type == kIMAAdEvent_STARTED) {
    self.currentAd = event.ad;
    if (self.currentAd.isUiDisabled) {
      [self showCustomUi];
    }
  } else if (event.type == kIMAAdEvent_SKIPPED || event.type == kIMAAdEvent_COMPLETE) {
    [self hideCustomUi];
  } else if (event.type == kIMAAdEvent_TAPPED) {
    // Since you're disabling IMA's built-in UI, you're also losing the
    // UI element that resumes paused ads with a tap. Add this code
    // to resume paused ads when a user taps on them.
    [self.adsManager resume];
  }
}

- (void)showCustomUi {
  self.learnMore.hidden = NO;
  [self.videoView bringSubviewToFront:self.learnMore];
  self.adCountdown.hidden = NO;
  if (self.currentAd.isSkippable) {
    self.skipAd.hidden = NO;
    [self.videoView bringSubviewToFront:self.skipAd];
  } else {
    self.skipAd.hidden = YES;
  }
  self.adCountdown.text = @"";
  [self.skipAd setTitle:@"" forState:UIControlStateNormal];
}

Добавьте логику для кнопки «Подробнее»

Первый компонент пользовательского интерфейса, который необходимо подключить, — это кнопка «Подробнее» . Создайте прослушиватель «Touch Up Inside», чтобы уведомить SDK о нажатии кнопки «Подробнее» .

ViewController.m

- (IBAction)onLearnMoreTouch:(id)sender {
  [self.adsManager clicked];
}

Добавьте логику для таймера обратного отсчета

Затем подключите таймер обратного отсчета, который используетadsManager adsManager:adDidProgressToTime:totalTime: для расчета оставшегося времени показа рекламы.

ViewController.m

- (void)adsManager:(IMAAdsManager *)adsManager
adDidProgressToTime:(NSTimeInterval)mediaTime
         totalTime:(NSTimeInterval)totalTime {
  // Update countdown timer.
  NSMutableString *countdownText = [NSMutableString stringWithString:@"Ad "];
  NSInteger totalAds = self.currentAd.adPodInfo.totalAds;
  if (totalAds > 1) {
    NSInteger position = self.currentAd.adPodInfo.adPosition;
    [countdownText appendString:
        [NSString stringWithFormat:@"%ld of %ld", (long)position, (long)totalAds]];
  }
  NSTimeInterval remainingTime = totalTime - mediaTime;
  [countdownText appendString:[NSString stringWithFormat:@" (%.fs)", remainingTime]];
  self.adCountdown.text = countdownText;
}

Добавьте логику для кнопки «Пропустить рекламу»

Наконец, подключите кнопку «Пропустить рекламу» . Эта кнопка отображается только для объявлений с возможностью пропуска; он пропускает рекламу, как только его таймер обратного отсчета достигает 0. Этот код добавляется к тому же методу, который использовался для таймера обратного отсчета выше.

ViewController.m

- (void)adsManager:(IMAAdsManager *)adsManager
adDidProgressToTime:(NSTimeInterval)mediaTime
         totalTime:(NSTimeInterval)totalTime {
  ...
  // Update skip button
  if (self.currentAd.isSkippable) {
    self.timeTillSkip = self.currentAd.skipTimeOffset - mediaTime;
    NSString *skipString = @"Skip ad";
    if (self.timeTillSkip > 0) {
      skipString =
          [NSString stringWithFormat:@"Skip this ad in %.f...", self.timeTillSkip];
    }
    // Disable animations while you change the button text to prevent it from blinking. The button
    // type must be "Custom" instead of "System" for this to work. This can be set in the attributes
    // inspector for the button in the storyboard file.
    [UIView setAnimationsEnabled:NO];
    [self.skipAd setTitle:skipString forState:UIControlStateNormal];
    [self.skipAd layoutIfNeeded];
    [UIView setAnimationsEnabled:YES];
  }
}

После реализации пользовательский интерфейс в нашем примере пользовательского пользовательского интерфейса выглядит следующим образом:

Пример пользовательского интерфейса

Поиск неисправностей

Есть ли у вас образец тега, который позволяет отключить рекламный интерфейс?
Вы можете скопировать URL-адрес этого примера тега и вставить его в свою реализацию IMA.
Я не могу отключить пользовательский интерфейс по умолчанию.
Убедитесь, что для adsRenderingSettings.disableUi установлено значение true , и передайте его в getAdsManager . Убедитесь, что ad.isUiDisabled() возвращает true . Кроме того, чтобы отключить рекламный интерфейс, ваша сеть должна быть включена в Менеджере рекламы. Если вы включены, ваш VAST содержит Extension , которое выглядит следующим образом:
<Extension type="uiSettings">
<UiHideable>1</UiHideable>
</Extension>
Если у вас по-прежнему возникают проблемы, обратитесь к менеджеру своего аккаунта, чтобы узнать, включены ли вы. Для некоторых типов объявлений требуется определенный пользовательский интерфейс; эти объявления возвращаются со значением <UiHideable> равным 0. Если вы столкнулись с этим, вашей команде по трафику необходимо внести изменения, чтобы гарантировать, что эти типы объявлений не будут показываться.