Reklamy pełnoekranowe

Reklamy pełnoekranowe zakrywają interfejs aplikacji do czasu, gdy użytkownik je zamknie. Zwykle wyświetlają się w naturalnych momentach przejściowych w aplikacji, np. między działaniami lub podczas przerwy między poziomami w grze. Gdy aplikacja wyświetla reklamę pełnoekranową, użytkownik może ją kliknąć i przejść do miejsca docelowego, lub ją zamknąć i wrócić do aplikacji.

Z tego przewodnika dowiesz się, jak zintegrować reklamy pełnoekranowe z aplikacją na iOS.

Wymagania wstępne

Zawsze korzystaj z reklam testowych

Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie aktywnych reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.

Najprostszym sposobem wczytywania reklam testowych jest użycie dedykowanego identyfikatora testowej jednostki reklamowej w przypadku pełnoekranowych reklam na iOS:
/6499/example/interstitial

Został on specjalnie skonfigurowany tak, aby zwracał reklamy testowe w odpowiedzi na każde żądanie. Możesz go używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, by przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

Więcej informacji o działaniu reklam testowych z pakietu SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.

Implementacja

Najważniejsze czynności, jakie musisz wykonać, aby zintegrować reklamy pełnoekranowe:

  1. Wczytaj reklamę.
  2. Zarejestruj się na wywołania zwrotne
  3. Wyświetlać reklamę i obsługiwać zdarzenie nagrody.

Wczytaj reklamę

Wczytywanie reklamy odbywa się za pomocą statycznej metody loadWithAdManagerAdUnitID:request:completionHandler: w klasie GAMInterstitialAd. Metoda wczytywania wymaga identyfikatora jednostki reklamowej, obiektu GAMRequest oraz modułu obsługi uzupełniania, który jest wywoływany w przypadku powodzenia lub niepowodzenia wczytywania reklamy. Wczytywany obiekt GAMInterstitialAd jest udostępniany jako parametr w module obsługi zakończenia. Poniższy przykład pokazuje, jak wczytać GAMInterstitialAd w klasie ViewController.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

Zarejestruj się na wywołania zwrotne

Aby otrzymywać powiadomienia o zdarzeniach związanych z prezentacją, musisz wdrożyć protokół GADFullScreenContentDelegate i przypisać go do właściwości fullScreenContentDelegate zwróconej reklamy. Protokół GADFullScreenContentDelegate obsługuje wywołania zwrotne w przypadku pomyślnego lub nieudanego przedstawienia reklamy oraz zamknięcia. Poniższy kod pokazuje, jak wdrożyć protokół i przypisać go do reklamy:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
      interstitial?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
  NSLog(@"Ad did dismiss full screen content.");
}

GAMInterstitialAd jest obiektem jednorazowym. Oznacza to, że raz wyświetlonej reklamy pełnoekranowej nie można wyświetlić jej ponownie. Sprawdzoną metodą jest wczytanie kolejnej reklamy pełnoekranowej w metodzie adDidDismissFullScreenContent: w GADFullScreenContentDelegate, tak aby następna reklama pełnoekranowa zaczęła się ładować natychmiast po zamknięciu poprzedniej.

Wyświetl reklamę

Reklamy pełnoekranowe powinny wyświetlać się przy naturalnych przerwach w korzystaniu z aplikacji. Dobrym przykładem są przejścia między poziomami gry lub po wykonaniu przez użytkownika zadania. Oto przykład, jak to zrobić w ramach jednej z metod działań w UIViewController:

Swift

@IBAction func doSomething(_ sender: Any) {
  guard let interstitial = interstitial else {
    return print("Ad wasn't ready.")
  }

  // The UIViewController parameter is an optional.
  interstitial.present(fromRootViewController: nil)
}

Objective-C

- (IBAction)doSomething:(id)sender {
  if (self.interstitial) {
    // The UIViewController parameter is nullable.
    [self.interstitial presentFromRootViewController:nil];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

Jeśli nie otrzymujesz żadnych reklam i pojawi się komunikat o błędzie „Request Error: No ads to view” (Błąd żądania: brak reklam do wyświetlenia), sprawdź, czy element zamówienia ma kreację kierowaną na odpowiedni rozmiar. Rozmiary reklam pełnoekranowych to 320 x 480 i 480 x 320 w przypadku telefonów oraz 1024 x 768 i 768 x 1024 w przypadku tabletów. Jeśli urządzenie nie jest wystarczająco duże, by zmieścić się w rozdzielczości 1024 x 768 lub 768 x 1024, zostanie z powrotem ustawiony rozmiar 320 x 480 lub 480 x 320.

Sprawdzone metody

Zastanów się, czy reklamy pełnoekranowe to odpowiedni typ reklamy do Twojej aplikacji.
Reklamy pełnoekranowe sprawdzają się najlepiej w aplikacjach z naturalnymi momentami przejściowymi. Takie zakończenie stanowi zakończenie zadania w aplikacji, np. udostępnienie obrazu czy ukończenie poziomu w grze. Ponieważ użytkownik oczekuje przerw w działaniu, łatwo jest wyświetlić reklamę pełnoekranową bez zakłócania wrażeń użytkownika. Zastanów się, w których momentach pracy w aplikacji będziesz wyświetlać reklamy pełnoekranowe i jak może na nie zareagować użytkownik.
Pamiętaj, aby wstrzymać działanie podczas wyświetlania reklamy pełnoekranowej.
Jest wiele różnych typów reklam pełnoekranowych: tekstowe, graficzne, wideo i inne. Ważne jest, by aplikacja, która wyświetla reklamę pełnoekranową, zawieszała wykorzystanie pewnych zasobów, by mogła je wykorzystać w aplikacji. Jeśli np. wywołujesz reklamę pełnoekranową, wstrzymaj odtwarzanie dźwięku generowane przez aplikację. Możesz wznowić odtwarzanie dźwięków w module obsługi zdarzeń adDidDismissFullScreenContent:, które jest wywoływane po zakończeniu interakcji użytkownika z reklamą. Rozważ też tymczasowe wstrzymanie wszelkich skomplikowanych zadań obliczeniowych (takich jak pętla gry) na czas wyświetlania reklamy. Dzięki temu użytkownik nie będzie widzieć wolnej i brakującej reakcji grafiki czy zacinania się filmów.
Zadbaj o odpowiedni czas wczytywania.
Reklamy pełnoekranowe muszą być wyświetlane w odpowiednim czasie, ale nie tylko w których przypadku użytkownik nie musi czekać, aż się załaduje. Jeśli wczytasz reklamę z wyprzedzeniem przed jej wyświetleniem, będziesz mieć pewność, że w Twojej aplikacji będzie się wyświetlać w pełni wczytana reklama pełnoekranowa, która będzie gotowa, gdy nadejdzie czas jej wyświetlenia.
Nie zasyp użytkowników reklamami.
Zwiększenie częstotliwości wyświetlania reklam pełnoekranowych w aplikacji może wydawać się świetnym sposobem na zwiększenie przychodów, ale może też pogorszyć wrażenia użytkowników i obniżyć współczynniki klikalności. Zadbaj o to, aby użytkownicy nie przeszkadzali im tak często, że nie będą mogli z niej korzystać.
Nie używaj wywołania zwrotnego ukończenia wczytywania do wyświetlania reklamy pełnoekranowej.
Może to negatywnie wpłynąć na wygodę użytkowników. Najpierw wczytaj reklamę przed wyświetleniem. Następnie sprawdź metodę canPresentFromRootViewController:error: w systemie GAMInterstitialAd, aby dowiedzieć się, czy jest gotowa do wyświetlania.

Przykłady na GitHubie

Dalsze kroki