Объявления типа "Картинка в картинке" показываются в плавающем окне, которое всегда находится поверх контента на экране, например статей, фидов или игрового процесса. Этот формат позволяет пользователям взаимодействовать с приложением, пока объявление остаётся видимым. Этот формат позволяет показывать объявления, которые не занимают весь экран.
В этом руководстве рассказывается, как запрашивать и показывать в приложении объявления в режиме "Картинка в картинке", используя GMA Next-Gen SDK.
Подготовка
Прежде чем продолжить, выполните следующие действия:
Установите версию GMA Next-Gen SDK
1.4.0или более позднюю.Включите тестовые объявления и используйте следующий идентификатор тестового рекламного блока:
/21775744923/example/picture-in-picture
Как загрузить объявление
Чтобы загрузить объект PictureInPictureAd, создайте запрос объявления и вызовите метод load:
Kotlin
Java
Замените AD_UNIT_ID идентификатором рекламного блока.
Показ объявления
Чтобы показать объявление в режиме "Картинка в картинке", настройте параметры этого режима и вызовите метод show. В следующем примере задается позиция объявления по умолчанию и область показа на экране:
Kotlin
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 показывает плавающее окно с объявлением в правом нижнем углу экрана при первом показе или в последнем известном положении, если оно уже показывалось. Чтобы настроить место показа объявления, задайте позицию в параметрах режима "Картинка в картинке". В следующем примере показано, как разместить элемент поверх контента в верхнем левом углу экрана:
Kotlin
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 отклоняет объявление, когда иерархия View экрана организатора больше не хранится в памяти. Чтобы объявление оставалось видимым после того, как экран хоста будет удален из памяти, задайте область показа на уровне приложения:
Kotlin
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(); }
Подробнее о том, как сделать объявление видимым на разных экранах…
Как задать обратный вызов события объявления
Чтобы обрабатывать события жизненного цикла рекламы в режиме "картинка в картинке", задайте обратный вызов события для объявления до его показа. Этот метод обратного вызова сообщает о стандартных событиях, таких как клики и показы. Этот обратный вызов также сообщает о событиях, связанных с режимом "Картинка в картинке", например о том, когда объявление показывается или скрывается:
Kotlin
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. Этот метод вызывает обратный вызов события скрытия объявления:
Kotlin
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."); } }
Как удалить рекламные ресурсы
Чтобы избежать утечек памяти, удалите ссылку на объект объявления, когда приложение перестанет его использовать. Например, когда ваше приложение перестает показывать объявление или взаимодействовать с ним. Для объявлений с областью действия на экране удалите ссылку, когда приложение удалит из памяти экран, на котором показывается объявление. Для объявлений, относящихся к приложению, сохраняйте ссылку на объявление, пока пользователь переходит между экранами, и удаляйте ссылку, когда пользователь закрывает объявление:
Kotlin
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; } }
Как сделать так, чтобы объявление было видно на разных экранах
Если задать в качестве области показа приложение, то реклама в режиме "картинка в картинке" будет видна, даже если приложение удалит из памяти экран, на котором она показывается. Чтобы пользователь мог взаимодействовать с объявлением или закрыть его, когда он переходит с основного экрана, приложению необходимо сохранить доступ к объявлению в режиме "Картинка в картинке". Мы рекомендуем хранить объявление в одноэлементном объекте на уровне приложения или в общем менеджере состояний, а не в переменной экземпляра одного экрана.
Примеры того, как обеспечить видимость объявления на разных экранах, можно найти в следующих приложениях: