این راهنما نحوه بارگذاری یک بنر تبلیغاتی تطبیقی متصل به یک برنامه اندروید را پوشش میدهد.
پیشنیازها
- راهنمای شروع به کار را تکمیل کنید.
- اختیاری: برای مثالی از پیادهسازی تبلیغات بنری، یکی از برنامههای نمونه زیر را انتخاب کنید:
- مثالی از بنرهای تبلیغاتی تطبیقی متصل به جاوا ، کاتلین یا جتپک کامپوز .
- نسخه آزمایشی ویژگیهای پیشرفته جاوا یا کاتلین .
همیشه با تبلیغات آزمایشی تست کنید
هنگام ساخت و آزمایش برنامههای خود، مطمئن شوید که از تبلیغات آزمایشی به جای تبلیغات زنده و تولیدی استفاده میکنید. عدم انجام این کار میتواند منجر به مسدود شدن حساب شما شود.
سادهترین راه برای بارگذاری تبلیغات آزمایشی، استفاده از شناسه اختصاصی واحد تبلیغات آزمایشی ما برای بنرهای اندروید است:
/21775744923/example/adaptive-banner
این ابزار به طور ویژه برای برگرداندن تبلیغات آزمایشی برای هر درخواست پیکربندی شده است و میتوانید از آن در برنامههای خود هنگام کدنویسی، آزمایش و اشکالزدایی استفاده کنید. فقط قبل از انتشار برنامه، مطمئن شوید که آن را با شناسه واحد تبلیغاتی خود جایگزین میکنید.
برای اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی SDK تبلیغات موبایلی گوگل، به بخش فعال کردن تبلیغات آزمایشی مراجعه کنید.
نمای تبلیغ را تعریف کنید
طرحبندی XML
یک نما به فایل XML طرحبندی خود اضافه کنید تا به عنوان ظرفی برای بنر تبلیغاتی تطبیقی متصل شما عمل کند:
<!-- Ad view container that fills the width of the screen and adjusts its
height to the content of the ad. -->
<FrameLayout
android:id="@+id/ad_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true" />
جتپک آهنگسازی
ماژول JetpackComposeDemo/compose-util را اضافه کنید. این ماژول شامل کمککنندههایی برای نوشتن شیء و فایلهای
AdViewاست.یک کلاس
BannerAdاز ماژولcompose-utilبسازید:
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
اندازه تبلیغ را تنظیم کنید
AdSize روی یک نوع بنر تطبیقی متصل با عرض مشخص تنظیم کنید:
جاوا
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
کاتلین
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
جتپک آهنگسازی
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
AdManagerAdView را به طرح اضافه کنید
با استفاده از اندازه تبلیغ، یک AdManagerAdView ایجاد کنید تا به طرحبندی برنامهتان اضافه شود:
جاوا
// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);
کاتلین
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView
// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)
جتپک آهنگسازی
val adView = remember { AdManagerAdView(context) }
// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANANGER_ADAPTIVE_BANNER_AD_UNIT_ID
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
بارگذاری یک تبلیغ
پس از راهاندازی AdManagerAdView ، مرحله بعدی بارگذاری یک تبلیغ است. این کار با متد loadAd() در کلاس AdManagerAdView انجام میشود. این متد یک پارامتر AdManagerAdRequest میگیرد که اطلاعات زمان اجرا، مانند اطلاعات هدفگیری، در مورد یک درخواست تبلیغ واحد را در خود نگه میدارد.
در اینجا مثالی آورده شده است که نحوه بارگذاری یک تبلیغ را نشان میدهد:
جاوا
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
کاتلین
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
در صورت موفقیت، برنامه شما آماده نمایش تبلیغات بنری است.
تازه کردن یک آگهی
اگر واحد تبلیغاتی خود را برای بهروزرسانی پیکربندی کردهاید، در صورت عدم بارگیری تبلیغ، نیازی به درخواست تبلیغ دیگری ندارید. SDK تبلیغات موبایل گوگل هر نرخ بهروزرسانی را که در رابط کاربری مدیر تبلیغات مشخص کردهاید، در نظر میگیرد. اگر بهروزرسانی را فعال نکردهاید، یک درخواست جدید ارسال کنید. برای جزئیات بیشتر در مورد بهروزرسانی واحد تبلیغاتی، مانند تنظیم نرخ بهروزرسانی، به نرخ بهروزرسانی برای تبلیغات در برنامههای تلفن همراه مراجعه کنید.
انتشار یک منبع تبلیغاتی
وقتی استفاده از بنر تبلیغاتی تمام شد، میتوانید منابع بنر تبلیغاتی را آزاد کنید.
برای آزادسازی منبع تبلیغ، تبلیغ را از سلسله مراتب نما حذف کرده و تمام ارجاعات آن را حذف میکنید:
جاوا
public void destroyBanner() {
// Remove banner from view hierarchy.
if (adView != null) {
View parentView = (View) adView.getParent();
if (parentView instanceof ViewGroup) {
((ViewGroup) parentView).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
}
// Drop reference to the banner ad.
adView = null;
}
کاتلین
fun destroyBanner() {
// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
parentView.removeView(adView)
}
// Destroy the banner ad resources.
adView?.destroy()
// Drop reference to the banner ad.
adView = null
}
رویدادهای تبلیغاتی
شما میتوانید به تعدادی از رویدادها در چرخه عمر تبلیغ، از جمله بارگذاری، نمایش تبلیغ و کلیک، و همچنین رویدادهای باز و بسته شدن تبلیغ، گوش دهید. توصیه میشود قبل از بارگذاری بنر، فراخوانی را تنظیم کنید.جاوا
if (adView != null) {
adView.setAdListener(
new AdListener() {
@Override
public void onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
@Override
public void onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
});
}
کاتلین
adView?.adListener =
object : AdListener() {
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
override fun onAdFailedToLoad(adError: LoadAdError) {
// Code to be executed when an ad request fails.
}
override fun onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
override fun onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
override fun onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
}
هر یک از متدهای overridable در AdListener مربوط به یک رویداد در چرخه حیات یک تبلیغ است.
| متدهای قابل لغو | |
|---|---|
onAdClicked() | متد onAdClicked() زمانی فراخوانی میشود که یک کلیک برای یک تبلیغ ثبت شود. |
onAdClosed() | متد onAdClosed() زمانی فراخوانی میشود که کاربر پس از مشاهدهی آدرس اینترنتی (URL) مقصد تبلیغ، به برنامه بازگردد. برنامهی شما میتواند از آن برای از سرگیری فعالیتهای معلق شده یا انجام هر کار دیگری که برای آمادهسازی خود برای تعامل لازم است، استفاده کند. |
onAdFailedToLoad() | متد onAdFailedToLoad() تنها متدی است که شامل یک پارامتر میشود. پارامتر error از نوع LoadAdError خطای رخ داده را توصیف میکند. برای اطلاعات بیشتر، به مستندات اشکالزدایی خطاهای بارگذاری تبلیغات مراجعه کنید. |
onAdImpression() | متد onAdImpression() زمانی فراخوانی میشود که برای یک تبلیغ، بازدید ثبت شود. |
onAdLoaded() | متد onAdLoaded() زمانی اجرا میشود که بارگذاری یک تبلیغ به پایان رسیده باشد. برای مثال، اگر میخواهید اضافه کردن AdManagerAdView به اکتیویتی یا فرگمنت خود را تا زمانی که از بارگذاری یک تبلیغ مطمئن شوید، به تأخیر بیندازید، میتوانید این کار را اینجا انجام دهید. |
onAdOpened() | متد onAdOpened() زمانی فراخوانی میشود که یک تبلیغ، لایهای را باز کند که صفحه نمایش را بپوشاند. |
شتاب سختافزاری برای تبلیغات ویدیویی
برای اینکه تبلیغات ویدیویی با موفقیت در نمایش بنرهای تبلیغاتی شما نمایش داده شوند، باید شتابدهنده سختافزاری فعال باشد.
شتاب سختافزاری به طور پیشفرض فعال است، اما برخی از برنامهها ممکن است آن را غیرفعال کنند. اگر این مورد در مورد برنامه شما صدق میکند، توصیه میکنیم شتاب سختافزاری را برای کلاسهای Activity که از تبلیغات استفاده میکنند، فعال کنید.
فعال کردن شتاب سختافزاری
اگر برنامه شما با فعال بودن شتابدهنده سختافزاری به صورت سراسری به درستی رفتار نمیکند، میتوانید آن را برای فعالیتهای منفرد نیز کنترل کنید. برای فعال یا غیرفعال کردن شتابدهنده سختافزاری، میتوانید از ویژگی android:hardwareAccelerated برای عناصر <application> و <activity> در AndroidManifest.xml خود استفاده کنید. مثال زیر شتابدهنده سختافزاری را برای کل برنامه فعال میکند اما آن را برای یک فعالیت غیرفعال میکند:
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
برای اطلاعات بیشتر در مورد گزینههای کنترل شتاب سختافزاری، به راهنمای شتاب سختافزاری مراجعه کنید. توجه داشته باشید که اگر فعالیت غیرفعال باشد، نمایش تبلیغات به صورت جداگانه برای شتاب سختافزاری قابل فعال شدن نیست، بنابراین خود فعالیت باید شتاب سختافزاری را فعال کند.
شمارش دستی برداشت
شمارش دستی تعداد نمایشها فقط با کمپینهای فروش مستقیم و خانگی که در آنها آگهیهای تبلیغاتی مستقیماً در Ad Manager منتشر میشوند، سازگار است. نباید از آن برای تبلیغات اضافی یا شبکههای شخص ثالث استفاده شود. برای جزئیات بیشتر، به بخش شمارش نمایشها و کلیکها مراجعه کنید.
اگر شرایط خاصی برای ثبت نمایش دارید، میتوانید پینگهای نمایش را به صورت دستی به مدیر تبلیغات ارسال کنید:
جاوا
if (adManagerAdView != null) {
adManagerAdView.setManualImpressionsEnabled(true);
}
کاتلین
adManagerAdView?.setManualImpressionsEnabled(true)
وقتی متوجه شدید که یک تبلیغ با موفقیت برگردانده شده و روی صفحه نمایش است، میتوانید به صورت دستی یک نمایش ثبت کنید:
جاوا
if (adManagerAdView != null) {
adManagerAdView.recordManualImpression();
}
کاتلین
adManagerAdView?.recordManualImpression()
رویدادهای برنامه
رویدادهای برنامه به شما امکان میدهند تبلیغاتی ایجاد کنید که بتوانند پیامهایی را به کد برنامه خود ارسال کنند. سپس برنامه میتواند بر اساس این پیامها اقداماتی انجام دهد.
شما میتوانید با استفاده از AppEventListener به رویدادهای خاص برنامهی Ad Manager گوش دهید. این رویدادها میتوانند در هر زمانی در طول چرخهی حیات تبلیغ، حتی قبل از فراخوانی onAdLoaded() رخ دهند.
AppEventListener را روی AdManagerAdView خود تنظیم کنید:
جاوا
if (adManagerAdView != null) {
adManagerAdView.setAppEventListener(this);
}
کاتلین
adManagerAdView?.appEventListener = this
در اینجا مثالی آورده شده است که نشان میدهد چگونه رنگ پسزمینه برنامه خود را بسته به یک رویداد برنامه با نام رنگ تغییر دهید:
جاوا
@Override
public void onAppEvent(@NonNull String name, @NonNull String info) {
if (name.equals("color")) {
switch (info) {
case "green":
// Set background color to green.
break;
case "blue":
// Set background color to blue.
break;
default:
// Set background color to black.
break;
}
}
}
کاتلین
override fun onAppEvent(name: String, info: String) {
if (name == "color") {
when (info) {
"green" -> {
// Set background color to green.
}
"blue" -> {
// Set background color to blue.
}
else -> {
// Set background color to black.
}
}
}
}
و، در اینجا کد خلاقانهی مربوطه را مشاهده میکنید که پیامهای رویداد برنامهی رنگی را به شنونده ارسال میکند:
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
برای پیادهسازی رویدادهای برنامه در برنامه API Demo، به مثال رویدادهای برنامه مدیریت تبلیغات مراجعه کنید.
مراحل بعدی
بنرهای تاشو
بنرهای تبلیغاتی تاشو، بنرهایی هستند که در ابتدا به صورت یک لایه بزرگتر ارائه میشوند و دکمهای برای جمع کردن تبلیغ به اندازه کوچکتر وجود دارد. برای بهینهسازی بیشتر عملکرد خود، استفاده از آن را در نظر بگیرید. برای جزئیات بیشتر به بنرهای تبلیغاتی تاشو مراجعه کنید.
بنرهای تطبیقی درون خطی
بنرهای تطبیقی درون خطی در مقایسه با بنرهای تطبیقی لنگری، بنرهای بزرگتر و بلندتری هستند. ارتفاع آنها متغیر است و میتوانند به اندازه صفحه نمایش دستگاه باشند. بنرهای تطبیقی درون خطی برای برنامههایی که تبلیغات بنری را در محتوای قابل پیمایش قرار میدهند، نسبت به بنرهای تطبیقی لنگری توصیه میشوند. برای جزئیات بیشتر به بنرهای تطبیقی درون خطی مراجعه کنید.