Предпосылки
- Google Mobile Ads SDK 19.7.0 или более поздней версии.
- Следуйте руководству по началу работы, чтобы импортировать Google Mobile Ads SDK и обновить манифест Android.
Всегда тестируйте тестовые объявления
При создании и тестировании своих приложений убедитесь, что вы используете тестовую рекламу, а не живую производственную рекламу. Невыполнение этого требования может привести к приостановке действия вашей учетной записи.
Самый простой способ загрузить тестовые объявления — использовать наш специальный идентификатор тестового рекламного блока для объявлений с вознаграждением для Android:
ca-app-pub-3940256099942544/5224354917
Он был специально настроен для возврата тестовых объявлений для каждого запроса, и вы можете использовать его в своих собственных приложениях при написании кода, тестировании и отладке. Просто убедитесь, что вы заменили его собственным идентификатором рекламного блока, прежде чем публиковать свое приложение.
Дополнительные сведения о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .
Загрузить рекламный объект с вознаграждением
Объявления с вознаграждением загружаются путем вызова метода static load()
класса RewardedAd
и передачи RewardedAdLoadCallback
. Обычно это делается в onCreate()
Activity
. Обратите внимание, что, как и другие обратные вызовы загрузки формата, RewardedAdLoadCallback
использует LoadAdError
для предоставления более точных сведений об ошибках.
Джава
import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd mRewardedAd; private final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { AdRequest adRequest = new AdRequest.Builder().build(); RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917", adRequest, new RewardedAdLoadCallback() { @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { // Handle the error. Log.d(TAG, loadAdError.toString()); mRewardedAd = null; } @Override public void onAdLoaded(@NonNull RewardedAd rewardedAd) { mRewardedAd = rewardedAd; Log.d(TAG, "Ad was loaded."); } }); } }
Котлин
class MainActivity : AppCompatActivity() { private var mRewardedAd: RewardedAd? = null private final var TAG = "MainActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var adRequest = AdRequest.Builder().build() RewardedAd.load(this,"ca-app-pub-3940256099942544/5224354917", adRequest, object : RewardedAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) mRewardedAd = null } override fun onAdLoaded(rewardedAd: RewardedAd) { Log.d(TAG, "Ad was loaded.") mRewardedAd = rewardedAd } }) } }
Установите FullScreenContentCallback
FullScreenContentCallback
обрабатывает события, связанные с отображением вашего RewardedAd
. Прежде чем показывать RewardedAd
, обязательно установите обратный вызов следующим образом:
Джава
mRewardedAd.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."); mRewardedAd = null; } @Override public void onAdFailedToShowFullScreenContent(AdError adError) { // Called when ad fails to show. Log.e(TAG, "Ad failed to show fullscreen content."); mRewardedAd = 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."); } });
Котлин
mRewardedAd?.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.") mRewardedAd = null } override fun onAdFailedToShowFullScreenContent(adError: AdError?) { // Called when ad fails to show. Log.e(TAG, "Ad failed to show fullscreen content.") mRewardedAd = 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.") } }
Показать объявление
Когда вы показываете рекламу с вознаграждением, вы будете использовать объект OnUserEarnedRewardListener
для обработки событий вознаграждения.
Джава
if (mRewardedAd != null) { Activity activityContext = MainActivity.this; mRewardedAd.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."); }
Котлин
if (mRewardedAd != null) { mRewardedAd?.show(this, OnUserEarnedRewardListener() { fun onUserEarnedReward(rewardItem: RewardItem) { var rewardAmount = rewardItem.amount var rewardType = rewardItem.type Log.d(TAG, "User earned the reward.") } }) } else { Log.d(TAG, "The rewarded ad wasn't ready yet.") }
Вопросы-Ответы
- Есть ли тайм-аут для вызова инициализации?
- Через 10 секунд SDK Google Mobile Ads вызывает
OnInitializationCompleteListener
, даже если сеть агрегатора еще не завершила инициализацию. - Что делать, если некоторые сети агрегатора не готовы, когда я получаю обратный вызов инициализации?
Рекомендуется загружать рекламу внутри обратного вызова
OnInitializationCompleteListener
. Даже если сеть посредничества не готова, SDK Google Mobile Ads по-прежнему будет запрашивать у этой сети объявление. Таким образом, если сеть медиации завершает инициализацию по истечении тайм-аута, она все еще может обслуживать будущие запросы объявлений в этом сеансе.Вы можете продолжать опрашивать статус инициализации всех адаптеров на протяжении всего сеанса приложения, вызвав
MobileAds.getInitializationStatus()
.- Как узнать, почему конкретная сеть агрегатора не готова?
AdapterStatus.getDescription()
описывает, почему адаптер не готов обслуживать запросы объявлений.