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:
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
Luồng logic có thể hiểu đơn giản như sau:
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à:
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.
Vậy logic đúng để hiển thị interstitial giữa 2 màn hình phải là:
Theo đúng logic trên, quảng cáo của bạn sẽ hiển thị đẹp và chuẩn ISO:
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:
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.
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:
Để 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..
Chúc bạn may mắn ^^
Subscribe để theo dõi tiếp series này nhé!