نمایش AdMob در اندروید

افزودن AdMob به اپلیکیشن اندروید


روش های متعددی برای کسب درآمد از اپلیکیشن های موبایل وجود دارد که یکی از آنها نمایش تبلیغات است. AdMob سرویس تبلیغاتی گوگل میباشد و در بسیاری از اپلیکیشن ها مورد استفاده قرار گرفته است.

در این مطلب میخواهم شما را با نحوه افزودن AdMob به اپلیکیشن اندروید آشنا کنم، با من همراه باشید.

 

اول از همه باید Google Mobile Ads SDK را در اپلیکیشن قرار دهید تا تبلیغات نمایش داده شوند، در قدم بعدی باید فرمت تبلیغاتی دلخواه خود را انتخاب کنید.

 

پیش نیازها:

  • نسخه 1.0 یا بالاتر از اندروید استودیو
  • لول 14 از Android API
  • ساخت حساب کاربری Google AdMob

 

وارد کردن Mobile Ads SDK

اپلیکیشن ها با استفاده از وابستگی گرادل که به ریپوزیتوری Maven گوگل اشاره میکند، میتوانند Google Mobile Ads SDK را وارد کنند.

به منظور استفاده از ریپوزیتوری، باید در فایل (build.gradle (project-level به آن ارجاع دهید.

 

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

 

اگر Maven در قسمت allprojects وجود ندارد، آن را اضافه کنید.

سپس فایل (build.gradle (app-level را باز کرده و به قسمت dependencies بروید.

 

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.google.android.gms:play-services-ads:17.0.0'
}

 

به این ترتیب، گرادل آخرین نسخه از Mobile Ads SDK را در پروژه اضافه میکند. پس از اینکه این کار انجام شد، sync now را بزنید.

 

فایل AndroidManifest.xml را بروزرسانی کنید

App ID مربوط به Ad Mob را با افزودن تگ  به فایل AndroidManifest.xml اضافه کنید. در قسمت android-value نیز App ID خودتان را قرار دهید.

 


    
        
        
    

 

مقداردهی اولیه MobileAds

پیش از نمایش تبلیغات باید یک نمونه اولیه از Mobile Ads SDK بسازید. برای این کار ()MobileAds.initialize را همراه با App ID فراخوانی کنید. این کار تنها یک بار باید انجام شود و بهتر است به محض راه اندازی اپلیکیشن این فراخوانی را انجام دهید.

در زیر مثالی از فراخوانی تابع ()initialize نمایش داده شده است:

 

جاوا:

package ...
import ...
import com.google.android.gms.ads.MobileAds;

public class MainActivity extends AppCompatActivity {
    ...
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
    }
    ...
}

 

کاتلین:

package ...
import ...
import com.google.android.gms.ads.MobileAds;

class MainActivity : AppCompatActivity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID")
    }
    ...
}

 

انتخاب فرمت تبلیغات

در این مرحله باید فرمت تبلیغاتی دلخواه خود را بسته به کاربرد و تجربه کلی اپلیکیشن انتخاب کنید.

 

تبلیغات بنری:

در این فرمت، تبلیغات به صورت تصاویر مستطیل شکل یا تبلیغات متنی در بخشی از لی اوت نمایش داده میشوند و در حین تعامل کاربر با اپلیکیشن نیز در صفحه باقی مانده و بعد از مدت زمان مشخصی به صورت خودکار بازنشانی میشوند.

 

تبلیغات تمام صفحه:

این تبلیغات کل فضای نمایشی گوشی را اشغال میکنند و کاربر باید به صورت دستی تبلیغ را ببندد. این تبلیغات در حین اجرای اپلیکیشن در بازه های زمانی مشخص مثلا در بین مراحل بازی یا پس از اجرای یک عملیات مشخص در اپلیکیشن نمایش داده میشوند.

 

تبلیغات نیتیو:

با استفاده از این فرمت تبلیغاتی میتوانید عنوان ها و دکمه های دعوت به اقدام را مطابق با سلیقه خود شخصی سازی کنید و فونت، رنگ و سایر جزئیات تبلیغ را خودتان انتخاب نمایید.

 

 تبلیغات ویدیویی جایزه ای:

این تبلیغات، ویدیوهای تمام صفحه هستند و کاربران با مشاهده آنها جایزه میگیرند.

 


 

پیاده سازی تبلیغات بنری:

افزودن AdView به لی اوت

اول از همه باید AdView را به لی اوت اکتیویتی یا فرگمنتی که مایل به نمایش تبلیغ در آن هستید، اضافه کنید که ساده ترین راه، افزودن آن به فایل xml مربوطه است. در مثال زیر AdView به قسمت انتهایی اکتیویتی اضافه شده است:

 




        


        
        

 

میتوانید ویژگی های زیر را تغییر دهید:

ads:adSize : اگر نمیخواهید تبلیغ بنری با سایز استاندارد خود نمایش داده شود، یک مقدار دلخواه در این قسمت وارد کنید.

ads:adUnitID : یک آیدی واحد برای نمایش تبلیغ در اپلیکیشن ست کنید و آن آیدی را در این قسمت قرار دهید. در صورتی که تبلیغات بنری را در اکتیویتی های مختلف نمایش میدهید، هر قسمت باید آیدی مختص به خود را داشته باشد.

 

از کد نیز برای ساخت AdView استفاده کنید:

 

جاوا:

AdView adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
// TODO: Add adView to your view hierarchy.

کاتلین:

val adView = AdView(this)
adView.adSize = AdSize.BANNER
adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"
// TODO: Add adView to your view hierarchy.

 

برای بارگذاری تبلیغ باید متد ()loadAd در کلاس AdView را صدا بزنید:

 

جاوا:

package ...

import ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
}

 

کاتلین:

package ...

import ...
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView

class MainActivity : AppCompatActivity() {

    lateinit var mAdView : AdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713")

        mAdView = findViewById(R.id.adView)
        val adRequest = AdRequest.Builder().build()
        mAdView.loadAd(adRequest)
    }
}

 

جهت استفاده از AdListener در AdView باید متد ()setAdListener را فراخوانی کنید:

 

جاوا:

mAdView.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdFailedToLoad(int errorCode) {
        // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdOpened() {
        // Code to be executed when an ad opens an overlay that
        // covers the screen.
    }

    @Override
    public void onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    @Override
    public void onAdClosed() {
        // Code to be executed when when the user is about to return
        // to the app after tapping on an ad.
    }
});

 

کاتلین:

mAdView.adListener = object: AdListener() {
    override fun onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    override fun onAdFailedToLoad(errorCode : Int) {
        // Code to be executed when an ad request fails.
    }

    override fun onAdOpened() {
        // Code to be executed when an ad opens an overlay that
        // covers the screen.
    }

    override fun onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    override fun onAdClosed() {
        // Code to be executed when when the user is about to return
        // to the app after tapping on an ad.
    }
}

 

از آیدی زیر برای تست نمایش صحیح تبلیغات بنری در اپلیکیشن خود استفاده کنید:

ca-app-pub-3940256099942544/6300978111

 

پیاده سازی تبلیغات تمام صفحه:

تبلیغات تمام صفحه با استفاده از آبجکت های InterstitialAd نمایش داده میشوند. اولین گام مقداردهی اولیه InterstitialAd و مشخص کردن آیدی واحد آن است که برای این کار باید از متد ()onCreate اکتیویتی استفاده کنید.

 

جاوا:

​
package ...

import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends Activity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    }
}

​

 

کاتلین:

mAdView.adListener = object: AdListener() {
    override fun onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    override fun onAdFailedToLoad(errorCode : Int) {
        // Code to be executed when an ad request fails.
    }

    override fun onAdOpened() {
        // Code to be executed when an ad opens an overlay that
        // covers the screen.
    }

    override fun onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    override fun onAdClosed() {
        // Code to be executed when when the user is about to return
        // to the app after tapping on an ad.
    }
}

 

هر آبجکت InterstitialAD میتوانید چندین تبلیغ تمام صفحه را در اپلیکیشن نمایش دهد، از این رو تنها یک بار باید آن را بسازید.

از آیدی زیر برای تست نمایش صحیح تبلیغات تمام صفحه در اپلیکیشن خود استفاده کنید:

ca-app-pub-3940256099942544/1033173712

 

پیاده سازی تبلیغات نیتیو:

در تبلیغات نیتیو، تبلیغ با استفاده از کامپوننت های رابط کاربری مختص پلتفرم نمایش داده میشوند و میتوانید آنها را مطابق ظاهر کلی اپلیکیشن شخصی سازی کنید. هنگام بارگذاری تبلیغ نیتیو، اپلیکیشن یک آبجکت NativeAd میگیرد.

دو نوع تبلیغ نیتیو وجود دارد، یکی مربوط به نصب سایر اپلیکیشن هاست و یکی تبلیغ محتوایی میباشد که هر دو نوع به کمک UnifiedNativeAd نمایش داده میشوند.

تبلیغات نیتیو با استفاده از کلاس AdLoader که کلاس Builder مختص به خودش را دارد، بارگذاری میشوند. با افزودن لیسنر به AdLoader، اپلیکیشن نوع تبلیغ نیتیو را تشخیص میدهد.

 

ساخت AdLoader

نحوه ساخت AdLoader در قطعه کد زیر نشان داده شده است:

 

جاوا:

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
        @Override
        public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

 

کاتلین:

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forUnifiedNativeAd { ad : UnifiedNativeAd ->
            // Show the ad.
        }
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(errorCode: Int) {
                // Handle the failure by logging, altering the UI, and so on.
            }
        })
        .withNativeAdOptions(NativeAdOptions.Builder()
                // Methods in the NativeAdOptions.Builder class can be
                // used here to specify individual options settings.
                .build())
        .build()

 

()forUnifiedNativeAd:

این متد درخواست نمایش تبلیغ میدهد و وقتی تبلیغ با موفقیت بارگذاری شد متد ()UnifiedNativeAdLoaded صدا زده میشود.

 

استفاده از AdListener همراه با AdLoader

میتوان از تابع withAdListener برای ایجاد AdListener استفاده کرد. AdListener تنها پارامتر تابع withAdListener است که توسط AdLoader فراخوانی میشود.

عملکرد AdListeners در تبلیغات نیتیو با تبلیغات بنری و تمام صفحه متفاوت است و متد ()onAdLoaded از AdListener در صورت بارگذاری موفق تبلیغ نیتیو فراخوانی نمیشود.

 

جاوا:

.withAdListener(new AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

 

کاتلین:

.withAdListener(object : AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

 

تنظیمات:

()withNativeAdOptions:

آخرین تابع اختیاری که در AdLoader استفاده شده، withNativeAdOptions میباشد.

آبجکت withNativeAdOptions تنظیمات خاصی برای نمایش تبلیغ تعیین میکند:

 

جاوا:

.withNativeAdOptions(new NativeAdOptions.Builder()
    // Methods in the NativeAdOptions.Builder class can be
    // used here to specify individual options settings.
    .build()
)

 

کاتلین:

.withNativeAdOptions(NativeAdOptions.Builder()
    // Methods in the NativeAdOptions.Builder class can be
    // used here to specify individual options settings.
    .build()
)

 

()setImageUrlsForImageAssets:

assetهای تصویری مورد استفاده در تبلیغات نیتیو با استفاده از NativeAd.Image که شامل یک Drawable به همراه Uri است برگردانده میشوند. اگر مقدار false را برای آن ست کنیم، SDK به صورت خودکار مقادیر Drawable و Uri را پر میکند، اما در صورتی که این مقدار true باشد، تنها Uri مقداردهی میشود و میتوانید عکس واقعی را دانلود کنید.

 

()setImageOrientation:

گاهی اوقات لازم است از عکس های گوناگون برای جهت های مختلف نمایش استفاده کنیم که در این صورت باید برای هریک از این حالت ها مقادیر ثابت ORIENTATION_PORTRAIT ،ORIENTATION_LANDSCAPE یا ORIENTATION_ANY را ست کنیم. در صورت عدم فراخوانی این متد، مقدار ORIENTAION_LADNSCAPE به صورت پیش فرض مورد استفاده قرار میگیرد.

 

()setRequestMultipleImages:

بعضی از assetهای تصویری به جای یک عکس شامل یک سری عکس هستند و با ست کردن مقدار true برای این متد، اپلیکیشن میتواند چندین عکس را نمایش دهد، اما مقدار false، تنها عکس اول از مجموعه را استفاده میکند.

 

()setAdChoicesPlacement:

محل قرارگیری AdChoices به صورت پیش فرض در گوشه بالای سمت راست است، اما میتوان هریک از چهار مقدار زیر را برای آن ست کرد:

 

ADCHOICES_TOP_LEFT
ADCHOICES_TOP_RIGHT
ADCHOICES_BOTTOM_RIGHT
ADCHOICES_BOTTOM_LEFT
 

()setVideoOptions:

برای افزودن تنظیمات برای تبلیغات ویدیویی نیتیو مورد استفاده قرار میگیرد.

 

بارگذاری تبلیغ

دو متد برای بارگذاری تبلیغ وجود دارد:

 

()loadAd : این متد در حال حاضر تنها برای تبلیغات AdMob قابل استفاده است و برای نمایش تنها یک تبلیغ درخواست میفرستد.

 

جاوا:

adLoader.loadAd(new AdRequest.Builder().build());

 

کاتلین:

adLoader.loadAd(AdRequest.Builder().build())

 

()loadAds : برای تبلیغات واسطه از این متد استفاده کنید. این متد برای نمایش چندین تبلیغ (حداکثر 5 عدد) درخواست میفرستد.

 

جاوا:

adLoader.loadAds(new AdRequest.Builder().build(), 3);

 

کاتلین:

adLoader.loadAds(AdRequest.Builder().build(), 3)

 

هر دو متد یک آبجکت AdRequest را به عنوان اولین پارامتر خود مورد استفاده قرار میدهند.

()loadAds یک پارامتر اضافه دیگر را نیز میگیرد که همان تعداد تبلیغاتی است که باید نمایش داده شود.

در مثال زیر نحوه چک کردن ()isLoading در ()onUnifiedNativeAdLoaded نمایش داده شده است:

 

جاوا:

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
    @Override
    public void onUnifiedNativeAdLoaded(UnifiedNativeAd ad) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();


adLoader.loadAds(new AdRequest.Builder().build(), 3);

 

کاتلین:

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forUnifiedNativeAd {
        ...
        // some code that displays the ad.
        ...

        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()


adLoader.loadAds(AdRequest.Builder().build(), 3)

 

از آیدی زیر برای تست نمایش صحیح تبلیغات نیتیو در اپلیکیشن خود استفاده کنید:

ca-app-pub-3940256099942544/2247696110

 

پیاده سازی تبلیغات ویدیویی جایزه ای:

مقداردهی اولیه Rewarded Video Ads

 

جاوا:

package ...

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.reward.RewardedVideoAd;

public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener {
    private RewardedVideoAd mRewardedVideoAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, "ca-app-pub-3940256099942544/5224354917");

        // Use an activity context to get the rewarded video instance.
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(this);
    }
    ...
}

 

کاتلین:

package ...

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.reward.RewardedVideoAd

class MainActivity : AppCompatActivity(), RewardedVideoAdListener {

private lateinit var mRewardedVideoAd: RewardedVideoAd

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this, "ca-app-pub-3940256099942544/5224354917")

        // Use an activity context to get the rewarded video instance.
        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this)
        mRewardedVideoAd.rewardedVideoAdListener = this
    }
    ...
}

 

توسط متد ()MobileAds.getReawardedVideoInstance میتوانید آبجکت RewardedVideoAd را بازیابی کنید.

برای پیاده سازی سایر ایونت های مورد استفاده در تبلیغات ویدیویی جایزه ای باید از RewardedVideoAdListener استفاده کنید. این لیسنر با استفاده از متد setRewardedAdListener ست میشود.

 

جاوا:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MobileAds.initialize(this, "ca-app-pub-3940256099942544/5224354917");

    // Use an activity context to get the rewarded video instance.
    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
    mRewardedVideoAd.setRewardedVideoAdListener(this);

    loadRewardedVideoAd();
}
private void loadRewardedVideoAd() {
    mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917",
            new AdRequest.Builder().build());
}

 

کاتلین:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    MobileAds.initialize(this, "ca-app-pub-3940256099942544/5224354917")

    // Use an activity context to get the rewarded video instance.
    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this)
    mRewardedVideoAd.rewardedVideoAdListener = this

    loadRewardedVideoAd()
}

private fun loadRewardedVideoAd() {
    mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917",
            AdRequest.Builder().build())
}

 

پیشنهاد میشود که متد ()loadAd زودتر از سایر متدها صدا زده شود تا ویدیو فرصت بارگذاری داشته باشد.

از آیدی زیر برای تست نمایش صحیح تبلیغات ویدیویی جایزه ای در اپلیکیشن خود استفاده کنید:

ca-app-pub-3940256099942544/5224354917

 

اینها را هم بخوانید