獎勵廣告

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

必要條件

請務必使用測試廣告進行測試

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

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

ca-app-pub-3940256099942544/5224354917

這種 ID 經特別設定,會針對每個請求傳回測試廣告。您可在編寫程式碼、測試及偵錯時,在自家應用程式中使用測試用 ID。發布應用程式前,請務必將這類 ID 替換為自己的廣告單元 ID。

如要進一步瞭解 Google Mobile Ads SDK (Legacy) 測試廣告,請參閱「啟用測試廣告」。

載入獎勵廣告物件

如要載入獎勵廣告,在 RewardedAd 類別中呼叫靜態 load() 方法,並傳入 RewardedAdLoadCallback。這通常是在 ActivityonCreate() 方法中完成。請注意,與其他格式載入回呼相似,RewardedAdLoadCallback 會運用 LoadAdError 提供更高保真的錯誤詳情。

Java

RewardedAd.load(
    this,
    "AD_UNIT_ID",
    new AdRequest.Builder().build(),
    new RewardedAdLoadCallback() {
      @Override
      public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
        Log.d(TAG, "Ad was loaded.");
        MainActivity.this.rewardedAd = rewardedAd;
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        Log.d(TAG, loadAdError.getMessage());
        rewardedAd = null;
      }
    });

Kotlin

RewardedAd.load(
  this,
  "AD_UNIT_ID",
  AdRequest.Builder().build(),
  object : RewardedAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedAd) {
      Log.d(TAG, "Ad was loaded.")
      rewardedAd = ad
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      Log.d(TAG, adError.message)
      rewardedAd = null
    }
  },
)

AD_UNIT_ID 替換為廣告單元 ID。

設定 FullScreenContentCallback

FullScreenContentCallback 會處理與顯示 RewardedAd 相關的事件,顯示 RewardedAd 前,請務必設定回呼,如下所示:

Java

rewardedAd.setFullScreenContentCallback(
    new FullScreenContentCallback() {
      @Override
      public void onAdDismissedFullScreenContent() {
        // Called when fullscreen content is dismissed.
        Log.d(TAG, "Ad was dismissed.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        rewardedAd = null;
      }

      @Override
      public void onAdFailedToShowFullScreenContent(AdError adError) {
        // Called when fullscreen content failed to show.
        Log.d(TAG, "Ad failed to show.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        rewardedAd = null;
      }

      @Override
      public void onAdShowedFullScreenContent() {
        // Called when fullscreen content is shown.
        Log.d(TAG, "Ad showed fullscreen content.");
      }

      @Override
      public void onAdImpression() {
        // Called when an impression is recorded for an ad.
        Log.d(TAG, "Ad recorded an impression.");
      }

      @Override
      public void onAdClicked() {
        // Called when an ad is clicked.
        Log.d(TAG, "Ad was clicked.");
      }
    });

Kotlin

rewardedAd?.fullScreenContentCallback =
  object : FullScreenContentCallback() {
    override fun onAdDismissedFullScreenContent() {
      // Called when fullscreen content is dismissed.
      Log.d(TAG, "Ad was dismissed.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      rewardedAd = null
    }

    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
      // Called when fullscreen content failed to show.
      Log.d(TAG, "Ad failed to show.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      rewardedAd = null
    }

    override fun onAdShowedFullScreenContent() {
      // Called when fullscreen content is shown.
      Log.d(TAG, "Ad showed fullscreen content.")
    }

    override fun onAdImpression() {
      // Called when an impression is recorded for an ad.
      Log.d(TAG, "Ad recorded an impression.")
    }

    override fun onAdClicked() {
      // Called when an ad is clicked.
      Log.d(TAG, "Ad was clicked.")
    }
  }

顯示廣告

顯示獎勵廣告時,您可以使用 OnUserEarnedRewardListener 物件處理獎勵事件。

Java

rewardedAd.show(
    MainActivity.this,
    new OnUserEarnedRewardListener() {
      @Override
      public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
        Log.d(TAG, "User earned the reward.");
        // Handle the reward.
      }
    });

Kotlin

rewardedAd?.show(
  this,
  OnUserEarnedRewardListener { rewardItem ->
    Log.d(TAG, "User earned the reward.")
    // Handle the reward.
    val rewardAmount = rewardItem.amount
    val rewardType = rewardItem.type
  },
)

[選用] 檢驗伺服器端驗證 (SSV) 回呼

如果需要在應用程式的伺服器端驗證回呼中加入額外資料,請使用獎勵廣告的自訂資料功能。在獎勵廣告物件上設定的任何字串值,都會傳遞至 SSV 回呼的 custom_data 查詢參數。如未設定任何自訂資料值,SSV 回呼就不會包含 custom_data 查詢參數值。

請參考以下程式碼範例,瞭解如何在請求廣告前,於獎勵廣告物件設定自訂資料。

Java

RewardedAd.load(
    context,
    AD_UNIT_ID,
    new AdRequest.Builder().build(),
    new RewardedAdLoadCallback() {
      @Override
      public void onAdLoaded(RewardedAd ad) {
        rewardedAd = ad;
        ServerSideVerificationOptions options =
            new ServerSideVerificationOptions.Builder()
                .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
                .build();
        rewardedAd.setServerSideVerificationOptions(options);
      }
    });

Kotlin

RewardedAd.load(
  context,
  AD_UNIT_ID,
  AdRequest.Builder().build(),
  object : RewardedAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedAd) {
      rewardedAd = ad
      val options =
        ServerSideVerificationOptions.Builder().setCustomData("SAMPLE_CUSTOM_DATA_STRING").build()
      rewardedAd?.setServerSideVerificationOptions(options)
    }
  },
)

SAMPLE_CUSTOM_DATA_STRING 替換成自訂資料。

如要設定自訂獎勵字串,請務必在廣告顯示前完成。

常見問題

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

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

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

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

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

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

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

GitHub 上的範例

後續步驟

請參閱下列主題: