Имплементирајте огласе „слика у слици“ (бета)

Слика у слици

Огласи „слика у слици“ (PiP) се приказују у плутајућем прозору који остаје изнад садржаја на екрану, као што су чланци, фидови или играње. Овај формат омогућава корисницима да интерагују са вашом апликацијом док оглас остаје видљив. Да бисте приказивали огласе који не заузимају цео екран, изаберите овај формат. Сазнајте више о огласима „слика у слици“ .

Овај водич покрива захтевање и приказивање огласа „слика у слици“ у вашој апликацији помоћу GMA Next-Gen SDK .

Пре него што почнете

Пре него што наставите, урадите следеће:

Учитај оглас

Да бисте учитали PictureInPictureAd , креирајте захтев за оглас и позовите метод load :

Котлин

private fun loadPictureInPictureAd() {
  val request = PictureInPictureAdRequest.Builder(AD_UNIT_ID).build()

  PictureInPictureAd.load(
    request,
    object : AdLoadCallback<PictureInPictureAd> {
      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.w(TAG, "Picture-in-Picture ad failed to load: $adError")
      }

      override fun onAdLoaded(ad: PictureInPictureAd) {
        Log.d(TAG, "Picture-in-Picture ad loaded.")

        // Capture the PictureInPictureAd reference for later use.
        pipAd = ad
        setAdEventCallback(ad)
      }
    },
  )
}

Јава

private void loadPictureInPictureAd() {
  PictureInPictureAdRequest request = new PictureInPictureAdRequest.Builder(AD_UNIT_ID).build();

  PictureInPictureAd.load(
      request,
      new AdLoadCallback<PictureInPictureAd>() {
        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          Log.w(TAG, "Picture-in-Picture ad failed to load: " + adError);
        }

        @Override
        public void onAdLoaded(@NonNull PictureInPictureAd ad) {
          Log.d(TAG, "Picture-in-Picture ad loaded.");

          // Capture the PictureInPictureAd reference for later use.
          pipAd = ad;
          setAdEventCallback(ad);
        }
      });
}

Замените 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;
  }
}

Одржавајте оглас видљивим на свим екранима

Када подесите опсег презентације на апликацију, оглас „слика у слици“ остаје видљив чак и када ваша апликација уклони екран хоста из меморије. Да бисте интераговали са огласом или га одбацили када корисник напусти екран хоста, ваша апликација мора задржати приступ огласу „слика у слици“. Препоручујемо да оглас држите у синглтону на нивоу апликације или у дељеном менаџеру стања, а не у променљивој инстанце једног екрана.

За пример како да оглас буде видљив на свим екранима, погледајте наше примере апликација: