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 Pomiń reklamę

Etykieta Odliczanie 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:

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.disableUima wartośćtruei przekaże jągetAdsManager. Sprawdź, czyad.isUiDisabled()zwracatrue. 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 tagExtension, który wygląda tak:<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension> <UiHideable>równą 0. W takim przypadku zespół trafikerów musi wprowadzić zmiany, by nie wyświetlać tych typów reklam.