Mở đầu
Đối với bất kỳ nhà phát triển ứng dụng nào, tối ưu hóa nguồn thu từ quảng cáo luôn là một trong những mối quan tâm hàng đầu. Có rất nhiều loại quảng cáo khác nhau. Hôm nay mình sẽ đi vào một loại quảng cáo của app từ backgroud đến foreground
Quảng cáo trong app
-
Loại quảng cáo trong ứng dụng:
- Quảng cáo Banner: Hiển thị ở đầu, cuối hoặc giữa màn hình.
- Quảng cáo Toàn màn hình (Interstitial): Ngắt người dùng và tạm dừng ứng dụng để hiển thị quảng cáo đầy màn hình.
- Quảng cáo Video: Người dùng phải xem video quảng cáo để nhận phần thưởng trong ứng dụng.
- Quảng cáo Thưởng (Rewarded Ads): Tương tự quảng cáo video nhưng người dùng được thưởng khi xem hết.
-
Mô hình thanh toán:
- CPM (Cost Per Mille): Bạn được trả tiền cho mỗi 1000 lượt hiển thị quảng cáo.
- CPC (Cost Per Click): Bạn được trả tiền cho mỗi lượt nhấp vào quảng cáo.
- CPI (Cost Per Install): Bạn được trả tiền cho mỗi lần người dùng cài đặt ứng dụng của bạn từ quảng cáo.
-
Mạng quảng cáo: Đây là những công ty trung gian giúp kết nối nhà phát triển ứng dụng với nhà quảng cáo. Một số mạng quảng cáo phổ biến là Google AdMob, Facebook Audience Network, AppLovin, Unity Ads, vv.
-
Đề xuất quảng cáo: Các mạng quảng cáo sử dụng thuật toán để đề xuất quảng cáo phù hợp với người dùng dựa trên hành vi, vị trí địa lý và đặc điểm người dùng.
-
Yếu tố ảnh hưởng đến doanh thu quảng cáo:
- Lượng người dùng tương tác với ứng dụng
- Thời gian và tần suất hiển thị quảng cáo
- Loại quảng cáo và vị trí hiển thị
- Chất lượng quảng cáo và mức độ phù hợp với người dùng
-
Chiến lược quảng cáo: Bạn cần có chiến lược quảng cáo phù hợp để tối ưu hóa doanh thu mà không làm giảm trải nghiệm người dùng quá mức. Điều này bao gồm lựa chọn loại quảng cáo, tần suất hiển thị, vị trí hiển thị, và đo lường hiệu quả.
-
Tuân thủ chính sách: Các mạng quảng cáo có chính sách riêng về nội dung quảng cáo, loại ứng dụng được phép và không được phép. Bạn cần tuân thủ những chính sách này để tránh bị chặn hoặc loại bỏ khỏi mạng quảng cáo.
Demo quảng cáo của app mở từ background đến foreground
Để hiển thị quảng cáo từ background lên foreground trong ứng dụng sử dụng Google AdMob, bạn cần thực hiện các bước sau:
Lý thuyết:
-
Đăng ký Lifecycle Callbacks: Đăng ký Lifecycle Callbacks để lắng nghe trạng thái ứng dụng chuyển từ background sang foreground. Bạn có thể sử dụng
ProcessLifecycleOwner
trong Android để đăng ký. -
Tải quảng cáo khi ứng dụng ở background: Khi ứng dụng chuyển sang background, bạn có thể tải quảng cáo để sẵn sàng hiển thị khi ứng dụng chuyển sang foreground.
-
Hiển thị quảng cáo khi ứng dụng chuyển sang foreground: Trong phương thức
onResume()
của Activity hoặc Fragment, bạn có thể kiểm tra xem quảng cáo đã được tải hay chưa. Nếu đã tải xong, hiển thị quảng cáo.
Demo:
@HiltAndroidApp
class App : Application(), Application.ActivityLifecycleCallbacks { private lateinit var appOpenAdManager: AppOpenAdManager private var currentActivity: Activity? = null override fun onCreate() { super.onCreate() registerActivityLifecycleCallbacks(this) MobileAds.initialize(this) appOpenAdManager = AppOpenAdManager() } override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) = Unit override fun onActivityStarted(activity: Activity) { currentActivity = activity } override fun onActivityResumed(activity: Activity) = Unit override fun onActivityPaused(activity: Activity) = Unit override fun onActivityStopped(activity: Activity) = Unit override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit override fun onActivityDestroyed(activity: Activity) = Unit fun showAdIfAvailable(activity: Activity) { appOpenAdManager.showAdIfAvailable(activity) } /** Inner class that loads and shows app open ads. */ private inner class AppOpenAdManager { private var appOpenAd: AppOpenAd? = null private var isLoadingAd = false fun loadAd(context: Context) { // Do not load ad if there is an unused ad or one is already loading. if (isLoadingAd || isAdAvailable()) { return } isLoadingAd = true val request = AdRequest.Builder().build() AppOpenAd.load(context, getString(R.string.admob_unit_id_open_ads), request, AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT, object : AppOpenAd.AppOpenAdLoadCallback() { override fun onAdLoaded(ad: AppOpenAd) { appOpenAd = ad isLoadingAd = false currentActivity?.let { ad.show(it) } } override fun onAdFailedToLoad(loadAdError: LoadAdError) { isLoadingAd = false } }) } private fun isAdAvailable() = appOpenAd != null fun showAdIfAvailable(activity: Activity) { if (!isAdAvailable()) { loadAd(activity) return } appOpenAd?.show(activity) } }
}
Trong file MainActivity
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) (application as? App)?.showAdIfAvailable(this@MainActivity) }
Đây là một mã nguồn Kotlin cho ứng dụng Android sử dụng thư viện Google AdMob để hiển thị quảng cáo mở ứng dụng (App Open Ads).
Giải thích ngắn gọn:
-
App
là một lớp kế thừa từApplication
và triển khaiActivityLifecycleCallbacks
để theo dõi chu kỳ hoạt động của ứng dụng. -
AppOpenAdManager
là một lớp nội tại trongApp
để quản lý việc tải và hiển thị quảng cáo mở ứng dụng. -
Trong
AppOpenAdManager
, phương thứcloadAd
được gọi để tải quảng cáo mở ứng dụng từ AdMob. Khi quảng cáo được tải thành công, nó sẽ được hiển thị trêncurrentActivity
. -
Phương thức
showAdIfAvailable
trongAppOpenAdManager
sẽ kiểm tra xem có quảng cáo nào đã được tải hay chưa. Nếu có, nó sẽ hiển thị quảng cáo đó trênactivity
được truyền vào. -
Trong
MainActivity
, khi khởi tạo, nó gọishowAdIfAvailable
từApp
để hiển thị quảng cáo mở ứng dụng nếu có.
Đoạn mã này sử dụng ActivityLifecycleCallbacks
để theo dõi chu kỳ hoạt động của ứng dụng và tải quảng cáo mở ứng dụng từ AdMob. Khi có quảng cáo mở ứng dụng được tải thành công, nó sẽ hiển thị trên currentActivity
hoặc MainActivity
khi khởi động ứng dụng.
Demo chạy trên app:
Kết
Để có một chiến lược quảng cáo hiệu quả trong ứng dụng, nhà phát triển cần hiểu rõ các loại quảng cáo, mô hình thanh toán, mạng quảng cáo, đề xuất quảng cáo, các yếu tố ảnh hưởng đến doanh thu, và luôn tuân thủ các chính sách của các mạng quảng cáo. Bằng cách áp dụng những kiến thức này, nhà phát triển có thể tối ưu hóa nguồn thu từ quảng cáo mà vẫn đảm bảo trải nghiệm tốt cho người dùng.