Banery reklamowe to prostokątne reklamy, które zajmują część układu aplikacji. Pozostają na ekranie, gdy użytkownicy wchodzą w interakcję z aplikacją – są zakotwiczone u góry lub u dołu ekranu albo pozostają w tekście podczas przewijania strony. Baner reklamy mogą odświeżać się automatycznie po upływie określonego czasu. Przeczytaj Omówienie banerów reklamowych. .
Z tego przewodnika dowiesz się, jak zacząć korzystać z reklam zakotwiczonych adaptacyjne banery reklamowe, które pozwalają zmaksymalizować skuteczność reklam dzięki optymalizacji rozmiaru dla każdego urządzenia o określonej szerokości reklamy.
Zakotwiczony baner adaptacyjny
Zakotwiczone banery adaptacyjne to reklamy o stałym współczynniku proporcji reklamy reklam o stałym rozmiarze. Format obrazu jest podobny do standardu branżowego 320 x 50. Po określeniu pełnej dostępnej szerokości zwraca reklamę o optymalnej wysokości dla tej szerokości. Optymalna wysokość nie zmienia się w różnych żądaniach z tego samego źródła na urządzeniu i widoki z otoczenia nie muszą przesuwać się, gdy reklama jest odświeżana.
Wymagania wstępne
- Zapoznaj się z przewodnikiem dla początkujących.
Zawsze korzystaj z reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam, aktywne reklamy. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.
Najłatwiejszym sposobem wczytywania reklam testowych jest użycie naszego dedykowanego testowego identyfikatora jednostki reklamowej do systemu iOS banery:
/21775744923/example/adaptive-banner
Został on specjalnie skonfigurowany tak, aby wyświetlać reklamy testowe dla każdego żądania. Możesz do wykorzystania we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.
Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych znajdziesz w artykule Testowanie Reklamy.
Tworzenie widoku GAMBannerView
Banery reklamowe wyświetlają się w: GAMBannerView
więc pierwszym krokiem do integracji banerów reklamowych jest dodanie tagu GAMBannerView
w hierarchii widoków. Zwykle odbywa się to automatycznie lub
za pomocą Kreatora interfejsów.
Automatycznie
Obiekt GAMBannerView
można też utworzyć bezpośrednio.
Ten przykład tworzy GAMBannerView
:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
var bannerView: GAMBannerView!
override func viewDidLoad() {
super.viewDidLoad()
let viewWidth = view.frame.inset(by: view.safeAreaInsets).width
// Here the current interface orientation is used. Use
// GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth or
// GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth if you prefer to load an ad of a
// particular orientation,
let adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)
bannerView = GAMBannerView(adSize: adaptiveSize)
addBannerViewToView(bannerView)
}
func addBannerViewToView(_ bannerView: GAMBannerView) {
bannerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bannerView)
// This example doesn't give width or height constraints, as the provided
// ad size gives the banner an intrinsic content size to size the view.
view.addConstraints(
[NSLayoutConstraint(item: bannerView,
attribute: .bottom,
relatedBy: .equal,
toItem: view.safeAreaLayoutGuide,
attribute: .bottom,
multiplier: 1,
constant: 0),
NSLayoutConstraint(item: bannerView,
attribute: .centerX,
relatedBy: .equal,
toItem: view,
attribute: .centerX,
multiplier: 1,
constant: 0)
])
}
}
SwiftUI
Aby użyć GAMBannerView
, utwórz UIViewRepresentable
:
private struct BannerView: UIViewRepresentable {
let adSize: GADAdSize
init(_ adSize: GADAdSize) {
self.adSize = adSize
}
func makeUIView(context: Context) -> UIView {
// Wrap the GADBannerView in a UIView. GADBannerView automatically reloads a new ad when its
// frame size changes; wrapping in a UIView container insulates the GADBannerView from size
// changes that impact the view returned from makeUIView.
let view = UIView()
view.addSubview(context.coordinator.bannerView)
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
context.coordinator.bannerView.adSize = adSize
}
func makeCoordinator() -> BannerCoordinator {
return BannerCoordinator(self)
}
Aby zarządzać inicjalizacją i zachowaniem GAMBannerView
, utwórz element Coordinator
:
class BannerCoordinator: NSObject, GADBannerViewDelegate {
private(set) lazy var bannerView: GADBannerView = {
let banner = GADBannerView(adSize: parent.adSize)
banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
banner.load(GADRequest())
banner.delegate = self
return banner
}()
let parent: BannerView
init(_ parent: BannerView) {
self.parent = parent
}
Aby poznać szerokość widoku, użyj parametru GeometryReader
. Te zajęcia
oblicza odpowiedni rozmiar reklamy dla bieżącej orientacji urządzenia. Wartość frame
jest ustawiona na wysokość obliczoną na podstawie rozmiaru reklamy.
var body: some View {
GeometryReader { geometry in
let adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(geometry.size.width)
VStack {
Spacer()
BannerView(adSize)
.frame(height: adSize.size.height)
}
}
Objective-C
Pamiętaj, że w tym przypadku nie obowiązują ograniczenia szerokości ani wysokości, bo nada banerowi rozmiar treści, który pozwala widok.
@import GoogleMobileAds;
@interface ViewController ()
@property(nonatomic, strong) GAMBannerView *bannerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Here safe area is taken into account, hence the view frame is used after the
// view has been laid out.
CGRect frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets);
CGFloat viewWidth = frame.size.width;
// Here the current interface orientation is used. If the ad is being preloaded
// for a future orientation change or different orientation, the function for the
// relevant orientation should be used.
GADAdSize adaptiveSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);
// In this case, we instantiate the banner with desired ad size.
self.bannerView = [[GAMBannerView alloc] initWithAdSize:adaptiveSize];
[self addBannerViewToView:self.bannerView];
}
- (void)addBannerViewToView:(UIView *)bannerView {
bannerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:bannerView];
// This example doesn't give width or height constraints, as the provided
// ad size gives the banner an intrinsic content size to size the view.
[self.view addConstraints:@[
[NSLayoutConstraint constraintWithItem:bannerView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view.safeAreaLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0],
[NSLayoutConstraint constraintWithItem:bannerView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1
constant:0]
]];
}
@end
Interface Builder
Do storyboardu lub pliku xib możesz dodać GAMBannerView
. Jeśli używasz tej metody, pamiętaj, aby dodać ograniczenia pozycji tylko dla banera. Przykład:
podczas wyświetlania banera adaptacyjnego na dole ekranu, ustaw dolną część
widoku banera i ustaw
centerX
ograniczenie równe centerX
widoku superwidoku.
Rozmiar reklamy banerowej jest nadal ustawiany programowo:
Swift
bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth)
Objective-C
self.bannerView.adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);
Wczytywanie reklamy
Gdy GAMBannerView
jest już gotowy i jego właściwości są skonfigurowane, możesz wczytać reklamy. Aby to zrobić, wywołaj metodę loadRequest:
obiektu GAMRequest
:
Swift
override func viewDidLoad() {
super.viewDidLoad()
// Set the ad unit ID and view controller that contains the GAMBannerView.
bannerView.adUnitID = "/21775744923/example/adaptive-banner"
bannerView.rootViewController = self
bannerView.load(GAMRequest())
}
SwiftUI
banner.adUnitID = "ca-app-pub-3940256099942544/2435281174"
banner.load(GADRequest())
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
// Set the ad unit ID and view controller that contains the GAMBannerView.
self.bannerView.adUnitID = @"/21775744923/example/adaptive-banner";
self.bannerView.rootViewController = self;
[self.bannerView loadRequest:[GAMRequest request]];
}
obiekty GAMRequest reprezentują pojedyncze żądanie reklamy, zawierają właściwości, np. informacje o kierowaniu.
Jeśli reklama się nie wczyta, nie musisz wyraźnie żądać innej, o ile tylko masz skonfigurowaną odświeżanie jednostki reklamowej. Pakiet programistyczny Google Mobile Ads SDK respektuje częstotliwość odświeżania określoną w interfejsie Ad Managera. Jeśli nie masz włączonego odświeżania, musisz przesłać nowe żądanie.
Zdarzenia reklamowe
Za pomocą GADBannerViewDelegate
możesz nasłuchiwać zdarzeń cyklu życia, takich jak zamknięcie reklamy lub wyjście użytkownika z aplikacji.
Rejestrowanie zdarzeń związanych z banerami
Aby rejestrować zdarzenia banerów reklamowych, ustaw właściwość delegate
na
GAMBannerView
do obiektu, który implementuje metodę
Protokół GADBannerViewDelegate
. Ogólnie rzecz biorąc, klasa, która stosuje baner,
Reklamy działają też jako klasa przedstawiciela. W takim przypadku właściwość delegate
może
ustaw na self
.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADBannerViewDelegate {
var bannerView: GAMBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// ...
bannerView.delegate = self
}
}
SwiftUI
banner.delegate = self
Objective-C
@import GoogleMobileAds;
@interface ViewController () <GADBannerViewDelegate>
@property(nonatomic, strong) GAMBannerView *bannerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// ...
self.bannerView.delegate = self;
}
Implementowanie zdarzeń banera
Każda metoda w aplikacji GADBannerViewDelegate
jest oznaczona jako opcjonalna, dlatego
implementować tylko te metody,
które chcesz zastosować. Ten przykład implementuje wszystkie metody
i rejestruje komunikat w konsoli:
Swift
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
print("bannerViewDidReceiveAd")
}
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
print("bannerView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}
func bannerViewDidRecordImpression(_ bannerView: GADBannerView) {
print("bannerViewDidRecordImpression")
}
func bannerViewWillPresentScreen(_ bannerView: GADBannerView) {
print("bannerViewWillPresentScreen")
}
func bannerViewWillDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewWillDIsmissScreen")
}
func bannerViewDidDismissScreen(_ bannerView: GADBannerView) {
print("bannerViewDidDismissScreen")
}
Objective-C
- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView {
NSLog(@"bannerViewDidReceiveAd");
}
- (void)bannerView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(NSError *)error {
NSLog(@"bannerView:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}
- (void)bannerViewDidRecordImpression:(GADBannerView *)bannerView {
NSLog(@"bannerViewDidRecordImpression");
}
- (void)bannerViewWillPresentScreen:(GADBannerView *)bannerView {
NSLog(@"bannerViewWillPresentScreen");
}
- (void)bannerViewWillDismissScreen:(GADBannerView *)bannerView {
NSLog(@"bannerViewWillDismissScreen");
}
- (void)bannerViewDidDismissScreen:(GADBannerView *)bannerView {
NSLog(@"bannerViewDidDismissScreen");
}
Przykład implementacji metod delegowanych banera w aplikacji demonstracyjnej interfejsu API na iOS znajdziesz w pliku Ad Delegate.
Przypadki użycia
Oto kilka przykładów ich użycia.
Dodawanie banera do hierarchii widoku po otrzymaniu reklamy
Możesz odłożyć dodanie elementu GAMBannerView
do hierarchii widoku do czasu otrzymania reklamy. Możesz to zrobić, słuchając
dla wydarzenia bannerViewDidReceiveAd:
:
Swift
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
// Add banner to view and add constraints.
addBannerViewToView(bannerView)
}
Objective-C
- (void)bannerViewDidReceiveAd:(GAMBannerView *)bannerView {
// Add bannerView to view and add constraints as above.
[self addBannerViewToView:self.bannerView];
}
Animowanie banera reklamowego
Możesz też użyć zdarzenia bannerViewDidReceiveAd:
, aby animować baner reklamowy tylko raz
Jak widać w tym przykładzie:
Swift
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
bannerView.alpha = 0
UIView.animate(withDuration: 1, animations: {
bannerView.alpha = 1
})
}
Objective-C
- (void)bannerViewDidReceiveAd:(GAMBannerView *)bannerView {
bannerView.alpha = 0;
[UIView animateWithDuration:1.0 animations:^{
bannerView.alpha = 1;
}];
}
Wstrzymywanie i wznawianie aplikacji
Protokół GADBannerViewDelegate
udostępnia metody powiadamiania o zdarzeniach, takie jak:
, np. gdy kliknięcie powoduje wyświetlenie lub zamknięcie nakładki. Jeśli chcesz dowiedzieć się, czy te zdarzenia były spowodowane reklamami, zarejestruj te metody GADBannerViewDelegate
.
Aby wykrywać wszystkie typy prezentacji nakładek lub wywołań zewnętrznych przeglądarek, a nie tylko te, które pochodzą z kliknięć reklam, aplikacja powinna nasłuchiwać odpowiednich metod w metodach UIViewController
lub UIApplication
. Oto tabela pokazująca równoważne metody iOS wywoływane w tym samym czasie co metody GADBannerViewDelegate
:
Metoda GADBannerViewDelegate | Metoda iOS |
---|---|
bannerViewWillPresentScreen: |
viewWillDisappear: UIViewController |
bannerViewWillDismissScreen: |
viewWillAppear: UIViewController |
bannerViewDidDismissScreen: |
viewDidAppear: w UIViewController |
Ręczne zliczanie wyświetleń
Możesz ręcznie wysyłać pingi wyświetleń do Ad Managera, jeśli masz specjalne
określając, kiedy należy zarejestrować wyświetlenie. Aby to zrobić, przed załadowaniem reklamy włącz GAMBannerView
dla ręcznych wyświetleń:
Swift
bannerView.enableManualImpressions = true
Objective-C
self.bannerView.enableManualImpressions = YES;
Gdy stwierdzisz, że reklama została zwrócona i jest widoczna na ekranie, możesz ręcznie wywołać wyświetlenie:
Swift
bannerView.recordImpression()
Objective-C
[self.bannerView recordImpression];
Zdarzenia w aplikacjach
Zdarzenia w aplikacjach umożliwiają tworzenie reklam, które mogą wysyłać komunikaty do kodu aplikacji. aplikacja może podejmować działania na podstawie tych komunikatów.
Możesz nasłuchiwać zdarzeń w aplikacji związanych z Ad Managerem za pomocą parametru GADAppEventDelegate
.
Zdarzenia te mogą wystąpić w dowolnym momencie cyklu życia reklamy, nawet przed wywołaniem metody GADBannerViewDelegate
obiektu bannerViewDidReceiveAd:
.
Swift
// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.
// Called when the banner receives an app event.
optional public func bannerView(_ banner: GAMBannerView,
didReceiveAppEvent name: String, withInfo info: String?)
Objective-C
// Implement your app event within this method. The delegate will be
// notified when the SDK receives an app event message from the ad.
@optional
// Called when the banner receives an app event.
- (void)bannerView:(GAMBannerView *)banner
didReceiveAppEvent:(NSString *)name
withInfo:(NSString *)info;
Metody zdarzeń w aplikacji można wdrożyć w kontrolerze widoku:
Swift
import GoogleMobileAds
class ViewController: UIViewController, GADAppEventDelegate {}
Objective-C
@import GoogleMobileAds;
@interface ViewController : UIViewController <GADAppEventDelegate> {}
@end
Pamiętaj, aby ustawić przedstawiciela za pomocą właściwości appEventDelegate
przed wykonaniem
żądania reklamy.
Swift
bannerView.appEventDelegate = self
Objective-C
self.bannerView.appEventDelegate = self;
Oto przykład, który pokazuje, jak zmienić kolor tła aplikacji przez Określanie koloru za pomocą zdarzenia w aplikacji:
Swift
func bannerView(_ banner: GAMBannerView, didReceiveAppEvent name: String,
withInfo info: String?) {
if name == "color" {
guard let info = info else { return }
switch info {
case "green":
// Set background color to green.
view.backgroundColor = UIColor.green
case "blue":
// Set background color to blue.
view.backgroundColor = UIColor.blue
default:
// Set background color to black.
view.backgroundColor = UIColor.black
}
}
}
Objective-C
- (void)bannerView:(GAMBannerView *)banner
didReceiveAppEvent:(NSString *)name
withInfo:(NSString *)info {
if ([name isEqual:@"color"]) {
if ([info isEqual:@"green"]) {
// Set background color to green.
self.view.backgroundColor = [UIColor greenColor];
} else if ([info isEqual:@"blue"]) {
// Set background color to blue.
self.view.backgroundColor = [UIColor blueColor];
} else {
// Set background color to black.
self.view.backgroundColor = [UIColor blackColor];
}
}
}
A oto odpowiednia kreacja wysyłająca komunikaty o zdarzeniach w aplikacji kolorowych do
appEventDelegate
:
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
Aby zobaczyć przykład implementacji zdarzeń w aplikacjach w aplikacji demonstracyjnej iOS API, zapoznaj się z artykułem Zdarzenia w aplikacji w Ad Managerze – przykład.
Dodatkowe materiały
Przykłady w GitHubie
- Przykład zakotwiczonych banerów adaptacyjnych: Swift | SwiftUI | Objective-C
- Prezentacja funkcji zaawansowanych: Swift | Objective-C
Dalsze kroki
Banery zwijane
Banery zwijane to banery reklamowe, które początkowo wyświetlają się jako większe nakładki z przyciskiem umożliwiającym zwijanie reklamy do mniejszego rozmiaru. Możesz go użyć, aby jeszcze bardziej zoptymalizować skuteczność. Więcej informacji znajdziesz w artykule o zwijanych banerach reklamowych.
Wbudowane banery adaptacyjne
Śródtekstowe banery adaptacyjne są większe i wyższe niż zakotwiczone banery adaptacyjne. banerów. Mają zmienną wysokość i równą wysokość ekranu urządzenia. W przypadku aplikacji, które umieszczają banery reklamowe w treściach, które można przewijać, zalecamy stosowanie banerów śródtekstowych zamiast zakotwiczonych banerów adaptacyjnych. Zobacz Wbudowane reklamy adaptacyjne banerów .