Niestandardowy interfejs z pakietem IMA SDK na iOS

Z tego przewodnika dowiesz się, jak wdrożyć własny niestandardowy interfejs reklamy, korzystając z pakietu IMA SDK na iOS. Aby to zrobić, musisz wyłączyć domyślny interfejs, skonfigurować nowy, a następnie wypełniają nowy interfejs informacjami o reklamach uzyskanymi z pakietu SDK. Ten przewodnik bazuje na przykład podstawowego programu Objective-C na iOS. Możesz pobrać pełną wersję Przykład niestandardowego interfejsu

Definiowanie nowych elementów interfejsu

Zanim napiszesz kod, zmodyfikuj scenorys, aby dodać do niego elementy Przycisk Więcej informacji, przycisk Pomiń reklamę i odliczanie. Upewnij się, że przycisk Pomiń reklamę ma ustawienie „Niestandardowe”, (jak pokazano poniżej), aby zapobiec od migania w miarę aktualizacji odliczania.

Przycisk Więcej informacji

Przycisk Więcej informacji

Przycisk Pomiń reklamę

Przycisk Pomiń reklamę

Etykieta Odliczanie reklam

Etykieta odliczania reklam

Upewnij się, że te nowe elementy są połączone ze zmiennymi w elemencie ViewController. Dodaj też zmienne, by śledzić bieżącą reklamę i czas, po którym będzie można ją pominąć. który zostanie wykorzystany później.

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;

Wyłącz wbudowany interfejs

Zacznij od poinformowania pakietu SDK, że chcesz wyłączyć jego wbudowany interfejs.

ViewController.m

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

Ukryj niestandardowy interfejs i wyświetlaj go tylko wtedy, gdy jest to dozwolone

Niektóre reklamy Google, takie jak reklamy AdSense, nie zezwalają na korzystanie z niestandardowego interfejsu. Zamiast tego zawsze renderują własny interfejs. Domyślnie ukryj swój niestandardowy interfejs:

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;
}

Pokazuj niestandardowy interfejs tylko wtedy, gdy aktualnie odtwarzana reklama ukrywa swój interfejs. Ukryj niestandardowy interfejs po każdej reklamie, na wypadek gdyby kolejna reklama nie zezwalaj na niestandardowy interfejs użytkownika:

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];
}

Dodawanie funkcji logicznej do przycisku Więcej informacji

Pierwszym elementem interfejsu, który należy utworzyć, jest przycisk Więcej informacji. Tworzenie retuszu wnętrza detektor powiadomienia SDK, że Kliknięto przycisk Więcej informacji.

ViewController.m

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

Dodaj funkcje logiczne dla odliczania

Następnie połącz licznik czasu, który wykorzystuje adsManager:adDidProgressToTime:totalTime: do obliczenia przez pozostały czas reklamy.

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;
}

Dodanie funkcji logicznej do przycisku Pomiń reklamę

Na koniec dodaj przycisk Pomiń reklamę. Ten przycisk jest wyświetlany tylko w przypadku reklam możliwych do pominięcia reklamy; pominie reklamę, gdy licznik czasu osiągnie wartość 0. Ten kod został dodany w taki sam sposób jak przy odliczaniu czasu.

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];
  }
}

Po zaimplementowaniu interfejsu w naszym Przykład niestandardowego interfejsu użytkownika wygląda tak:

Przykład niestandardowego interfejsu

Rozwiązywanie problemów

Czy masz przykładowy tag, w którym możesz wyłączyć interfejs użytkownika reklamy?
Możesz skopiować URL tego przykładowy tag i wklej go w implementacji IMA.
Nie mogę wyłączyć domyślnego interfejsu użytkownika.
Sprawdź, czy ustawienie adsRenderingSettings.disableUi ma wartość true i przekaże ją getAdsManager. Sprawdź, czy ad.isUiDisabled() zwraca true. Poza tym, aby można było wyłączyć reklamy, sieć musi być włączona w usłudze Ad Manager. w interfejsie reklam. Jeśli tak jest, VAST zawiera tag Extension, który wygląda tak:
<Extension type="uiSettings">
<UiHideable>1</UiHideable>
</Extension>
Jeśli problem nadal występuje, skontaktuj się z menedżerem konta, aby ustalić, czy włączone. Niektóre typy reklam wymagają określonego interfejsu użytkownika. tych reklam zwracany z wartością <UiHideable> równą 0. W takim przypadku zespół trafikerów musi wprowadzić zmiany, by nie wyświetlać tych typów reklam.