Este guia mostra como implementar sua própria interface de anúncio personalizada usando o SDK do IMA para iOS. Para isso, é preciso desativar a interface padrão, configurar uma nova interface personalizada e, em seguida, preencherá a nova interface com informações de anúncio obtidas do SDK. Este guia se baseia no Exemplo básico de Objective-C para iOS. Você pode fazer o download Exemplo de interface personalizada.
Definir novos elementos da interface
Antes de escrever um código, modifique o storyboard para adicionar elementos ao Botão Saiba mais, Pular anúncio e timer de contagem regressiva. Verifique se Seu botão Pular anúncio for "Personalizado" (conforme mostrado abaixo) para evitar que de piscar enquanto o timer de contagem regressiva é atualizado.
Botão Saiba mais

Botão Skip Ad (Pular anúncio)

Rótulo Contagem regressiva do anúncio

Verifique se esses novos elementos estão conectados às variáveis no ViewController.
Além disso, adicione variáveis para rastrear o anúncio atual e o tempo até que o anúncio possa ser ignorado.
que será usado mais tarde.
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;
Desativar a interface integrada
Comece informando ao SDK que você quer desativar a interface integrada dele.
ViewController.m
- (void)setUpContentPlayer { ... IMAAdsRenderingSettings *adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init]; adsRenderingSettings.disableUi = YES; [self.adsManager initializeWithAdsRenderingSettings:adsRenderingSettings]; }
Ocultar a interface personalizada e mostrá-la somente quando permitido
Alguns anúncios do Google, como os anúncios do Google AdSense, não permitem uma interface do usuário personalizada. Em vez disso, eles sempre renderizam a própria interface. Ocultar a interface personalizada por padrão:
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; }
Mostrar a interface personalizada somente quando o anúncio em reprodução estiver ocultando a interface. Oculte a interface do usuário personalizada após cada anúncio para o caso de o anúncio seguinte não permitir interface personalizada:
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]; }
Adicionar lógica ao botão "Saiba mais"
O primeiro componente da interface a ser conectado é o botão Saiba mais. Crie um "Retoque interno" para notificar o SDK de que o O botão Saiba mais foi clicado.
ViewController.m
- (IBAction)onLearnMoreTouch:(id)sender {
  [self.adsManager clicked];
}
Adicionar lógica para o timer de contagem regressiva.
Em seguida, configure o timer de contagem regressiva, que usa
adsManager:adDidProgressToTime:totalTime: para calcular
o tempo restante do anúncio.
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;
}
Adicionar lógica para o botão "Pular anúncio"
Por fim, configure o botão Skip Ad (Pular anúncio). Esse botão é exibido somente para anúncios anúncios; ela pula um anúncio quando seu contador regressivo atinge zero. Este código foi adicionado com o mesmo método usado para o contador regressivo acima.
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];
  }
}
Depois de implementada, a interface Exemplo de interface personalizada é assim:

Solução de problemas
- Você tem uma tag de exemplo que desabilite a interface de anúncios?
- Você pode copiar o URL deste exemplo de tag e cole na implementação do IMA.
- Não consigo desativar a interface padrão.
- Verifique se você definiu adsRenderingSettings.disableUicomotruee a transmitimos paragetAdsManager. Verifique sead.isUiDisabled()retornatrue. Além disso, é preciso ativar sua rede no Ad Manager para desativar a interface do anúncio. Se esse recurso estiver ativado, o VAST vai conter umExtensionque é assim:<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension> <UiHideable>de 0. Se você encontrar isso, seu a equipe de tráfego precisa fazer alterações para garantir que esses tipos de anúncios não sejam veiculados.