Toàn tập về AdMob Interstitial

Trong series AdMob Interstitial này mình sẽ tóm tắt các kiến thức về AdMob policy cho interstitial, các ‘best practice’ để load & show interstitial và cuối cùng là một số kỹ thuật đo đếm và tối ưu performance cho interstitial.

Anh em vui lòng tham khảo các bài Mobile Ads cơ bản và Firebase nhập môn để trang bị đủ kiến thức cho series này.

I. Policy, các lỗi thường gặp và cách phòng tránh

Okay, bài đầu tiên mình sẽ tập trung nói vào vấn đề tưởng đơn giản nhưng lại khá dễ dàng vi phạm: policy. Thực tế thì AdMob có bộ policy tương đối rõ ràng và đầy đủ trong helpcenter của mình. Mình sẽ hệ thống lại từng trường hợp, lỗi thường gặp, cũng như cách khắc phục. Ta cùng phân tích từng vị trí có thể đặt interstitial nào.

1. Interstitial khi mở app:

“Mở app” ở đây chỉ việc ứng dụng mở ra sau khi người dùng bấm vào icon. Nó bao gồm 2 trường hợp: mở ứng dụng lần đầu và cả việc quay lại ứng dụng sau khi suspend (tạm dừng) nó. Thật sự thì vị trí mở app không phải là một ví trí “đắc địa” để hiển thị quảng cáo, do nó ảnh hưởng kha khá đến trải nghiệm người dùng. Tuy nhiên, nếu bạn vẫn muốn dùng vị trí này thì cần đặc biệt chú ý 2 lỗi vi phạm sau:

Lỗi 1: quảng cáo hiển thị ngay sau khi người dùng bấm vào icon, trước khi người dùng nhìn thấy bất cứ giao diện gì của ứng dụng
Lỗi 2: quảng cáo hiển thị sau khi người dùng đã vào giao diện ứng dụng (tạm gọi màn hình A), và trước khi người dùng có thao tác chuyển sang màn hình B. Ngắn gọn là màn hình trước và sau của quảng cáo cùng là một màn hình A.

Vậy cách hiển thị đúng là gì? Nếu muốn hiển thị Interstitial khi mở app, bạn cần hiển thị nó giữa 2 màn hình khác nhau, cụ thể là một màn hình loading scene trung gian, sau đó là màn hình chính của ứng dụng

Hiển thị đúng: Bấm icon ứng dụng, có 1 màn hình trung gian (Loading Scene), sau đó hiển thị Interstitial, đóng Interstitial thì chuyển sang màn hình chính

Luồng logic có thể hiểu đơn giản như sau:

Logic hiển thị interstitial khi open ads. Tại màn hình LoadingPage kiểm tra xem đã tải sẵn interstitial chưa, nếu có thì hiện thị, dùng callback adClose để chuyển sang màn hình mới, nếu chưa tải sẵn interstitial thì chuyển màn hình mới luôn

2. Interstitial giữa 2 màn hình của ứng dụng:

Vị trí đặt interstitial phổ biến nhất, đó là khi người dùng chuyển qua lại giữa 2 màn hình. Khái niệm “màn hình” ở đây rất rộng, nó chỉ cần là 2 giao diện “phần lớn” khác nhau, và có một đoạn ngắn chuyển giữa 2 giao diện để người dùng biết, ngắt quãng hành vi của người dùng. Ví dụ, cùng là màn hình ingame có 1 popup game over, bấm vào nút retry có thể hiện interstitial, sau đó tắt interstitial thì có animation tắt popup và vào lại game (vẫn ở màn hình ingame) thì vẫn là hợp lệ, 2 giao diện khác nhau.

Quy tắc rất đơn giản và dễ hiểu, nhưng vẫn có một lỗi khá phổ biến có thể gặp là:

Lỗi: hiển thị interstitial sau khi người dùng đã chuyển sang màn hình mới

Dù không “cố ý”, nhưng mình thấy khá nhiều người mắc lỗi này. Nguyên do là trong code của ứng dụng, các bạn sử dụng event “bấm nút” của người dùng, và gọi đồng thời 2 hàm: hiện_interstitial và chuyển_scene. Tuy nhiên, hàm hiện interstitial không phải là 1 hàm block (chặn toàn bộ luồng ứng dụng), và có thể delay 0.5s-1s trước khi interstitial được hiện. Điều này dẫn đến việc dù hàm chuyển_scene được gọi sau nhưng nó vẫn làm cho người dùng chuyển hướng sang màn hình mới trước, và có thể sau đó 0.5s-1s thì interstitial hiển thị. Boom, bạn đã vi phạm policy.

Ngoài ra, một lỗi có thể nữa là bạn không preload (tải trước) quảng cáo. Khi người dùng bấm nút bạn mới gọi load, và dùng callback load quảng cáo thành công để hiển thị. Lỗi này khá tệ và nặng, vì nó làm quảng cáo hiển thị sau khi người dùng đã “vào” giao diện mới một thời gian khá lâu (5s-10s). Hoàn toàn có thể xảy ra việc người dùng đang thao tác (bấm, vuốt) trên màn hình mới thì bạn hiện quảng cáo.

Lỗi hiển thị interstitial do không có preload và sử dụng onAdLoaded callback để show

Vậy logic đúng để hiển thị interstitial giữa 2 màn hình phải là:

Logic hiển thị interstitial giữa 2 màn hình: người dùng kích hoạt việc chuyển màn hình bằng việc bấm nút, nếu chưa có interstitial tải sẵn thì chuyển màn hình luôn, nếu có quảng cáo thì hiển thị quảng cáo và đợi đến khi người dùng tắt quảng cáo mới chuyển màn hình

Theo đúng logic trên, quảng cáo của bạn sẽ hiển thị đẹp và chuẩn ISO:

Quảng cáo chuẩn ISO: người dùng thao tác để chuyển màn hình -> quảng cáo hiển thị -> tắt quảng cáo -> chuyển sang màn hình mới

3. Interstitial khi thoát app:

Tương tự như mở app, thoát app cũng không phải là một ví trí quá tốt, nhưng nếu bạn không có nhiều lựa chọn và vẫn muốn thử vị trí này thì cần tránh lỗi sau:

Lỗi hiển thị: người dùng bấm exit để thoát ứng dụng, hiện interstitial, sau khi tắt interstitial thì ứng dụng thoát, người dùng thấy màn hình nền của điện thoại

Interstitial không được phép là màn hình cuối cùng của ứng dụng!!! Do đó nếu thực sự muốn hiển thị tại vị trí này, bạn cần một màn hình trung gian nữa. Một màn hình “xác nhận thoát” có thể là một giải pháp.

“Giải pháp”: sau khi tắt interstitial thì dùng một màn hình trung gian là màn hình “xác nhận thoát”. Có thể là một màn hình hỏi “Bạn có chắc chắn muốn thoát không – Có/Không”, hoặc là một màn hình đếm lùi dạng “đang tắt ứng dụng”

Thật sự mình không khuyến khích vị trí này. Sẽ tốt hơn rất nhiều nếu bạn dùng quảng cáo Native để tích hợp vào màn hình xác nhận thoát (sẽ nói tới trong bài sau).

4. Interstitial hiển thị quá nhiều:

Ngoài các lỗi như vị trí đặt, thì AdMob cũng có một policy về việc interstitial hiển thị quá nhiều. Định nghĩa thế nào là “quá nhiều” thật sự không rõ ràng, nhưng nếu bạn cứ hiển thị interstitial tất cả mọi lần users thao tác chuyển màn hình thì chắc chắn vi phạm:

Lỗi hiển thị quá nhiều: đi đâu, làm gì cũng bắt users phải xem một cái quảng cáo đã

Để tránh bị vi phạm lỗi này, bạn nên kiểm soát giữa 2 lần show interstitial. Có thể dùng cách đếm thời gian giữa 2 lần hiển thị (quá 30s, 1p v.v.v.) hoặc đếm số thao tác (3 lần chuyển màn hình, 3 lần game over v.v.v). Chú ý các con số chỉ là tượng trưng.

Tổng kết:

Nghe qua thì thấy khá phức tạp, rối rắm và nhiều trường hợp. Nhưng bạn chỉ cần nhớ các quy tắc đơn giản sau để có thể dễ dàng kiểm tra ứng dụng của mình:

  • Interstitial không được phép là màn hình đầu tiên cũng như cuối cùng của ứng dụng
  • Interstitial phải hiển thị giữa 2 giao diện khác nhau (chú ý phần giải thích như nào là giao diện khác nhau)
  • Cần có khoảng nghỉ giữa các lần hiện quảng cáo

Để tuân thủ các điều trên cũng không quá khó. Bạn có thể tuân theo 3 nguyên tắc sau trong code của mình:

  • chỉ hiển thị Interstitial dựa trên hành vi của người dùng (kích hoạt sự kiện chuyển màn hình)
  • luôn dùng callback AdClosed để thực hiện việc chuyển màn hình
  • không hiển thị interstitial bằng các callback tự động như onAdLoaded, Timer, NetworkCallback etc..
Không hề khó để tuân thủ policy Interstitial của AdMob

Chúc bạn may mắn ^^
Subscribe để theo dõi tiếp series này nhé!