Реклама в режиме «картинка в картинке» (PiP) отображается в плавающем окне, которое остается поверх контента на экране, например, статей, лент новостей или игрового процесса. Этот формат позволяет пользователям взаимодействовать с вашим приложением, пока реклама остается видимой. Чтобы показывать рекламу, которая не занимает весь экран, выберите этот формат.
В этом руководстве рассматривается запрос и отображение рекламных объявлений в режиме «картинка в картинке» в вашем приложении с использованием GMA Next-Gen SDK .
Прежде чем начать
Прежде чем продолжить, выполните следующие действия:
Установите GMA Next-Gen SDK версии
1.4.0или более поздней.Включите тестовые объявления и используйте следующий идентификатор тестового рекламного блока:
/21775744923/example/picture-in-picture
Загрузить рекламу
Чтобы загрузить рекламное объявление PictureInPictureAd , создайте запрос на загрузку объявления и вызовите метод load :
Котлин
Java
Замените AD_UNIT_ID на идентификатор вашего рекламного блока.
Показать рекламу
Чтобы отобразить рекламное объявление в режиме «картинка в картинке» на экране, настройте параметры этого режима и вызовите метод show . В следующем примере устанавливается положение объявления по умолчанию и область отображения на экране:
Котлин
private fun showPictureInPictureAd(activity: Activity) { // Capture the ad reference saved from the onAdLoaded callback. val ad = pipAd if (ad != null) { val options = PictureInPictureAdOptions.Builder() // Uses the Google Mobile Ads SDK's default screen position. .setPosition(PictureInPictureAdPosition.DEFAULT) // Binds the ad lifecycle to the host screen. .setPresentationScope(PictureInPictureAdPresentationScope.SCREEN) .build() ad.show(activity, options) } else { Log.d(TAG, "No ad to show.") } }
Java
private void showPictureInPictureAd(@NonNull Activity activity) { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { PictureInPictureAdOptions options = new PictureInPictureAdOptions.Builder() // Uses the Google Mobile Ads SDK's default screen position. .setPosition(PictureInPictureAdPosition.DEFAULT) // Binds the ad lifecycle to the host screen. .setPresentationScope(PictureInPictureAdPresentationScope.SCREEN) .build(); pipAd.show(activity, options); } else { Log.d(TAG, "No ad to show."); } }
Установить положение
По умолчанию GMA Next-Gen SDK отображает рекламное объявление в режиме «картинка в картинке» в правом нижнем углу экрана при первом показе или в последнем известном месте, если объявление было показано ранее. Чтобы настроить местоположение объявления, задайте его в параметрах режима «картинка в картинке». В следующем примере местоположение объявления устанавливается поверх контента в левом верхнем углу экрана:
Котлин
private fun createTopLeftPositionOptions(): PictureInPictureAdOptions { return PictureInPictureAdOptions.Builder() // Sets the ad position to the top-left corner of the screen. .setPosition(PictureInPictureAdPosition.TOP_LEFT) .build() }
Java
private PictureInPictureAdOptions createTopLeftPositionOptions() { return new PictureInPictureAdOptions.Builder() // Sets the ad position to the top-left corner of the screen. .setPosition(PictureInPictureAdPosition.TOP_LEFT) .build(); }
Список всех доступных вакансий смотрите на PictureInPictureAdPosition .
Установите область презентации
По умолчанию GMA Next-Gen SDK привязывает рекламное объявление в режиме «картинка в картинке» к текущему основному экрану. GMA Next-Gen SDK закрывает объявление, когда иерархия представлений основного экрана больше не находится в памяти. Чтобы объявление оставалось видимым после завершения жизненного цикла основного экрана, установите область отображения в соответствии с приложением:
Котлин
private fun createApplicationScopedOptions(): PictureInPictureAdOptions { return PictureInPictureAdOptions.Builder() // Keeps the ad visible beyond the host screen's lifecycle. .setPresentationScope(PictureInPictureAdPresentationScope.APPLICATION) .build() }
Java
private PictureInPictureAdOptions createApplicationScopedOptions() { return new PictureInPictureAdOptions.Builder() // Keeps the ad visible beyond the host screen's lifecycle. .setPresentationScope(PictureInPictureAdPresentationScope.APPLICATION) .build(); }
Для получения дополнительной информации о том, как обеспечить видимость рекламы на разных экранах, см. раздел «Обеспечение видимости рекламы на разных экранах» .
Настройте функцию обратного вызова для события показа рекламы.
Для обработки событий жизненного цикла объявления в режиме «картинка в картинке» установите обратный вызов события для вашего объявления перед его отображением. Этот обратный вызов сообщает о стандартных событиях, таких как клики и показы. Этот обратный вызов также сообщает о событиях, специфичных для режима «картинка в картинке», например, когда объявление отображается или скрывается:
Котлин
private fun setAdEventCallback(pipAd: PictureInPictureAd) { pipAd.adEventCallback = object : PictureInPictureAdEventCallback { override fun onAdShown() { Log.d(TAG, "Picture-in-Picture ad shown.") } override fun onAdHidden() { Log.d(TAG, "Picture-in-Picture ad hidden.") } override fun onAdImpression() { Log.d(TAG, "Picture-in-Picture ad recorded an impression.") } override fun onAdClicked() { Log.d(TAG, "Picture-in-Picture ad recorded a click.") } override fun onAdShowedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad showed full screen content.") } override fun onAdDismissedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad dismissed full screen content.") } override fun onAdFailedToShowFullScreenContent( fullScreenContentError: FullScreenContentError ) { Log.w( TAG, "Picture-in-Picture ad failed to show full screen content: $fullScreenContentError", ) } override fun onAdPaid(value: AdValue) { Log.d(TAG, "Picture-in-Picture ad paid: ${value.valueMicros} ${value.currencyCode}") } } }
Java
private void setAdEventCallback(@NonNull PictureInPictureAd pipAd) { pipAd.setAdEventCallback( new PictureInPictureAdEventCallback() { @Override public void onAdShown() { Log.d(TAG, "Picture-in-Picture ad shown."); } @Override public void onAdHidden() { Log.d(TAG, "Picture-in-Picture ad hidden."); } @Override public void onAdImpression() { Log.d(TAG, "Picture-in-Picture ad recorded an impression."); } @Override public void onAdClicked() { Log.d(TAG, "Picture-in-Picture ad recorded a click."); } @Override public void onAdShowedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad showed full screen content."); } @Override public void onAdDismissedFullScreenContent() { Log.d(TAG, "Picture-in-Picture ad dismissed full screen content."); } @Override public void onAdFailedToShowFullScreenContent( @NonNull FullScreenContentError fullScreenContentError) { Log.w( TAG, "Picture-in-Picture ad failed to show full screen content: " + fullScreenContentError); } @Override public void onAdPaid(@NonNull AdValue value) { Log.d( TAG, "Picture-in-Picture ad paid: " + value.getValueMicros() + " " + value.getCurrencyCode()); } }); }
Скрыть рекламу
Чтобы убрать плавающую рекламу с экрана, вызовите метод hide . Этот метод вызывает функцию обратного вызова события скрытия рекламы:
Котлин
private fun hidePictureInPictureAd() { // Capture the ad reference saved from the onAdLoaded callback. val ad = pipAd if (ad != null) { ad.hide() } else { Log.d(TAG, "No ad to hide.") } }
Java
private void hidePictureInPictureAd() { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { pipAd.hide(); } else { Log.d(TAG, "No ad to hide."); } }
Очистка рекламных ресурсов
Во избежание утечек памяти удаляйте ссылку на объект рекламы, когда ваше приложение закончит использовать рекламу. Например, когда ваше приложение больше не отображает рекламу и не взаимодействует с ней. Для рекламы, ограниченной экраном, удаляйте ссылку, когда ваше приложение удаляет основной экран из памяти. Для рекламы, ограниченной приложением, сохраняйте ссылку на рекламу, пока пользователь перемещается между экранами, и удаляйте ссылку, когда пользователь закрывает рекламу.
Котлин
private fun cleanUpPictureInPictureAd() { pipAd?.destroy() pipAd = null }
Java
private void cleanUpPictureInPictureAd() { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { pipAd.destroy(); pipAd = null; } }
Обеспечьте видимость рекламы на всех экранах.
Если вы установите область отображения на приложение, реклама в режиме «картинка в картинке» останется видимой даже после удаления основного экрана из памяти. Для взаимодействия с рекламой или её закрытия при переходе пользователя с основного экрана, ваше приложение должно сохранять доступ к рекламе в режиме «картинка в картинке». Мы рекомендуем хранить рекламу в синглтоне на уровне приложения или в общем менеджере состояний, а не в переменной экземпляра отдельного экрана.
Пример того, как обеспечить видимость рекламы на разных экранах, можно посмотреть в нашем демонстрационном приложении: