獎勵廣告

透過獎勵廣告,您可以在使用者與影片廣告/可試玩廣告互動或填寫問卷調查後,提供應用程式內商品做為獎勵。

必要條件

  • 完成入門指南的步驟。
  • 一律使用測試廣告進行測試

    建構及測試應用程式時,請務必使用測試廣告,而非實際的正式廣告。否則帳戶可能會遭到停權。

    如要載入測試廣告,最簡單的方法是使用 Android 獎勵廣告專用的測試廣告單元 ID:

    ca-app-pub-3940256099942544/5224354917

    這個 ID 經過特別設定,每次請求都會傳回測試廣告。在編寫程式碼、測試及偵錯階段,您可以在應用程式中自由使用,發布應用程式前,請務必用自己的廣告單元 ID 替換這類 ID。

    如要進一步瞭解 Google Mobile Ads SDK (Beta 版) 測試廣告的運作方式,請參閱「測試廣告」。

    載入廣告

    如要載入獎勵廣告,請呼叫 RewardedAd 的靜態 load() 方法,並傳遞 AdLoadCallback<RewardedAd> 來接收成功載入的廣告,或處理可能發生的錯誤。

    Kotlin

    import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
    import com.google.android.libraries.ads.mobile.sdk.common.AdRequest
    import com.google.android.libraries.ads.mobile.sdk.common.FullScreenContentError
    import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError
    import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardedAd
    import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardedAdEventCallback
    import com.google.android.libraries.ads.mobile.sdk.MobileAds
    
    class RewardedActivity : Activity() {
      private var rewardedAd: RewardedAd? = null
    
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        // Load ads after you inititalize Google Mobile Ads SDK (beta).
        RewardedAd.load(
          AdRequest.Builder(AD_UNIT_ID).build(),
          object : AdLoadCallback<RewardedAd> {
            override fun onAdLoaded(ad: RewardedAd) {
              // Rewarded ad loaded.
              rewardedAd = ad
            }
    
            override fun onAdFailedToLoad(adError: LoadAdError) {
              // Rewarded ad failed to load.
              rewardedAd = null
            }
          },
        )
      }
    
      companion object {
        // Sample rewarded ad unit ID.
        const val AD_UNIT_ID = "ca-app-pub-3940256099942544/5224354917"
      }
    }
    

    Java

    import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback;
    import com.google.android.libraries.ads.mobile.sdk.common.AdRequest;
    import com.google.android.libraries.ads.mobile.sdk.common.FullScreenContentError;
    import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;
    import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardedAd;
    import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardedAdEventCallback;
    import com.google.android.libraries.ads.mobile.sdk.MobileAds;
    
    class RewardedActivity extends Activity {
      // Sample rewarded ad unit ID.
      private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/5224354917";
      private RewardedAd rewardedAd;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Load ads after you initialize Google Mobile Ads SDK (beta).
        RewardedAd.load(
            new AdRequest.Builder(AD_UNIT_ID).build(),
            new AdLoadCallback<RewardedAd>() {
              @Override
              public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
                // Rewarded ad loaded.
                AdLoadCallback.super.onAdLoaded(rewardedAd);
                RewardedActivity.this.rewardedAd = rewardedAd;
              }
    
              @Override
              public void onAdFailedToLoad(@NonNull LoadAdError adError) {
                // Rewarded ad failed to load.
                AdLoadCallback.super.onAdFailedToLoad(adError);
                rewardedAd = null;
              }
            }
        );
      }
    }
    

    設定 RewardedAdEventCallback

    RewardedAdEventCallback 會處理與顯示 RewardedAd 相關的事件。顯示獎勵廣告前,請務必設定回呼:

    Kotlin

    // Listen for ad events.
    rewardedAd?.adEventCallback =
      object : RewardedAdEventCallback {
        override fun onAdShowedFullScreenContent() {
          // Rewarded ad did show.
        }
    
        override fun onAdDismissedFullScreenContent() {
          // Rewarded ad did dismiss.
          rewardedAd = null
        }
    
        override fun onAdFailedToShowFullScreenContent(
          fullScreenContentError: FullScreenContentError
        ) {
          // Rewarded ad failed to show.
          rewardedAd = null
        }
    
        override fun onAdImpression() {
          // Rewarded ad did record an impression.
        }
    
        override fun onAdClicked() {
          // Rewarded ad did record a click.
        }
      }
    

    Java

    // Listen for ad events.
    rewardedAd.setAdEventCallback(
        new RewardedAdEventCallback() {
          @Override
          public void onAdShowedFullScreenContent() {
            // Rewarded ad did show.
            RewardedAdEventCallback.super.onAdShowedFullScreenContent();
          }
    
          @Override
          public void onAdDismissedFullScreenContent() {
            // Rewarded ad did dismiss.
            RewardedAdEventCallback.super.onAdDismissedFullScreenContent();
            rewardedAd = null;
          }
    
          @Override
          public void onAdFailedToShowFullScreenContent(
              @NonNull FullScreenContentError fullScreenContentError) {
            // Rewarded ad failed to show.
            RewardedAdEventCallback.super.onAdFailedToShowFullScreenContent(
                fullScreenContentError);
            rewardedAd = null;
          }
    
          @Override
          public void onAdImpression() {
            // Rewarded ad did record an impression.
            RewardedAdEventCallback.super.onAdImpression();
          }
    
          @Override
          public void onAdClicked() {
            // Rewarded ad did record a click.
            RewardedAdEventCallback.super.onAdClicked();
          }
        }
    );
    

    顯示廣告

    請使用 show() 方法顯示獎勵廣告,並透過 OnUserEarnedRewardListener 物件來處理獎勵事件。

    Kotlin

    // Show the ad.
    rewardedAd?.show(
      this@RewardedActivity,
      object : OnUserEarnedRewardListener {
        override fun onUserEarnedReward(rewardItem: RewardItem) {
          // User earned the reward.
          val rewardAmount = rewardItem.amount
          val rewardType = rewardItem.type
        }
      },
    )
    

    Java

    // Show the ad.
    rewardedAd.show(
        RewardedActivity.this,
        new OnUserEarnedRewardListener() {
          @Override
          public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
            // User earned the reward.
            int rewardAmount = rewardItem.getAmount();
            String rewardType = rewardItem.getType();
        }
    });
    

    常見問題

    初始化呼叫有逾時限制嗎?
    中介服務聯播網執行初始化 10 秒後,即使尚未完成,Google Mobile Ads SDK (Beta 版) 仍會叫用 OnInitializationCompleteListener
    收到初始化回呼時,如果部分中介服務聯播網尚未就緒,該怎麼辦?

    建議在 OnInitializationCompleteListener 的回呼中載入廣告。即使中介服務聯播網尚未就緒,Google Mobile Ads SDK (Beta 版) 仍可發出廣告請求。因此,就算初始化程序是在逾時之後才完成,中介服務聯播網仍能處理該工作階段後續的廣告請求。

    您可以在應用程式工作階段中呼叫 MobileAds.getInitializationStatus(),持續輪詢所有轉接程式的初始化狀態。

    如何找出特定中介服務聯播網尚未就緒的原因?

    AdapterStatus.getDescription() 會說明轉接程式無法處理廣告請求的原因。

    執行 onAdDismissedFullScreenContent() 回呼之前,是否一定會先呼叫 onUserEarnedReward() 回呼?

    如果是 Google 廣告,所有 onUserEarnedReward() 呼叫一定發生在 onAdDismissedFullScreenContent() 之前。對於透過中介服務放送的廣告,回呼順序取決於第三方廣告聯播網 SDK 的導入方式。若廣告聯播網 SDK 僅提供一個包含獎勵資訊的關閉回呼,中介服務轉接程式會在 onAdDismissedFullScreenContent() 之前叫用 onUserEarnedReward()

    範例

    請下載並執行範例應用程式,瞭解如何使用 Google Mobile Ads SDK (Beta 版)。