Reklamy z nagrodą

Reklamy z nagrodami umożliwiają nagradzanie użytkowników przedmiotami w aplikacji za interakcję z reklamami wideo, reklamami grywalnymi i ankietami.

Wymagania wstępne

Zawsze testuj reklamy za pomocą reklam testowych

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

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie dedykowanego identyfikatora jednostki reklamowej z nagrodą na Androida:

/21775744923/example/rewarded

Jest 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 własnym identyfikatorem jednostki reklamowej.

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

Wczytywanie obiektu reklamy z nagrodą

Reklamy z nagrodą są wczytywane przez wywołanie statycznej metody load() w klasie RewardedAd i przekazanie argumentu RewardedAdLoadCallback. Zwykle odbywa się to w metodie onCreate() obiektu Activity. Pamiętaj, że podobnie jak inne wywołania zwrotne wczytywania formatu RewardedAdLoadCallbackwykorzystuje LoadAdError, aby zapewnić większą dokładność informacji o błędach.

Java

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {
  private RewardedAd rewardedAd;
  private final String TAG = "MainActivity";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
    RewardedAd.load(this, "/21775744923/example/rewarded",
      adRequest, new RewardedAdLoadCallback() {
        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
          // Handle the error.
          Log.d(TAG, loadAdError.toString());
          rewardedAd = null;
        }

        @Override
        public void onAdLoaded(@NonNull RewardedAd ad) {
          rewardedAd = ad;
          Log.d(TAG, "Ad was loaded.");
        }
    });
  }
}

Kotlin

class MainActivity : AppCompatActivity() {

  private var rewardedAd: RewardedAd? = null
  private final var TAG = "MainActivity"

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var adRequest = AdManagerAdRequest.Builder().build()
    RewardedAd.load(this,"/21775744923/example/rewarded", adRequest, object : RewardedAdLoadCallback() {
      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.d(TAG, adError?.toString())
        rewardedAd = null
      }

      override fun onAdLoaded(ad: RewardedAd) {
        Log.d(TAG, "Ad was loaded.")
        rewardedAd = ad
       }
    })
  }
}

Ustaw FullScreenContentCallback

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

Java

rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
  @Override
  public void onAdClicked() {
    // Called when a click is recorded for an ad.
    Log.d(TAG, "Ad was clicked.");
  }

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

  @Override
  public void onAdFailedToShowFullScreenContent(AdError adError) {
    // Called when ad fails to show.
    Log.e(TAG, "Ad failed to show fullscreen content.");
    rewardedAd = null;
  }

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

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

Kotlin

rewardedAd?.fullScreenContentCallback = object: FullScreenContentCallback() {
  override fun onAdClicked() {
    // Called when a click is recorded for an ad.
    Log.d(TAG, "Ad was clicked.")
  }

  override fun onAdDismissedFullScreenContent() {
    // Called when ad is dismissed.
    // Set the ad reference to null so you don't show the ad a second time.
    Log.d(TAG, "Ad dismissed fullscreen content.")
    rewardedAd = null
  }

  override fun onAdFailedToShowFullScreenContent(adError: AdError?) {
    // Called when ad fails to show.
    Log.e(TAG, "Ad failed to show fullscreen content.")
    rewardedAd = null
  }

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

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

Wyświetlanie reklamy

Podczas wyświetlania reklamy z nagrodą używasz obiektu OnUserEarnedRewardListener do obsługi zdarzeń związanych z nagrodami.

Java

if (rewardedAd != null) {
  Activity activityContext = MainActivity.this;
  rewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
    @Override
    public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
      // Handle the reward.
      Log.d(TAG, "The user earned the reward.");
      int rewardAmount = rewardItem.getAmount();
      String rewardType = rewardItem.getType();
    }
  });
} else {
  Log.d(TAG, "The rewarded ad wasn't ready yet.");
}

Kotlin

rewardedAd?.let { ad ->
  ad.show(this, OnUserEarnedRewardListener { rewardItem ->
    // Handle the reward.
    val rewardAmount = rewardItem.amount
    val rewardType = rewardItem.type
    Log.d(TAG, "User earned the reward.")
  })
} ?: run {
  Log.d(TAG, "The rewarded ad wasn't ready yet.")
}

Najczęstsze pytania

Czy istnieje limit czasu dla wywołania inicjującego?
Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołujeOnInitializationCompleteListener, nawet jeśli zapośredniczająca sieć reklamowa nie ukończyła jeszcze inicjalizacji.
Co się stanie, jeśli niektóre sieci pośredniczące nie są gotowe, gdy otrzymam wywołanie zwrotne inicjalizowania?

Zalecamy wczytywanie reklamy w ramach wywołania zwrotnego 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ć kolejne żądania reklam w tej sesji.

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

Jak sprawdzić, dlaczego dana sieć pośrednicząca nie jest gotowa?

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

Czy funkcja onUserEarnedReward() jest zawsze wywoływana przed funkcją onAdDismissedFullScreenContent()?

W przypadku Google Ads wszystkie wywołania onUserEarnedReward() występują przed onAdDismissedFullScreenContent(). W przypadku reklam wyświetlanych za pomocą zapośredniczenia kolejność wywołań określa implementacja pakietu SDK zewnętrznej sieci reklamowej. W przypadku pakietów SDK sieci reklamowej, które udostępniają pojedynczy wywołanie zwrotne po zamknięciu z informacjami o nagrodzie, adapter pośredniczący wywołuje funkcję onUserEarnedReward() przed wywołaniem onAdDismissedFullScreenContent().

Przykłady w GitHub

Dalsze kroki

Zapoznaj się z tymi tematami: