Reklamy z nagrodą

Wybierz platformę: Android iOS Unity Flutter

Reklamy z nagrodą umożliwiają przekazywanie użytkownikom wirtualnych nagród w aplikacji w zamian za interakcje z reklamami wideo i reklamami demonstracyjnymi gier oraz za wypełnianie ankiet.

Wymagania wstępne

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 jednostki reklamowej testowej w przypadku reklam z nagrodą na Androida:

ca-app-pub-3940256099942544/5224354917

Został on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go identyfikatorem swojej jednostki reklamowej.

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

Wczytywanie obiektu reklamy z nagrodą

Reklamy z nagrodą są wczytywane przez wywołanie statycznej metody load() w klasie RewardedAd i przekazanie do niej obiektu RewardedAdLoadCallback. Zazwyczaj odbywa się to w metodzie onCreate() obiektu Activity. Zwróć uwagę, że podobnie jak w przypadku innych wywołań zwrotnych wczytywania formatu, funkcja RewardedAdLoadCallback korzysta z funkcji LoadAdError, aby dostarczać bardziej szczegółowe informacje o błędach.

Java

RewardedAd.load(
    this,
    "AD_UNIT_ID",
    new AdRequest.Builder().build(),
    new RewardedAdLoadCallback() {
      @Override
      public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
        Log.d(TAG, "Ad was loaded.");
        MainActivity.this.rewardedAd = rewardedAd;
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        Log.d(TAG, loadAdError.getMessage());
        rewardedAd = null;
      }
    });

Kotlin

RewardedAd.load(
  this,
  "AD_UNIT_ID",
  AdRequest.Builder().build(),
  object : RewardedAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedAd) {
      Log.d(TAG, "Ad was loaded.")
      rewardedAd = ad
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      Log.d(TAG, adError.message)
      rewardedAd = null
    }
  },
)

Zastąp AD_UNIT_ID identyfikatorem jednostki reklamowej.

Ustawianie FullScreenContentCallback

FullScreenContentCallback obsługuje zdarzenia związane z wyświetlaniem RewardedAd. Zanim wyświetlisz RewardedAd, ustaw wywołanie zwrotne w ten sposób:

Java

rewardedAd.setFullScreenContentCallback(
    new FullScreenContentCallback() {
      @Override
      public void onAdDismissedFullScreenContent() {
        // Called when fullscreen content is dismissed.
        Log.d(TAG, "Ad was dismissed.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        rewardedAd = null;
      }

      @Override
      public void onAdFailedToShowFullScreenContent(AdError adError) {
        // Called when fullscreen content failed to show.
        Log.d(TAG, "Ad failed to show.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        rewardedAd = null;
      }

      @Override
      public void onAdShowedFullScreenContent() {
        // Called when fullscreen content is shown.
        Log.d(TAG, "Ad showed fullscreen content.");
      }

      @Override
      public void onAdImpression() {
        // Called when an impression is recorded for an ad.
        Log.d(TAG, "Ad recorded an impression.");
      }

      @Override
      public void onAdClicked() {
        // Called when an ad is clicked.
        Log.d(TAG, "Ad was clicked.");
      }
    });

Kotlin

rewardedAd?.fullScreenContentCallback =
  object : FullScreenContentCallback() {
    override fun onAdDismissedFullScreenContent() {
      // Called when fullscreen content is dismissed.
      Log.d(TAG, "Ad was dismissed.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      rewardedAd = null
    }

    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
      // Called when fullscreen content failed to show.
      Log.d(TAG, "Ad failed to show.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      rewardedAd = null
    }

    override fun onAdShowedFullScreenContent() {
      // Called when fullscreen content is shown.
      Log.d(TAG, "Ad showed fullscreen content.")
    }

    override fun onAdImpression() {
      // Called when an impression is recorded for an ad.
      Log.d(TAG, "Ad recorded an impression.")
    }

    override fun onAdClicked() {
      // Called when an ad is clicked.
      Log.d(TAG, "Ad was clicked.")
    }
  }

Wyświetl reklamę

Gdy wyświetlasz reklamę z nagrodą, używasz obiektu OnUserEarnedRewardListener do obsługi zdarzeń związanych z nagrodą.

Java

rewardedAd.show(
    MainActivity.this,
    new OnUserEarnedRewardListener() {
      @Override
      public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
        Log.d(TAG, "User earned the reward.");
        // Handle the reward.
      }
    });

Kotlin

rewardedAd?.show(
  this,
  OnUserEarnedRewardListener { rewardItem ->
    Log.d(TAG, "User earned the reward.")
    // Handle the reward.
    val rewardAmount = rewardItem.amount
    val rewardType = rewardItem.type
  },
)

[Opcjonalnie] Weryfikowanie wywołań zwrotnych weryfikacji po stronie serwera

Aplikacje, które wymagają dodatkowych danych w wywołaniach zwrotnych weryfikacji po stronie serwera, powinny korzystać z funkcji danych niestandardowych w reklamach z nagrodą. Każda wartość ciągu znaków ustawiona w obiekcie reklamy z nagrodą jest przekazywana do parametru zapytania custom_data wywołania zwrotnego SSV. Jeśli nie ustawiono wartości danych niestandardowych, wartość parametru zapytania custom_data nie będzie obecna w wywołaniu zwrotnym SSV.

Poniższy przykładowy kod pokazuje, jak ustawić dane niestandardowe w obiekcie reklamy z nagrodą przed wysłaniem prośby o reklamę.

Java

RewardedAd.load(
    context,
    AD_UNIT_ID,
    new AdRequest.Builder().build(),
    new RewardedAdLoadCallback() {
      @Override
      public void onAdLoaded(RewardedAd ad) {
        rewardedAd = ad;
        ServerSideVerificationOptions options =
            new ServerSideVerificationOptions.Builder()
                .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
                .build();
        rewardedAd.setServerSideVerificationOptions(options);
      }
    });

Kotlin

RewardedAd.load(
  context,
  AD_UNIT_ID,
  AdRequest.Builder().build(),
  object : RewardedAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedAd) {
      rewardedAd = ad
      val options =
        ServerSideVerificationOptions.Builder().setCustomData("SAMPLE_CUSTOM_DATA_STRING").build()
      rewardedAd?.setServerSideVerificationOptions(options)
    }
  },
)

Zastąp SAMPLE_CUSTOM_DATA_STRING swoimi danymi niestandardowymi.

Jeśli chcesz ustawić niestandardowy ciąg znaków nagrody, musisz to zrobić przed wyświetleniem reklamy.

Najczęstsze pytania

Czy połączenie inicjujące ma limit czasu?
Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje metodę OnInitializationCompleteListener, nawet jeśli sieć zapośredniczenia nie zakończyła jeszcze inicjowania.
Co się stanie, jeśli niektóre sieci mediacji nie będą gotowe, gdy otrzymam wywołanie zwrotne inicjowania?

Zalecamy wczytywanie reklamy w wywołaniu zwrotnym funkcji OnInitializationCompleteListener. Nawet jeśli sieć zapośredniczenia nie jest gotowa, pakiet SDK do reklam mobilnych Google nadal wysyła do niej żądanie reklamy. Jeśli sieć zapośredniczenia zakończy inicjowanie po upływie limitu czasu, nadal może obsługiwać przyszłe żądania reklam w tej sesji.

Podczas sesji w aplikacji możesz nadal sprawdzać stan inicjowania wszystkich adapterów, wywołując funkcję MobileAds.getInitializationStatus().

Jak sprawdzić, dlaczego konkretna sieć zapośredniczenia nie jest gotowa?

AdapterStatus.getDescription() wyjaśnia, dlaczego adapter nie jest gotowy do obsługi żądań reklam.

Czy wywołanie zwrotne onUserEarnedReward() jest zawsze wywoływane przed wywołaniem zwrotnym onAdDismissedFullScreenContent()?

W przypadku reklam Google wszystkie onUserEarnedReward()połączenia są nawiązywane przedonAdDismissedFullScreenContent(). W przypadku reklam wyświetlanych w ramach zapośredniczenia kolejność wywołań zwrotnych zależy od wdrożenia pakietu SDK sieci reklamowej firmy zewnętrznej. W przypadku pakietów SDK sieci reklamowych, które udostępniają pojedyncze wywołanie zwrotne zamykania z informacjami o nagrodzie, adapter mediacji wywołuje onUserEarnedReward() przed onAdDismissedFullScreenContent().

Przykłady w GitHubie

Dalsze kroki

Zapoznaj się z tymi tematami: