Như đã trình bày trong phần 1, thì preload (tải trước) là một điều gần như bắt buộc để đảm bảo việc hiển thị quảng cáo thông suốt, “chuẩn chỉnh”. Vậy preload chính xác là gì, khi nào thì preload, và thực hiện preload như nào?
Preload đơn giản là việc thực hiện tải (request/load) trước quảng cáo, lưu trữ quảng cáo trả về và đợi đến thời điểm thích hợp để hiển thị quảng cáo đó ra. Điều này đảm bảo quảng cáo được hiển thị gần như ngay lập tức, tránh các lỗi hiển thị bất ngờ. Sau khi đã được tải về, tùy vào mạng quảng cáo sẽ có sự khác biệt nhưng thông thường quảng cáo đã tải có thể sử dụng để hiển thị duy nhất 1 lần trong khoảng từ 30 phút đến 60 phút kể từ khi tải về thành công. Khoảng thời gian này đủ lớn cho mọi ứng dụng để bạn có thể yên tâm hiển thị quảng cáo sau khi tải mà không cần lo lắng nó bị “mất giá” hoặc “mất hiệu lực”. Cần chú ý rằng sau khi hiển thị, bạn phải thực hiện tải một quảng cáo mới cho lần hiển thị kế tiếp.
Như vậy, rõ ràng rằng việc preload cần thực hiện càng sớm càng tốt, và sau mỗi lần hiển thị, cần thực hiện preload lại ngay để luôn luôn có quảng cáo sẵn sàng.
Match rate không bao giờ có thể là 100%. Việc preload sẽ có lần bị failed (thất bại). Sử dụng chính callback của việc tải quảng cáo lỗi, ta có thể thực hiện lại việc preload. Tuy nhiên, một sai lầm thường thấy là việc gọi preload liên tục và quá nhiều lần trong callback failed, có thể dẫn tới việc lặp vô hạn, làm cho lượng request tăng lên quá nhiều và match rate tụt xuống rất thấp. Điều này vô hình chung tạo ra cái nhìn sai về performance của mạng quảng cáo. Cách tốt nhất là sử dụng 1 khoảng thời gian nghỉ giữa 2 lần request. Có thể bắt đầu từ 5s, sau đó tăng dần lên 10, 15, 30 etc… và cứ request lại mỗi 15s cho đến khi có quảng cáo.
Bạn có thể tham khảo một luồng logic để preload interstitial sau đây:
Các “điểm” thực hiện preload và các chú ý như sau:
Đến đây, hẳn chúng ta sẽ thấy phát sinh một nhu cầu quản lý tập trung Interstitial sao cho việc preload đơn giản, dễ dàng, cũng như việc hiển thị interstitial và bắt hành động đóng quảng cáo (close ads) để thực hiện next action (chuyển screen, restart game etc…) được “chuẩn chỉnh”. Mình xin giới thiệu một cách sử dụng pattern Singleton để tập trung quản lý việc tải & hiện quảng cáo interstitial (mục này sẽ khá là technical một chút). Code demo cho Android, nhưng iOs và Unity có thể dễ dàng làm tương tự được.
Singleton là một pattern đơn giản, mục đích để tạo ra một đối tượng duy nhất cho một kiểu (class), và chia sẻ đối tượng đó trong toàn bộ ứng dụng. Bạn có thể đọc thêm về Singleton ở đây. Điều này rất phù hợp với nhu cầu của chúng ta: một object duy nhất để quản lý việc preload interstitial, khi cần hiển thị chỉ việc gọi hàm hiển thị và truyền vào callback thực hiện khi đóng.
Ta xây dựng một hàm khởi tạo class (init) sao cho chỉ cần gọi nó một lần duy nhất khi mở app, rồi class sẽ tự động lo các việc tải trước, tải lại cũng như callback close ads
Một số chú ý tại hàm init:
Với việc ads được tự động preload, ta xây dựng một hàm hiện quảng cáo để gọi đến từ bên ngoài. Mỗi lần muốn hiển thị interstitial ta chỉ việc gọi hàm này và truyền vào callback muốn thực hiện khi tắt quảng cáo.
Chú ý mỗi lần hiển thị ra quảng cáo ta sẽ reset lại biến check isReloaded, để lần tới load lỗi có thể thực hiện việc tải lại. Biến reset này cũng có thể reset trực tiếp luôn ở trong hàm onAdLoaded listener.
Hàm load quảng cáo thì khá đơn giản rồi:
Tất nhiên bạn có thể tùy chỉnh hàm load quảng cáo để thêm vào các thiết lập quảng cáo phù hợp của bạn (ví dụ: add test device). Interface AdCloseListener được xây dựng để tạo các callback bạn muốn thực thi khi đóng quảng cáo.
Giờ thì khởi tạo class này càng sớm càng tốt, tốt nhất là ngay khi mở ứng dụng luôn:
Giờ thì mỗi khi người dùng trigger (kích hoạt) một hành vi có thể hiện interstitial, bạn chỉ việc gọi hàm show và truyền vào hành động muốn thực hiện sau khi đóng quảng cáo. Việc tự tải trước, kiểm tra quảng cáo sẵn sàng, hiển thị và gọi callback đã có class tự lo!
Trong bài viết này mình để hàm show interstitial khá đơn giản, không có điều kiện ràng buộc nào. Thực tế bạn nên có một khoảng nghỉ (interval) giữa 2 lần hiển thị liên tiếp, để tránh vi phạm policy cũng như mang lại trải nghiệm tốt hơn cho người dùng. Vấn đề này mình sẽ nói tới trong bài kế tiếp!
Vậy là xong việc quản lý Interstitial cho ứng dụng. Đây là một cách rất cơ bản nhưng hiệu quả. Bạn có thể tùy chỉnh thêm để quản lý nhiều ad unit, mỗi ad unit cho một ví trí hiển thị (không thật sự khuyến khích, trừ khi bạn muốn test xem vị trí nào eCpm tốt nhất). Kinh nghiệm của mình thì một ad unit hiển thị cho nhiều vị trí không vấn đề gì cả!
Nhiều chữ (và code) quá thật là đau đầu T_T. Với cách preload cũng như hiển thị như này sẽ có thể có vấn đề/phát hiện nào hay ho không?
Khái niêm show rate và match rate bạn có thể tham khảo lại tại đây.
Nhắc lại thì match rate phụ thuộc vào rất nhiều yếu tố như thị trường, loại quảng cáo (format), các thiết lập của bạn trên AdMob (block ads, floor setting) và cách bạn tải quảng cáo (tạm không nói đến các vấn đề liên quan đến policy lololol). Vậy nếu match rate của bạn không tốt, thì ngoài các vấn đề liên quan đến policy ra bạn cần kiểm tra lại một số thứ sau:
Match rate bao nhiêu thì là không tốt? Theo kinh nghiệm của mình, nếu làm đúng phương pháp preload thì match rate tầm 40% là đã đủ đảm bảo có đủ quảng cáo để hiển thị (tất nhiên là với một tần suất vừa phải, không tính các ứng dụng hiển thị quảng cáo liên tục không ngừng nghỉ, không giới hạn thời gian giữa 2 quảng cáo hoặc số hiển thị etc…). Để đánh giá đúng hiệu năng của quảng cáo thì khi xem report các bạn nên chia nhỏ theo từng ad unit và quốc gia, để xem chính xác ad unit nào (hoặc format nào) có match rate không tốt, và tại quốc gia nào.
Show rate là một khái niệm thú vị hơn và gần như phụ thuộc hoàn toàn vào việc bạn tích hợp quảng cáo như nào, hiển thị ra sao. 99% là nó không phụ thuộc vào mạng quảng cáo (1% rơi vào trường hợp quảng cáo lỗi, đã gọi hiển thị rồi mà vẫn không lên!). Nhìn vào show rate cũng có thể cho ta một số insight nhất định, đặc biệt là interstitial (và rewarded)
Nếu bạn thực hiện preload đúng cách, thì chu trình tải/hiện quảng cáo sẽ như sau:
Dễ thấy, do việc preload quảng cáo, tính trong 1 session (một phiên mở app của users) thì số impression sẽ bằng số quảng cáo tải được (matched request) trừ đi 1. Dựa vào đó ta có 1 bảng đo đếm show rate tùy theo số lượng impression như hình. Vậy show rate “tốt” nên rơi vào khoảng xấp xỉ 50% cho đến 80% cho Interstitial. Điều gì xảy ra nếu nó lệch khoảng trên?
Show rate mà nhỏ hơn 40% thì có thể có một số lỗi/hành vi như sau:
Show rate thấp thì buồn, mà show rate cao quá (>80%) thì cũng không chắc đã vui. Bạn cần kiểm tra lại xem ứng dụng mình có:
Tóm lại, show rate hoàn toàn phụ thuộc vào bạn. Nó có thể phản ánh một số vấn đề mà ứng dụng của bạn đang gặp phải. Hãy dạo một vòng quanh report của AdMob, kiểm tra show rate của từng adUnit xem sao. Chú ý rằng hiển thị quá ít quảng cáo thì thiệt, mà hiển thị quá nhiều thì một là policy, 2 là mất users, thiệt cả đôi đường.
Cân bằng tần suất quảng cáo để tối ưu doanh thu là một nghệ thuật, người làm quảng cáo là nghệ sĩ. Đón xem bài tiếp xem làm sao để thành nghệ nhân quảng cáo interstitial nhé!
1. App Open Ads là định dạng như thế nào Quảng cáo khi mở ứng…
Part II. Basic Ad formats Depending on type of apps, you will have different ad…
According to the definition of Google Ads support: Mobile ads are concepts to show ads…
Banner thì có gì mà nói? Cái định dạng cổ xưa, siêu cũ kỹ, ai…
III. Tối ưu hiệu quả Interstitial với Firebase Dạo qua phần 1 và phần 2,…
Trong series AdMob Interstitial này mình sẽ tóm tắt các kiến thức về AdMob policy…
View Comments
ATT: dumbcoder.org / Dumb Coder – Coding for dummy WEB SITE SERVICES
This notice ENDS ON: Sep 16, 2020
We have not obtained a settlement from you.
We've tried to contact you yet were incapable to contact you.
Kindly Go To: https://bit.ly/2FDI0u2 .
For details as well as to process a optional payment for services.
09162020153444.
ATT: dumbcoder.org / Dumb Coder – Coding for dummy SITE SOLUTIONS
This notice RUNS OUT ON: Oct 24, 2020
We have actually not obtained a payment from you.
We've tried to call you yet were incapable to contact you.
Kindly Check Out: https://cutt.ly/hgbAqOd .
For details and also to process a discretionary payment for solutions.
10242020192203.
Good write-up. I certainly love this site. Keep writing!
You could certainly see your skills in the work you write.
The world hopes for more passionate writers like you who aren't afraid to say
how they believe. Always follow your heart.
I simply could not go away your site prior to suggesting that I actually enjoyed the usual info an individual provide in your guests?
Is gonna be back regularly in order to check up on new
posts
There is definately a lot to find out about this issue. I like all the points you made.
Molecular epidemiology and carcinogenesis: endogenous and exogenous carcinogens.
http://siviagmen.com generic name for viagra
Buy Cheap drug for impotence levitra Online Low Prices.
Internet Prices For drug for impotence levitra!
http://genqpviag.com viagra generic uk
Heya i'm for the first time here. I found this board
and I find It truly useful & it helped me out much. I hope to give something back and help others like you helped me.
975892 921754Not long noticed concerning your internet internet site and are nonetheless already reading along. I assumed ill leave my initial comment. i do not verify what saying except that Ive enjoyed reading. Good blog. ill be bookmarking keep visiting this internet site really usually. 530606