大部分 Android APP 的商業模式都是使用免費增值模式,也就是基本功能免費,進階功能付費。在這種模式下,除了依靠使用者付費之外,通常也會插入廣告來創造更高的收益。而 Google AdMob 就能完成這件事情,且 Android 與 iOS 皆能使用,本文將以 Android 示範如何在 Android APP 內插入 Google 廣告。

申請 Google AdMob

使用 Google AdMob 必需先申請帳號,並建立應用程式廣告單元,一個應用程式可以包含多個廣告單元。

申請帳號

先點擊下方連結,至 Google AdMob 官網申請帳號。

點擊開始使用按鈕。

選擇國家或地區時區,在點擊建立 AdMob 帳戶按鈕。

建立應用程式

點擊加入第一個應用程式按鈕。

選擇您的 APP 平台,如果同款 APP 同時推出 Android 及 iOS 雙版本,這樣必需分開建立兩個應用程式。本文是以 Android 做示範,所以選擇Android,並點擊繼續按鈕。

輸入一個自己看得懂且好辨識的應用程式名稱,並點擊新增應用程式按鈕。

點擊完成按鈕。

建立廣告單元

點擊左邊選單中的廣告單元,再點選中間的新增廣告單元

目前 Google AdMob 提供 6 種廣告單元,分別是橫幅廣告、插頁式廣告、插頁式獎勵廣告、獎勵廣告、原生進階及應用程式開放。本文將示範最常見的底邊橫幅廣告及獎勵廣告,點擊橫幅廣告下方的選取按鈕。

輸入一個自己看得懂且好辨識的廣告單元名稱,並點擊建立廣告單元按鈕。

請先將下圖中應用程式 ID廣告單元 ID複製起來,後續寫程式時會用到。複製完成後,點擊完成按鈕即可。

建立獎勵廣告的廣告單元流程也大同小異,這邊就不贅述了,如果建立時有遇到問題,歡迎隨時提出討論。

設定應用程式

必要條件

  • 使用 Android Studio 3.2 或以上版本
  • minSdkVersion 19 或以上版本
  • compileSdkVersion 28 或以上版本

新增相關套件

編輯應用程式層級的 build.gradle 檔案,導入 Google AdMob 所需的依附元件。

                
                    dependencies {
                        implementation 'com.google.android.gms:play-services-ads:21.4.0'
                    }
                
            

設定 AdMod 應用程式 ID

開啟 AndroidManifest.xml 檔案,並將剛剛申請廣告單元時,取得的應用程式 ID 輸入至檔案中。

                
                    <manifest>
                        <application>
                            <meta-data
                                android:name="com.google.android.gms.ads.APPLICATION_ID"
                                android:value="ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx" />
                        </application>
                    </manifest>
                
            

底邊橫幅廣告

建立樣板

將下方程式碼貼至您要呈現廣告的地方,並將 ads:adUnitId 屬性值,置換成剛剛取得的廣告單元 ID。

非常重要,在測試的時候千萬不要使用正式的廣告單元 ID,請一律使用 ca-app-pub-3940256099942544/6300978111,否則 Google 帳號可能會被停權。

                
                    <com.google.android.gms.ads.AdView
                        xmlns:ads="http://schemas.android.com/apk/res-auto"
                        android:id="@+id/adView"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerHorizontal="true"
                        android:layout_alignParentBottom="true"
                        ads:adSize="BANNER"
                        ads:adUnitId="ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx">
                    </com.google.android.gms.ads.AdView>
                
            

撰寫程式碼

接下來,根據下方程式碼載入廣告即可。

                
                    public class MainActivity extends AppCompatActivity {
                        private ActivityMainBinding binding;
                        private AdView adView;

                        @Override
                        protected void onCreate(Bundle savedInstanceState) {
                            super.onCreate(savedInstanceState);

                            // Binding
                            binding = ActivityMainBinding.inflate(getLayoutInflater());
                            setContentView(binding.getRoot());

                            // 廣告
                            MobileAds.initialize(this, initializationStatus -> {});
                            AdRequest adRequest = new AdRequest.Builder().build();
                            adView = binding.adView;
                            adView.loadAd(adRequest);

                            // 加入事件
                            adView.setAdListener(new AdListener() {
                                @Override
                                public void onAdClicked() {
                                    super.onAdClicked();
                                    // 當使用者點擊廣告時。
                                }

                                @Override
                                public void onAdOpened() {
                                    super.onAdOpened();
                                    // 當使用者開啟廣告 (開啟瀏覽器)
                                }

                                @Override
                                public void onAdClosed() {
                                    super.onAdClosed();
                                    // 當使用者關閉廣告 (關閉瀏覽器)
                                }

                                @Override
                                public void onAdLoaded() {
                                    super.onAdLoaded();
                                    // 當廣告完成載入
                                }

                                @Override
                                public void onAdImpression() {
                                    super.onAdImpression();
                                    // 當廣告成功曝光
                                }

                                @Override
                                public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                                    super.onAdFailedToLoad(loadAdError);
                                    // 當廣告載入失敗,可透過 loadAdError.getResponseInfo() 查看原因
                                }
                            });
                        }

                        @Override
                        public void onPause() {
                            if (adView != null) {
                                adView.pause();
                            }
                            super.onPause();
                        }

                        @Override
                        public void onResume() {
                            super.onResume();
                            if (adView != null) {
                                adView.resume();
                            }
                        }

                        @Override
                        public void onDestroy() {
                            if (adView != null) {
                                adView.destroy();
                            }
                            super.onDestroy();
                        }
                    }
                
            

獎勵廣告

撰寫程式碼

獎勵廣告稍微比較複雜一點,必需先等待廣告載入,當廣告載入後,將廣告物件綁定在變數中,等待使用者點擊按鈕並呈現廣告,廣告關閉後再給予獎勵,最後重新呼叫廣告載入,流程整理如下:

  • 流程一:載入畫面,於 onCreate() 方法中,呼叫廣告載入。
  • 流程二:廣告載入後,將廣告物件綁定在變數。
  • 流程三:使用者點擊按鈕後播放廣告。
  • 流程四:廣告關閉後,給予獎勵,重新呼叫廣告載入。

知道流程後,接下來就直接附上程式碼,提供您參考。

                
                    public class MainActivity extends AppCompatActivity {
                        private ActivityMainBinding binding;
                        private RewardedAd rewardedAd;

                        // 廣告單元 ID,測試時,請使用 ca-app-pub-3940256099942544/6300978111
                        private String adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx";

                        @Override
                        protected void onCreate(Bundle savedInstanceState) {
                            super.onCreate(savedInstanceState);

                            // Binding
                            binding = ActivityMainBinding.inflate(getLayoutInflater());
                            setContentView(binding.getRoot());

                            // 呼叫廣告載入
                            MobileAds.initialize(context, initializationStatus -> {});
                            loadRewardedAd();

                            // 設定按鈕事件,點擊按鈕後播放廣告
                            binding.button.setOnClickListener(view -> {
                                if (rewardedAd == null) {
                                    // 當廣告尚未載入時
                                } else {
                                    // 當廣告載入成功時,播放廣告
                                    rewardedAd.setFullScreenContentCallback(
                                        new FullScreenContentCallback() {
                                            @Override
                                            public void onAdShowedFullScreenContent() {
                                                // 當廣告已經顯示時
                                            }

                                            @Override
                                            public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
                                                // 當廣告顯示失敗,重新呼叫廣告載入
                                                rewardedAd = null;
                                                loadRewardedAd();
                                            }

                                            @Override
                                            public void onAdDismissedFullScreenContent() {
                                                // 當廣告視窗關閉時,重新呼叫廣告載入
                                                rewardedAd = null;
                                                loadRewardedAd();
                                            }
                                        }
                                    );
                                    rewardedAd.show(this, rewardItem -> {
                                        // 廣告播放完成,撰寫給予使用者獎勵的程式碼
                                    });
                                });
                            });
                        }

                        // 廣告載入方法
                        public void loadRewardedAd() {
                            if (rewardedAd == null) {
                                AdRequest adRequest = new AdRequest.Builder().build();
                                RewardedAd.load(
                                    context,
                                    adUnitId,
                                    adRequest,
                                    new RewardedAdLoadCallback() {
                                        @Override
                                        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                                            // 載入失敗
                                            rewardedAd = null;
                                        }

                                        @Override
                                        public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
                                            // 載入成功,綁定在全域變數
                                            MainActivity.this.rewardedAd = rewardedAd;
                                        }
                                    }
                                );
                            }
                        }
                    }
                
            

限制播放頻率

如果沒有限制廣告播放頻率,每次點擊按鈕都一直播放廣告,可能會造成使用者反感。好在 Google AdMob 後台就有提供此功能,這樣我們就不用自己寫程式碼實作了。

要限制獎勵廣告播放頻率,可以至 Google AdMob 後台的廣告單元進行設定,可限制廣告每分鐘、每小時或每天對同一位使用者顯示的次數。