Android

Tích hợp quảng cáo Admob vào ứng dụng Android

Giới Thiệu

AdMob là nền tảng quảng cáo trên thiết bị di động cung cấp dịch vụ cho các nhà quảng cáo, nhà xuất bản, đại lý và nhà phát triển ứng dụng. Trang này bao gồm các chính sách áp dụng cụ thể cho các nhà quảng cáo muốn quảng cáo trên nền tảng AdMob. Trong Android để tích hợp quảng cáo Admod vào như thế nào thì bài viết này sẽ làm rõ.

Các loại quảng cáo AdMob

AdMob được hỗ trợ trong Android dưới hai dạng đó là Banner và Interstitial (dạng quảng cáo fullscreen).

Dạng quảg cáo Banner

admob_8

 

Dạng quảng cáo Interstitial

admob_9

Ad Units

Ứng với mỗi banner quảng cáo hay Interstitial sẽ có 1 cái Id được gọi là Ad Unit. Để có thể tích hợp quảng cáo vào ứng dụng bạn phải tạo đơn vị quảng cáo trên trang chủ Admob.

Các bước làm như sau:

Bước 1: Tạo một tài khoản AdMob nếu chưa có tại: https://apps.admob.com

Bước 2: Chọn sang tab Monetize và nhấn vào Monetize new app

admod_2

Bước 3: Nhập tên App và chọn nền tảng tích hợp quảng cáo nền tảng (ở đây tôi chọn Android). Và nhấn Add app

admob_3

Bước 4: Chọn loại quảng cáo vào nhập tên quảng cáo (tên này bạn dùng để quản lý sau khi gắn quảng cáo để xem số lượt view, số lượt click) và nhấn Save.

admob_4

Bước 5: Đăng kí thành công chúng ta sẽ thấy một chuổi dài như dưới đây thì đó là Ad Unit dùng để tích hợp vào Android.

admob_5

Tôi tạo tiếp một loại quảng cáo Interstitial nữa và kết quả như dưới đây:

admob_6

Tiếp theo, chúng ta sẽ tiến hành tích hợp quảng cáo vào ứng dụng android sau khi đã tạo thành công Ad Unit

Tích hợp AdMob vào ứng dụng Android

Trước tiên tôi khởi tạo một project có tên là AdModAds để hướng dẫn trong bài viết này.

admob_0

Tiếp theo chúng ta mở file build-gradle (Module: app) và thêm dòng dưới đây vào trong dependencies

Và nhấn Sync Now để Android Studio download thư viện và tiến hành cài đặt.

admod_1

Tôi tạo thêm 1 activity nữa có tên là FullAdsActivity để hiển thị quảng cáo dạng fullscreen Interstitial.

Ở MainActivity tôi sẽ hiển thị quảng cáo dạng banner ở phía dưới và một button để mở FullAdsActivity .

Vì việc load ads cần sử dụng đến internet nên chúng ta phải cấp quyền truy cập internet trong file manifest.xml như sau:

Thêm Ad Unit vừa mới tạo ở trên vào thư mục string.xml trong values:

Load Ads Banner

Trong file activity_main.xml chúng ta khai báo một AdView như sau:

Với Adsize sẽ có những hằng sau đây:

Size (WxH) Description Availability AdSize Constant
320×50 Standard Banner Phones and Tablets BANNER
320×100 Large Banner Phones and Tablets LARGE_BANNER
300×250 IAB Medium Rectangle Phones and Tablets MEDIUM_RECTANGLE
468×60 IAB Full-Size Banner Tablets FULL_BANNER
728×90 IAB Leaderboard Tablets LEADERBOARD
Screen width x 32|50|90 Smart Banner Phones and Tablets SMART_BANNER

Smart Banner sẽ căn theo chiều cao của device để xác định chiều cao của AdView.

Nếu tạo bằng code Java bạn có thể tạo như sau

Trong file MainActivity.java

Một số Event của AdView

onAdLoaded

Phương thức này được gọi ngay sau khi ads được load xong.

onAdFailedToLoad

Phương thức này được gọi khi request ads fail. Trong phương thức này chúng ta có thể request lại ads mới

onAdOpened

Phương thức này được gọi khi người dùng click vào ads.

onAdLeftApplication

Phương thức này được gọi ngay sau khi onAdOpened được gọi. Activity  hiển thị quảng cáo được mở lên.

onAdClosed

Phương thức này được gọi khi người dùng back từ activity quảng cáo về.

Load Ads Interstitial

So với Ads Banner thì Interstitial không cần khởi tạo View mà chỉ sử dụng class InterstitialAd sau đó set AdUnitId và sử dụng AdRequest để load ads như Ads Banner.

Nếu ứng dụng của các bạn đang test ads  thì nên khởi tạo AdRequest như sau:

Với Id được lấy ở LogCat như hình dưới đây:

admob_7

do đó AdRequest trong ví dụ demo của tôi là:

Kết quả sau khi run app với chế độ test ads:

admob_10admob_11

 

 

 

Các bạn có thể download Source demo ở đây:

Kết luận

Trên đây tôi đã hướng dẫn các bạn tích hợp quảng cáo AdMob và ứng dụng Android một cách chi tiết và cụ thể. Trong ứng dụng, tùy vào UI mà bạn bên đạt ads ở vị trí nào tránh làm phiền người dùng. Nếu có bất cứ thắc mắc nào các bạn có thể để lại câu hỏi ở phần bình luận.

42 thoughts on “Tích hợp quảng cáo Admob vào ứng dụng Android”

  1. ad ơi cho e hỏi e thử làm y như bài hướng dẫn rồi mà khi e build thẳng trên máy e. (chưa up store) sao lại k thấy load được quảng cáo ạ?

      1. unitID của mình đăng kí đc 2 tuần mà thấy không hiện ads, trong khi đó mình sử dụng unitID của bạn thì hiện ads

          1. chạy máy ảo thì báo fail không hiện ads ở cả 2 unit của bạn và mình. còn trên máy thật thì chỉ unit của bạn show ads

      2. admin ơi làm dùm mình hết được không mình trả tiền công. mình không biết làm số dien thoại của mình là 01645507812

    1. Trong một app bạn có thể gán các loại ads khác nhau (Banner, Interstitial và mới đây đã có Native Ads Express). Tuy nhiên bạn gắn làm sao cho phù hợp, không gây khó chịu cho người dùng là được.

  2. Mình có một app, lúc upload lên goog play mình đặt tên dài quá, giờ muốn sửa lại tên app thì phải làm thế nào à bạn? Nhờ bạn chia sẻ cho mình ít kinh nghiệm được ko?

    1. Bạn thử thay đổi tên trong label của AndroidManifest.xml xem sao rồi lúc up APK update bạn sửa lại name. Tuy nhiên bạn không thể sửa package của ứng dụng một khi đã up lên store.

  3. Cho mình hỏi tý xíu. Có phải trước khi phát hành apk thì mình phải làm công đoạn trên như bài hướng dẫn hay sao? Mà nếu làm trước khi phát hành thì làm sao lấy số ví dụ như “ca-app-pub-9013400443538942/4253088910”?

  4. Cho mình hỏi thêm cái này với. Sao mình làm quảng cáo rồi nhưng chạy trên máy ảo genymotion thì thấy quảng cáo, còn chạy trên điện thoại thì lại không thấy? Giờ làm sao để nó hiện thị ra?

  5. Mình phát hành ứng dụng rồi nhưng chưa có quảng cáo. Vậy để kiếm tiền từ quảng cáo mình phải làm lại ứng dụng và kèm quảng cáo. Sau đó cập nhật lại apk. Vậy có đúng không? Vì mình làm chưa được nên mới hỏi vậy.

  6. Chào! Mình làm được quảng cáo trên ứng dụng của mình rồi! Giờ mình làm tiếp tục, nhưng gặp lỗi. Lỗi như thế này: (3 dòng sau cùng)
    Invalid unknown request error: [Cannot determine request type. Is your ad unit id correct?]
    There was a problem getting an ad response. ErrorCode: 1
    Failed to load ad: 1
    Bạn giúp mình tý nhé! Cảm ơn!

  7. Mình sửa được lỗi trên rồi!
    Thay vì như thế này: ads:adUnitId=”@string/banner_ad_unit_id”
    Ta sửa lại như sau: ads:adUnitId=”ca-app-pub-9013400443538949/7177385765″
    Dòng trên nằm trong: com.google.android.gms.ads.AdView của activity_main.xml

  8. Nhân tiện bài viết của Nguyễn Nghĩa, mình xin nói thêm cái này chút. Sau khi có ad_unit_id trong Admod mình phải chờ mấy tiếng đồng hồ nữa. Sau đó trong project việc tích hợp quảng cáo mới thành công.

  9. Bạn ơi cho mình hỏi, mình chỉ cần thêm quảng cáo banner thôi không cần full màn hình, thì bỏ những bước nào vào code bỏ cái nào mới học nên không biết, cám ơn bạn nhiều

      1. Mình làm rồi và chạy máy ảo không báo lỗi gì, nhưng vẫn không hiện quảng cáo quả thật mình bó tay ak, bạn giúp đỡ mình nhé, cám ơn bạn nhiều. các bước mình làm như sau.
        1. build.gradle: compile ‘com.google.firebase:firebase-ads:10.0.1’
        compile ‘com.google.android.gms:play-services-ads:10.0.1’
        2. String.xml: ca-app-pub-4022134690596020/4653043195
        3. AndroidManifest.xml:

        4. MainActivity; import com.google.android.gms.ads.AdRequest;
        import com.google.android.gms.ads.AdView;
        import com.google.android.gms.ads.MobileAds;
        MobileAds.initialize(getApplicationContext(), “ca-app-pub-4022134690596020/4653043195”);
        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        – Không báo lỗi mà không load quảng cáo được thì mình bó tay lun ak, ad ơi giúp giùm nha ad
        https://upanh123.com/image/ocM4

  10. Mình thực hiện các phương thức bình thường tới Pt add quảng cáo avBanner.loadAd(adRequest) là bị lỗi. thông thường lỗi này là do nguyên nhân gì vậy bạn. thanks bạn. Nó cứ báo DEAD.

      1. Cảm ơn Bạn Bảo Huy. Mình fix được lỗi đó rồi. Nhưng nó lại phát sinh chuyện khác. Mình Load Ads full thi được nhưng load Ads unit banner mà nó không hiển thị là lý do gì vậy bạn. Cảm ơn bạn giúp đỡ.!

        1. Bạn đã thêm ID vào trong ở phần XML chưa? Ví dụ:
          <com.google.android.gms.ads.AdView
          android:id="@+id/av_banner"
          android:layout_alignParentBottom="true"
          android:layout_centerHorizontal="true"
          ads:adSize="SMART_BANNER"
          ads:adUnitId="@string/ad_unit_banner" //

  11. Mình đã thêm ID vào xml rồi. nhưng vẫn không lên. Sau khi mình lấy ID test quang cáo, mình thêm
    adRequest = new AdRequest.Builder().addTestDevice(“3FF2F59DD659BD5549BE5C8C83A348D3”).build();
    trên MainActivity va FullAdsActivity luon mà vẩn ko hiển thị được Ads Banner trên máy thật. mặc dù full_ads vẫn chạy . còn unit_banner thì èo. Hông chạy…

    1. Bạn kiểm tra lại coi cái AdView có bị các View khác chiếm mất chỗ trên màn hình không? Nếu không thì bạn gửi một phần code của bạn lên cho tụi mình coi qua thử cho.

  12. import com.google.android.gms.ads.AdListener;
    import com.google.android.gms.ads.AdRequest;
    import com.google.android.gms.ads.AdSize;
    import com.google.android.gms.ads.AdView;

    public class MainActivity extends AppCompatActivity {
    private static final String TAG = “MainActivity”;
    private AdRequest adRequest;
    private Button openInterstitilads;

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

    final AdView av_Banner = new AdView(this);
    av_Banner.setAdSize(AdSize.SMART_BANNER);
    av_Banner.setAdUnitId(getResources().getString(R.string.ad_unit_banner));

    //av- gui message load ads
    av_Banner.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
    super.onAdLoaded();
    Log.i(TAG, “onAdLoaded”);

    }

    @Override
    public void onAdFailedToLoad(int i) {
    super.onAdFailedToLoad(i);
    Log.i(TAG, “onAdFailedToLoad”);
    }

    @Override
    public void onAdOpened() {
    super.onAdOpened();
    Log.i(TAG, “onAdOpened”);
    }

    @Override
    public void onAdLeftApplication() {
    super.onAdLeftApplication();
    Log.i(TAG, “onAdLeftApplication”);
    }

    @Override
    public void onAdClosed() {
    super.onAdClosed();
    Log.i(TAG, “onAdClosed”);
    }
    });

    //
    adRequest = new AdRequest.Builder().addTestDevice(“3FF2F59DD659BD5549BE5C8C83A348D3”).build();

    //load ads
    av_Banner.loadAd(adRequest);

    openInterstitilads = (Button) findViewById(R.id.btnInterstitilads);
    //su kien btn
    openInterstitilads.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, FullAdsActivity.class);
    startActivity(intent);
    }
    });

    }
    }

  13. Minh dung key addTestDevice(“3FF2F59DD659BD5549BE5C8C83A348D3”).build(); de kiem tra cho ca banner va full hay moi cai banner co mot key khac va moi ful ads co mot khi khac vay ban. Minh chi so minh sai o cho nay la co 2 key cho hai addtest Form khac nhau gom banner la 1 key khac va fullAds la mot key khac. cam on ban.

    1. Xin lỗi bạn vì mấy ngày qua mình bận quá. Bạn nên add cái AdView trong XML cho dễ. Còn bạn muốn dùng constructor khởi tạo 1 view thì bạn phải add cái View đó vào trong activity parent view chứ? Vấn đề rất đơn giản về View và không có liên quan gì đến AdMob cả.

  14. Chào bạn, mình làm theo hướng dẫn xong quảng cáo không hiển thị được. Nó hiển thị lỗi “errorCode3”

  15. Cho m hỏi sao m debug thì quảng cáo hiện ok, nhưng release submit lên chplay thì lại ko hiện v b? M submit rồi có cần phải chờ bao lâu ko?

  16. Bạn cho hỏi: Quảng cáo Interstitial nên cho hiển thị tối đa bao nhiêu lần trong ngày thì dc vậy, vì lúc trước mình có 1 app, admob báo “lưu lượng truy cập k hợp lệ” gì đó rồi khóa admob lun

    1. Không giới hạn bạn à. Vấn đề của bạn có thể là do bạn cố tình click vào quảng cáo. Điều này là vi phạm chính sách của họ.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.