Z nagrodą

Wybierz platformę: Android iOS Unity Flutter

Reklamy z nagrodą to reklamy, z którymi użytkownicy mogą wchodzić w interakcje w zamian za nagrody w aplikacji. Z tego przewodnika dowiesz się, jak zintegrować reklamy z nagrodą z AdMob w aplikacji Flutter.

Zawsze testuj za pomocą reklam testowych

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

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora testowej jednostki reklamowej w przypadku reklam z nagrodą:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Testowe jednostki reklamowe są skonfigurowane tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz ich używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić je własnymi identyfikatorami jednostek reklamowych.

Wczytywanie reklamy

Poniższy przykład pokazuje wczytywanie reklamy z nagrodą:

class RewardedExampleState extends State<RewardedExample> {
  RewardedAd? _rewardedAd;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/5224354917'
    : 'ca-app-pub-3940256099942544/1712485313';

  /// Loads a rewarded ad.
  void loadAd() {
    RewardedAd.load(
        adUnitId: adUnitId,
        request: const AdRequest(),
        adLoadCallback: RewardedAdLoadCallback(
          // Called when an ad is successfully received.
          onAdLoaded: (ad) {
            debugPrint('$ad loaded.');
            // Keep a reference to the ad so you can show it later.
            _rewardedAd = ad;
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (LoadAdError error) {
            debugPrint('RewardedAd failed to load: $error');
          },
        ));
  }
}

Zdarzenia związane z reklamami z nagrodą

Za pomocą FullScreenContentCallback możesz nasłuchiwać zdarzeń związanych z cyklem życia, np. wyświetlenia lub zamknięcia reklamy. Ustaw parametr RewardedAd.fullScreenContentCallback przed wyświetleniem reklamy, aby otrzymywać powiadomienia o tych zdarzeniach. W tym przykładzie zaimplementowano każdą metodę i zapisano w konsoli komunikat:

class RewardedExampleState extends State<RewardedExample> {
  RewardedAd? _rewardedAd;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/5224354917'
    : 'ca-app-pub-3940256099942544/1712485313';

  /// Loads a rewarded ad.
  void loadAd() {
    RewardedAd.load(
        adUnitId: adUnitId,
        request: const AdRequest(),
        adLoadCallback: RewardedAdLoadCallback(
          // Called when an ad is successfully received.
          onAdLoaded: (ad) {
            ad.fullScreenContentCallback = FullScreenContentCallback(
              // Called when the ad showed the full screen content.
              onAdShowedFullScreenContent: (ad) {},
              // Called when an impression occurs on the ad.
              onAdImpression: (ad) {},
              // Called when the ad failed to show full screen content.
              onAdFailedToShowFullScreenContent: (ad, err) {
                // Dispose the ad here to free resources.
                ad.dispose();
              },
              // Called when the ad dismissed full screen content.
              onAdDismissedFullScreenContent: (ad) {
                // Dispose the ad here to free resources.
                ad.dispose();
              },
              // Called when a click is recorded for an ad.
              onAdClicked: (ad) {});

            debugPrint('$ad loaded.');
            // Keep a reference to the ad so you can show it later.
            _rewardedAd = ad;
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (LoadAdError error) {
            debugPrint('RewardedAd failed to load: $error');
          },
        ));
  }
}

Reklama displayowa

RewardedAd jest wyświetlany jako nakładka na wszystkich treściach aplikacji i jest umieszczony statycznie, dlatego nie można go dodać do drzewa widżetów Fluttera. Możesz wybrać, kiedy chcesz wyświetlać reklamę, wywołując funkcję show(). RewardedAd.show() przyjmuje OnUserEarnedRewardCallback, który jest wywoływany, gdy użytkownik zdobędzie nagrodę. Pamiętaj, aby wdrożyć tę funkcję i nagradzać użytkowników za oglądanie reklam.

_rewardedAd.show(onUserEarnedReward: (AdWithoutView ad, RewardItem rewardItem) {
  // Reward the user for watching an ad.
});

Po wywołaniu funkcji show() reklamy Ad wyświetlane w ten sposób nie można usunąć programowo i wymaga ona interakcji użytkownika. RewardedAd może być wyświetlany tylko raz. Kolejne wywołania funkcji show spowodują wywołanie funkcji onAdFailedToShowFullScreenContent.

Reklamę należy usunąć, gdy dostęp do niej nie jest już potrzebny. Sprawdzona metoda dotycząca wywoływania funkcji dispose() polega na używaniu wywołań zwrotnych FullScreenContentCallback.onAdDismissedFullScreenContentFullScreenContentCallback.onAdFailedToShowFullScreenContent.

Znakomicie. Aplikacja jest teraz gotowa do wyświetlania reklam z nagrodą.

Pełny przykład w GitHubie

Reklama z nagrodą