Объявления с вознаграждением – это реклама, с которой пользователи могут взаимодействовать в обмен на вознаграждение в приложении. В этом руководстве рассказывается, как добавить в приложение Flutter объявления с вознаграждением из AdMob.
Всегда тестируйте с помощью тестовых объявлений
При создании и тестировании приложений используйте тестовые объявления, а не реальные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовые объявления – использовать специальный идентификатор тестового рекламного блока для объявлений с вознаграждением:
Android
ca-app-pub-3940256099942544/5224354917
iOS
ca-app-pub-3940256099942544/1712485313
Тестовые рекламные блоки настроены так, чтобы возвращать тестовые объявления для каждого запроса. Вы можете использовать их в своих приложениях при написании кода, тестировании и отладке. Только не забудьте заменить их на собственные идентификаторы рекламных блоков перед публикацией приложения.
Как загрузить объявление
В следующем примере показано, как загрузить объявление с вознаграждением:
Вместо _adUnitId укажите идентификатор своего рекламного блока.
События объявлений с вознаграждением
С помощью FullScreenContentCallback можно отслеживать события жизненного цикла, например показ или закрытие объявления. Установите значение RewardedAd.fullScreenContentCallback до показа объявления, чтобы получать уведомления об этих событиях. В этом примере реализованы все методы и в консоль выводится сообщение:
ad.fullScreenContentCallback = FullScreenContentCallback(
onAdShowedFullScreenContent: (ad) {
// Called when the ad showed the full screen content.
debugPrint('Ad showed full screen content.');
},
onAdFailedToShowFullScreenContent: (ad, err) {
// Called when the ad failed to show full screen content.
debugPrint('Ad failed to show full screen content with error: $err');
// Dispose the ad here to free resources.
ad.dispose();
},
onAdDismissedFullScreenContent: (ad) {
// Called when the ad dismissed full screen content.
debugPrint('Ad was dismissed.');
// Dispose the ad here to free resources.
ad.dispose();
},
onAdImpression: (ad) {
// Called when an impression occurs on the ad.
debugPrint('Ad recorded an impression.');
},
onAdClicked: (ad) {
// Called when a click is recorded for an ad.
debugPrint('Ad was clicked.');
},
);
Медийное объявление
RewardedAd показывается в виде оверлея поверх всего контента приложения и статически размещается, поэтому его нельзя добавить в дерево виджетов Flutter. Вы можете выбрать, когда показывать рекламу, вызвав метод show().
RewardedAd.show() принимает OnUserEarnedRewardCallback, который вызывается, когда пользователь получает вознаграждение. Обязательно реализуйте эту функцию и вознаграждайте пользователей за просмотр рекламы.
_rewardedAd?.show(
onUserEarnedReward: (AdWithoutView ad, RewardItem rewardItem) {
debugPrint('Reward amount: ${rewardItem.amount}');
},
);
После вызова show() показанный таким образом Ad нельзя удалить программно, и для этого требуется ввод данных пользователем. RewardedAd можно показать только один раз. Последующие вызовы функции show будут запускать onAdFailedToShowFullScreenContent.
Объявление необходимо удалить, когда оно больше не нужно. Рекомендуется вызывать функцию dispose() в обратных вызовах FullScreenContentCallback.onAdDismissedFullScreenContent и FullScreenContentCallback.onAdFailedToShowFullScreenContent.
[Необязательно] Проверка обратных вызовов проверки на стороне сервера
Приложения, которым требуются дополнительные данные в обратных вызовах проверки на стороне сервера, должны использовать функцию специальных данных в объявлениях с вознаграждением. Любое строковое значение, заданное для объекта объявления с вознаграждением, передается в параметр запроса custom_data обратного вызова SSV. Если значение специальных данных не задано, значение параметра запроса custom_data не будет присутствовать в обратном вызове SSV.
В приведенном ниже фрагменте кода показано, как задать параметры SSV после загрузки объявления с вознаграждением:
Замените SAMPLE_CUSTOM_DATA_STRING собственными данными.
Полный пример на GitHub
Полный пример можно посмотреть в демоверсии API.