Quảng cáo hình trong hình (PiP) xuất hiện trong một cửa sổ nổi luôn ở trên cùng của nội dung trên màn hình, chẳng hạn như bài viết, nguồn cấp dữ liệu hoặc trò chơi. Định dạng này cho phép người dùng tương tác với ứng dụng của bạn trong khi quảng cáo vẫn hiển thị. Để hiển thị quảng cáo hiển thị không chiếm toàn bộ màn hình, hãy chọn định dạng này.
Hướng dẫn này trình bày cách yêu cầu và hiển thị quảng cáo hình trong hình trong ứng dụng của bạn bằng GMA Next-Gen SDK.
Trước khi bắt đầu
Trước khi tiếp tục, hãy làm như sau:
Cài đặt GMA Next-Gen SDK phiên bản
1.4.0trở lên.
Bật quảng cáo thử nghiệm và sử dụng mã đơn vị quảng cáo thử nghiệm sau:
/21775744923/example/picture-in-picture
Tải một quảng cáo
Để tải một đối tượng
PictureInPictureAd, hãy tạo một yêu cầu quảng cáo và gọi phương thức tải:
Kotlin
Java
Thay thế AD_UNIT_ID bằng mã đơn vị quảng cáo của bạn.
Hiển thị quảng cáo
Để hiển thị quảng cáo trong hình trong hình trên màn hình, hãy gọi phương thức show. Ví dụ sau đây cho thấy quảng cáo ở vị trí mặc định và đặt phạm vi trình bày cho màn hình:
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."); } }
Đặt vị trí
Theo mặc định, GMA Next-Gen SDK sẽ hiển thị quảng cáo hình trong hình ở góc dưới cùng bên phải màn hình khi xuất hiện lần đầu hoặc ở vị trí đã biết gần đây nhất nếu xuất hiện trước đó. Để tuỳ chỉnh vị trí xuất hiện của quảng cáo, hãy chỉ định một vị trí khi hiển thị quảng cáo. Ví dụ sau đây đặt vị trí ở đầu nội dung ở góc trên cùng bên trái màn hình:
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(); }
Để biết tất cả các vị trí có sẵn, hãy xem PictureInPictureAdPosition.
Đặt phạm vi trình bày
Theo mặc định, GMA Next-Gen SDK liên kết quảng cáo trong hình trong hình với màn hình lưu trữ hiện tại. GMA Next-Gen SDK sẽ đóng quảng cáo khi hệ phân cấp view của màn hình lưu trữ không còn trong bộ nhớ. Để quảng cáo vẫn hiển thị sau khi màn hình lưu trữ bị xoá khỏi bộ nhớ, hãy đặt phạm vi trình bày cho ứng dụng:
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(); }
Để biết thêm thông tin, hãy xem bài viết Giữ cho quảng cáo luôn hiển thị trên các màn hình.
Theo dõi các sự kiện quảng cáo
Để xử lý các sự kiện trong vòng đời của quảng cáo ở chế độ hình trong hình, hãy đăng ký các sự kiện quảng cáo trước khi hiển thị quảng cáo. Các báo cáo Sự kiện này báo cáo lượt tương tác với quảng cáo, chẳng hạn như lượt nhấp và lượt hiển thị. Các sự kiện này cũng báo cáo các sự kiện dành riêng cho chế độ hình trong hình, chẳng hạn như khi quảng cáo hiển thị hoặc ẩn:
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()); } }); }
Ẩn quảng cáo
Để xoá quảng cáo nổi khỏi màn hình, hãy gọi phương thức ẩn. Phương thức này gọi sự kiện quảng cáo bị ẩn:
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."); } }
Xoá tài nguyên quảng cáo
Để tránh rò rỉ bộ nhớ, hãy bỏ tham chiếu đến đối tượng quảng cáo khi ứng dụng của bạn hoàn tất việc sử dụng quảng cáo. Ví dụ: khi ứng dụng của bạn không còn hiển thị hoặc tương tác với quảng cáo nữa. Đối với quảng cáo trong phạm vi màn hình, hãy bỏ tệp đối chiếu khi ứng dụng của bạn xoá màn hình lưu trữ khỏi bộ nhớ. Đối với quảng cáo trong phạm vi ứng dụng, hãy giữ lại tệp đối chiếu quảng cáo trong khi người dùng di chuyển giữa các màn hình và bỏ tệp đối chiếu khi người dùng đóng quảng cáo:
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; } }
Giữ cho quảng cáo luôn hiển thị trên các màn hình
Khi bạn đặt phạm vi trình bày cho ứng dụng, quảng cáo trong hình ảnh trong hình ảnh vẫn hiển thị ngay cả khi ứng dụng của bạn xoá màn hình lưu trữ khỏi bộ nhớ. Để tương tác hoặc đóng quảng cáo khi người dùng rời khỏi màn hình lưu trữ, ứng dụng của bạn phải giữ quyền truy cập vào quảng cáo trong hình trong hình. Bạn nên giữ quảng cáo trong một trình quản lý trạng thái chung hoặc singleton ở cấp ứng dụng thay vì trong biến thực thể của một màn hình.
Để xem ví dụ về cách giữ cho quảng cáo luôn hiển thị trên các màn hình, hãy xem các ứng dụng mẫu sau: