Реклама «картинка в картинці» (PiP) відображається у плаваючому вікні, яке залишається поверх контенту на екрані, такого як статті, стрічки чи ігровий процес. Цей формат дозволяє користувачам взаємодіяти з вашим додатком, поки реклама залишається видимою. Щоб показувати рекламу, яка не займає весь екран, виберіть цей формат. Дізнайтеся більше про рекламу «картинка в картинці» .
У цьому посібнику розглядається запит і показ реклами «картинка в картинці» у вашому додатку за допомогою GMA Next-Gen SDK .
Перш ніж почати
Перш ніж продовжити, виконайте такі дії:
Встановіть GMA Next-Gen SDK версії
1.4.0або пізнішої.Увімкніть тестові оголошення та використовуйте такий ідентифікатор тестового рекламного блоку:
ca-app-pub-3940256099942544/9657123429
Завантажити оголошення
Щоб завантажити PictureInPictureAd , створіть запит оголошення та викличте метод load :
Котлін
Ява
Замініть 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.") } }
Ява
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() }
Ява
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() }
Ява
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}") } } }
Ява
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 . Цей метод викликає зворотний виклик події ad hidden:
Котлін
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.") } }
Ява
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 }
Ява
private void cleanUpPictureInPictureAd() { // Use the ad reference saved from the onAdLoaded callback. if (pipAd != null) { pipAd.destroy(); pipAd = null; } }
Забезпечте видимість реклами на всіх екранах
Коли ви встановлюєте область видимості презентації для програми, реклама «картинка в картинці» залишається видимою, навіть коли ваша програма видаляє екран хоста з пам’яті. Щоб взаємодіяти з рекламою або закривати її, коли користувач залишає екран хоста, ваша програма повинна зберігати доступ до реклами «картинка в картинці». Ми рекомендуємо зберігати рекламу в одиночному об’єкті програми або в менеджері спільного стану, а не в змінній екземпляра окремого екрана.
Щоб переглянути приклад того, як забезпечити видимість реклами на всіх екранах, перегляньте наші зразки програм: