Предпосылки
- Google Mobile Ads SDK 17.2.0 или более поздней версии.
- Следуйте руководству по началу работы, чтобы импортировать Google Mobile Ads SDK и обновить манифест Android.
Создайте рекламный объект с вознаграждением
Объявления с вознаграждением запрашиваются и отображаются объектами RewardedAd
. Первый шаг — создание экземпляра RewardedAd
. Это делается в onCreate()
Activity
в следующем фрагменте кода:
Джава
import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... rewardedAd = new RewardedAd(this, "ca-app-pub-3940256099942544/5224354917"); } }
Котлин
import com.google.android.gms.ads.rewarded.RewardedAd class MainActivity : Activity() { private lateinit var rewardedAd: RewardedAd override fun onCreate(savedInstanceState:Bundle) { ... rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917") } }
Конструктор требует следующие аргументы:
- Контекст
Activity
- Идентификатор рекламного блока , который будет использоваться для загрузки рекламы с вознаграждением.
Всегда тестируйте тестовые объявления
При создании и тестировании своих приложений убедитесь, что вы используете тестовую рекламу, а не живую производственную рекламу. Невыполнение этого требования может привести к приостановке действия вашей учетной записи.
Самый простой способ загрузить тестовые объявления — использовать наш специальный идентификатор тестового рекламного блока для объявлений с вознаграждением для Android:
ca-app-pub-3940256099942544/5224354917
Он был специально настроен для возврата тестовых объявлений для каждого запроса, и вы можете использовать его в своих собственных приложениях при написании кода, тестировании и отладке. Просто убедитесь, что вы заменили его собственным идентификатором рекламного блока, прежде чем публиковать свое приложение.
Дополнительные сведения о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .
Загрузить объявление
Чтобы загрузить рекламу с вознаграждением, вызовите метод loadAd()
объекта RewardedAd
. Для этого метода в качестве аргументов требуются экземпляры AdRequest
и RewardedAdLoadCallback
.
Джава
import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... rewardedAd = new RewardedAd(this, "ca-app-pub-3940256099942544/5224354917"); RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() { @Override public void onRewardedAdLoaded() { // Ad successfully loaded. } @Override public void onRewardedAdFailedToLoad(LoadAdError adError) { // Ad failed to load. } }; rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback); } }
Котлин
import com.google.android.gms.ads.rewarded.RewardedAd class MainActivity : Activity() { private lateinit var rewardedAd: RewardedAd override fun onCreate(savedInstanceState:Bundle) { rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917") val adLoadCallback = object: RewardedAdLoadCallback() { fun onRewardedAdLoaded() { // Ad successfully loaded. } fun onRewardedAdFailedToLoad(adError: LoadAdError) { // Ad failed to load. } } rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback) } }
onRewardedAdLoaded()
и onRewardedAdFailedToLoad()
функции RewardedAdLoadCallback
предоставляют результат операции загрузки рекламы.
Переопределяемые методы | |
---|---|
onRewardedAdLoaded() | Этот метод выполняется после завершения загрузки объявления. |
onRewardedAdFailedToLoad() | Этот метод вызывается, когда объявление не загружается. Он включает параметр ошибки типа LoadAdError , указывающий тип произошедшей ошибки. Дополнительные сведения см. в документации по отладке ошибок загрузки объявлений . |
Показать объявление
Прежде чем показывать пользователям рекламу с вознаграждением, вы должны предоставить пользователю явный выбор для просмотра содержания рекламы с вознаграждением в обмен на вознаграждение. Объявления с вознаграждением всегда должны предоставляться по подписке.
Чтобы показать RewardedAd
, используйте метод isLoaded()
, чтобы убедиться, что загрузка завершена, а затем вызовите show()
. Метод show()
требует наличия экземпляров Activity
и RewardedAdCallback
в качестве аргументов. Экземпляр Activity
должен быть действием, из которого представлена реклама с вознаграждением.
Объявление с вознаграждением из предыдущего примера кода может отображаться в OnClickListener
кнопки следующим образом:
Джава
myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (rewardedAd.isLoaded()) { Activity activityContext = MainActivity.this RewardedAdCallback adCallback = new RewardedAdCallback() { @Override public void onRewardedAdOpened() { // Ad opened. } @Override public void onRewardedAdClosed() { // Ad closed. } @Override public void onUserEarnedReward(@NonNull RewardItem reward) { // User earned reward. } @Override public void onRewardedAdFailedToShow(AdError adError) { // Ad failed to display. } }; rewardedAd.show(activityContext, adCallback); } else { Log.d("TAG", "The rewarded ad wasn't loaded yet."); } } });
Котлин
myButton.setOnClickListener { if (rewardedAd.isLoaded) { val activityContext: Activity = this@MainActivity val adCallback = object: RewardedAdCallback() { override fun onRewardedAdOpened() { // Ad opened. } override fun onRewardedAdClosed() { // Ad closed. } override fun onUserEarnedReward(@NonNull reward: RewardItem) { // User earned reward. } override fun onRewardedAdFailedToShow(adError: AdError) { // Ad failed to display. } } rewardedAd.show(activityContext, adCallback) } else { Log.d("TAG", "The rewarded ad wasn't loaded yet.") } }
Получать уведомления о рекламных событиях
RewardedAdCallback
, предоставленный методу show()
, получает уведомления о рекламных событиях с вознаграждением. Каждый из переопределяемых методов в RewardedAdCallback
соответствует событию в жизненном цикле объявления с вознаграждением. Например, метод onUserEarnedReward()
— идеальное место для предоставления вознаграждения пользователю. Дополнительные сведения о каждом методе рекламного события приведены ниже.
Переопределяемые методы | |
---|---|
onRewardedAdOpened() | Этот метод вызывается, когда реклама отображается на экране устройства. |
onRewardedAdClosed() | Этот метод вызывается, когда объявление с вознаграждением закрывается из-за того, что пользователь нажимает значок закрытия или использует кнопку «Назад». Если ваше приложение приостановило вывод звука или игровой цикл, это отличное место, чтобы возобновить его. |
onUserEarnedReward() | Метод вызывается, когда пользователь должен получить вознаграждение за взаимодействие с рекламой. Доступ к сведениям о вознаграждении, настроенным для вашего рекламного блока, можно получить с помощью getType() и getAmount() параметра RewardItem . |
onRewardedAdFailedToShow() | Этот метод вызывается, когда объявление не отображается. Он включает параметр adError , указывающий тип произошедшей ошибки. Возможные значения кода ошибки ( adError.getCode() ) определяются как константы в классе RewardedAdCallback . |
Использование RewardedAdCallback для предварительной загрузки следующего объявления с вознаграждением
RewardedAd
— это одноразовый объект. Это означает, что после показа объявления с вознаграждением объект нельзя использовать для загрузки другого объявления. Чтобы запросить другую рекламу с вознаграждением, вам нужно создать новый объект RewardedAd
.
Лучшей практикой является загрузка другого объявления с вознаграждением в onRewardedAdClosed()
для RewardedAdCallback
, чтобы следующее объявление с вознаграждением начинало загружаться сразу после закрытия предыдущего:
Джава
public RewardedAd createAndLoadRewardedAd() { RewardedAd rewardedAd = new RewardedAd(this, "ca-app-pub-3940256099942544/5224354917"); RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() { @Override public void onRewardedAdLoaded() { // Ad successfully loaded. } @Override public void onRewardedAdFailedToLoad(LoadAdError adError) { // Ad failed to load. } }; rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback); return rewardedAd; } @Override public void onRewardedAdClosed() { this.rewardedAd = createAndLoadRewardedAd(); }
Котлин
fun createAndLoadRewardedAd(): RewardedAd { val rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917") val adLoadCallback = object: RewardedAdLoadCallback() { override fun onRewardedAdLoaded() { // Ad successfully loaded. } override fun onRewardedAdFailedToLoad(adError: LoadAdError) { // Ad failed to load. } } rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback) return rewardedAd } fun onRewardedAdClosed() { this.rewardedAd = createAndLoadRewardedAd() }
Загрузка нескольких объявлений с вознаграждением
Чтобы загрузить несколько объявлений с вознаграждением, выполните шаги, описанные в разделе « Создание объекта объявления с вознаграждением » и загрузите разделы объявлений для каждого объявления, которое вы собираетесь загрузить. Фрагмент кода ниже демонстрирует, как загрузить два объявления с вознаграждением для двух разных мест размещения.
Джава
package ... import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd gameOverRewardedAd; private RewardedAd extraCoinsRewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... gameOverRewardedAd = createAndLoadRewardedAd( "ca-app-pub-3940256099942544/5224354917"); extraCoinsRewardedAd = createAndLoadRewardedAd( "ca-app-pub-3940256099942544/5224354917"); } public RewardedAd createAndLoadRewardedAd(String adUnitId) { RewardedAd rewardedAd = new RewardedAd(this, adUnitId); RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() { @Override public void onRewardedAdLoaded() { // Ad successfully loaded. } @Override public void onRewardedAdFailedToLoad(LoadAdError adError) { // Ad failed to load. } }; rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback); return rewardedAd; } }
Котлин
import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.rewarded.RewardedAd class MainActivity: Activity() { private lateinit var gameOverRewardedAd: RewardedAd private lateinit var extraCoinsRewardedAd: RewardedAd override fun onCreate(savedInstanceState:Bundle) { ... gameOverRewardedAd = createAndLoadRewardedAd( "ca-app-pub-3940256099942544/5224354917") extraCoinsRewardedAd = createAndLoadRewardedAd( "ca-app-pub-3940256099942544/5224354917") } fun createAndLoadRewardedAd(adUnitId:String): RewardedAd { val rewardedAd = RewardedAd(this, adUnitId) val adLoadCallback = object: RewardedAdLoadCallback() { override fun onRewardedAdLoaded() { // Ad successfully loaded. } override fun onRewardedAdFailedToLoad(adError: LoadAdError) { // Ad failed to load. } } rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback) return rewardedAd } }
Вопросы-Ответы
- Могу ли я получить информацию о вознаграждении за
RewardedAd
? - Да, если вам нужна сумма вознаграждения до того, как будет запущен обратный вызов
onUserEarnedReward()
, уRewardedAd
есть методgetRewardItem()
, который вы можете проверить, чтобы проверить сумму вознаграждения после загрузки объявления. - Есть ли тайм-аут для вызова инициализации?
- Через 10 секунд SDK Google Mobile Ads вызывает
OnInitializationCompleteListener
, даже если сеть агрегатора еще не завершила инициализацию. - Что делать, если некоторые сети агрегатора не готовы, когда я получаю обратный вызов инициализации?
Рекомендуется загружать рекламу внутри обратного вызова
OnInitializationCompleteListener
. Даже если сеть посредничества не готова, SDK Google Mobile Ads по-прежнему будет запрашивать у этой сети объявление. Таким образом, если сеть медиации завершает инициализацию по истечении тайм-аута, она все еще может обслуживать будущие запросы объявлений в этом сеансе.Вы можете продолжать опрашивать статус инициализации всех адаптеров на протяжении всего сеанса приложения, вызвав
MobileAds.getInitializationStatus()
.- Как узнать, почему конкретная сеть агрегатора не готова?
AdapterStatus.getDescription()
описывает, почему адаптер не готов обслуживать запросы объявлений.