Рекламите „картина в картината“ (PiP) се показват в плаващ прозорец, който остава върху съдържанието на екрана, като например статии, емисии или геймплей. Този формат позволява на потребителите да взаимодействат с приложението ви, докато рекламата остава видима. За да показвате реклами, които не заемат целия екран, изберете този формат. Научете повече за рекламите „картина в картината“ .
Това ръководство обхваща заявяването и показването на реклами „картина в картината“ във вашето приложение, използвайки GMA Next-Gen SDK .
Преди да започнете
Преди да продължите, направете следното:
Инсталирайте GMA Next-Gen SDK версия
1.4.0или по-нова.Enable test ads and use the following test ad unit ID:
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; } }
Поддържайте рекламата видима на всички екрани
Когато зададете обхвата на презентацията на приложението, рекламата „картина в картината“ остава видима, дори когато приложението ви премахне екрана на хоста от паметта. За да взаимодействате с рекламата или да я отхвърлите, когато потребителят напусне екрана на хоста, приложението ви трябва да запази достъп до рекламата „картина в картината“. Препоръчваме да държите рекламата в singleton на ниво приложение или в мениджър на споделено състояние, а не в променлива на екземпляр на един екран.
За пример как да поддържате реклама видима на всички екрани, вижте нашите примерни приложения: