In diesem Leitfaden erfahren Sie, wie Sie mit dem IMA SDK für iOS eine eigene benutzerdefinierte Anzeigen-UI implementieren. Dazu müssen Sie die Standardbenutzeroberfläche deaktivieren, eine neue benutzerdefinierte Benutzeroberfläche einrichten und Anzeigeninformationen aus dem SDK in die neue Benutzeroberfläche einfügen. Dieser Leitfaden baut auf der Einfaches Objective-C-Beispiel für iOS. Sie können die komplette Beispiel für eine benutzerdefinierte UI
Neue UI-Elemente definieren
Bevor Sie Code schreiben, ändern Sie das Storyboard, um Elemente für die Schaltfläche Weitere Informationen, Werbung überspringen und Countdown-Timer. Stellen Sie sicher, dass die Schaltfläche Werbung überspringen (wie unten gezeigt), um zu verhindern, dass wenn der Countdown-Timer zum Überspringen aktualisiert wird.
Schaltfläche Weitere Informationen
Schaltfläche Werbung überspringen
Label Countdown der Anzeige
Achten Sie darauf, dass diese neuen Elemente mit Variablen in ViewController
verbunden sind.
Fügen Sie auch Variablen hinzu, um die aktuelle Anzeige und die Zeit bis zum Überspringen der Anzeige zu verfolgen.
der später verwendet wird.
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;
Integrierte UI deaktivieren
Teilen Sie dem SDK zuerst mit, dass Sie die integrierte UI deaktivieren möchten.
ViewController.m
- (void)setUpContentPlayer { ... IMAAdsRenderingSettings *adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init]; adsRenderingSettings.disableUi = YES; [self.adsManager initializeWithAdsRenderingSettings:adsRenderingSettings]; }
Benutzerdefinierte UI ausblenden und nur anzeigen, wenn sie erlaubt ist
Für einige Google-Anzeigen wie AdSense-Anzeigen ist keine benutzerdefinierte Benutzeroberfläche zulässig. Stattdessen rendern sie immer ihre eigene UI. Blenden Sie Ihre benutzerdefinierte UI standardmäßig aus:
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; }
Benutzerdefinierte Benutzeroberfläche nur dann anzeigen, wenn die gerade wiedergegebene Anzeige die Benutzeroberfläche ausgeblendet. Blenden Sie die benutzerdefinierte Benutzeroberfläche nach jeder Anzeige aus, falls die folgende Anzeige nicht Benutzerdefinierte Benutzeroberfläche zulassen:
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]; }
Logik für die Schaltfläche „Weitere Informationen“ hinzufügen
Die erste UI-Komponente, die verbunden werden soll, ist die Schaltfläche Weitere Informationen. Erstellen Sie eine "Innenretusche". Listener, der das SDK darüber informiert, auf die Schaltfläche Weitere Informationen geklickt wurde.
ViewController.m
- (IBAction)onLearnMoreTouch:(id)sender {
[self.adsManager clicked];
}
Logik für den Countdown-Timer hinzufügen
Als Nächstes verkabeln Sie den Countdown-Timer, bei dem
adsManager:adDidProgressToTime:totalTime:
zum Berechnen
die verbleibende Zeit der Anzeige.
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;
}
Logik für die Schaltfläche „Anzeige überspringen“ hinzufügen
Verbinden Sie zum Schluss die Schaltfläche Werbung überspringen. Diese Schaltfläche wird nur bei überspringbaren Anzeigen wird eine Anzeige übersprungen, sobald der Countdown-Timer 0 erreicht ist. Dieser Code wird hinzugefügt dieselbe Methode wie für den Countdown-Timer weiter oben.
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];
}
}
Nach der Implementierung zeigt die Benutzeroberfläche in unserem Beispiel für eine benutzerdefinierte UI sieht so aus:
Fehlerbehebung
- Haben Sie ein Beispiel-Tag, mit dem die Anzeigen-UI deaktiviert werden kann?
- Sie können die URL dieses Beispiel-Tag und fügen Sie ihn in Ihre IMA-Implementierung ein.
- Ich kann die Standardbenutzeroberfläche nicht deaktivieren.
- Achten Sie darauf, dass
adsRenderingSettings.disableUi
auftrue
festgelegt ist und angetAdsManager
übergeben. Prüfen Sie, obad.isUiDisabled()
gibttrue
zurück. Außerdem muss Ihr Netzwerk in Ad Manager aktiviert sein, damit auf der Benutzeroberfläche. Wenn diese Funktion aktiviert ist, enthält Ihr VAST einenExtension
, der sieht so aus: Sollten weiterhin Probleme auftreten, wenden Sie sich an Ihren Account Manager, um herauszufinden, unabhängig davon, ob Sie aktiviert sind. Für einige Anzeigentypen ist eine spezielle Benutzeroberfläche erforderlich. diese Anzeigen mit einem<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension>
<UiHideable>
-Wert von 0 zurückgeben. In diesem Fall muss das Trafficking-Team Änderungen vornehmen, damit diese Anzeigentypen nicht geschaltet werden.