Объявления с вознаграждением (устаревший API)

Предпосылки

Создайте рекламный объект с вознаграждением

Объявления с вознаграждением запрашиваются и отображаются объектами 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() описывает, почему адаптер не готов обслуживать запросы объявлений.