激勵廣告(舊版 API)

先決條件

  • Google 移動廣告 SDK 17.2.0 或更高版本。
  • 按照入門指南導入 Google 移動廣告 SDK 並更新您的 Android 清單。

創建激勵廣告對象

獎勵廣告由RewardedAd對象請求和顯示。第一步是實例化RewardedAd 。這是在以下代碼片段中的ActivityonCreate()方法中完成的:

爪哇

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "ca-app-pub-3940256099942544/5224354917");
    }

}

科特林

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : Activity() {

  private lateinit var rewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    ...
    rewardedAd = RewardedAd(this,
        "ca-app-pub-3940256099942544/5224354917")
  }
}

構造函數需要以下參數:

始終使用測試廣告進行測試

在構建和測試您的應用程序時,請確保您使用的是測試廣告,而不是實際的生產廣告。否則可能會導致您的帳戶被暫停。

加載測試廣告的最簡單方法是使用我們為 Android 激勵廣告提供的專用測試廣告單元 ID:

ca-app-pub-3940256099942544/5224354917

它經過特殊配置,可針對每個請求返回測試廣告,您可以在編碼、測試和調試時在自己的應用程序中自由使用它。只需確保在發布應用之前將其替換為您自己的廣告單元 ID。

有關移動廣告 SDK 的測試廣告如何工作的更多信息,請參閱測試廣告

加載廣告

要加載獎勵廣告,請調用RewardedAd對象的loadAd()方法。此方法需要AdRequestRewardedAdLoadCallback實例作為參數。

爪哇

import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd rewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        rewardedAd = new RewardedAd(this,
            "ca-app-pub-3940256099942544/5224354917");

        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

           @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
    }
}

科特林

import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity : Activity() {

  private lateinit var rewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
    val adLoadCallback = object: RewardedAdLoadCallback() {
      fun onRewardedAdLoaded() {
        // Ad successfully loaded.
      }
      fun onRewardedAdFailedToLoad(adError: LoadAdError) {
        // Ad failed to load.
      }
    }
    rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
  }
}

RewardedAdLoadCallback 的RewardedAdLoadCallback onRewardedAdLoaded()onRewardedAdFailedToLoad()方法提供了廣告加載操作的結果。

可覆蓋的方法
onRewardedAdLoaded()此方法在廣告加載完成時執行。
onRewardedAdFailedToLoad()當廣告加載失敗時調用此方法。它包括一個LoadAdError類型的錯誤參數,指示發生了哪種類型的故障。有關詳細信息,請參閱調試廣告加載錯誤文檔

展示廣告

在向用戶展示獎勵廣告之前,您必須向用戶提供一個明確的選擇以查看獎勵廣告內容以換取獎勵。獎勵廣告必須始終是一種選擇加入的體驗。

要顯示RewardedAd ,請使用isLoaded()方法來驗證它是否已完成加載,然後調用show()show()方法需要ActivityRewardedAdCallback實例作為參數。 Activity實例應該是展示獎勵廣告的活動。

上一個代碼示例中的獎勵廣告可以顯示在按鈕的OnClickListener中,如下所示:

爪哇

myButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (rewardedAd.isLoaded()) {
            Activity activityContext = MainActivity.this
            RewardedAdCallback adCallback = new RewardedAdCallback() {
                @Override
                public void onRewardedAdOpened() {
                    // Ad opened.
                }

                @Override
                public void onRewardedAdClosed() {
                    // Ad closed.
                }

                @Override
                public void onUserEarnedReward(@NonNull RewardItem reward) {
                    // User earned reward.
                }

                @Override
                public void onRewardedAdFailedToShow(AdError adError) {
                    // Ad failed to display.
                }
            };
            rewardedAd.show(activityContext, adCallback);
        } else {
            Log.d("TAG", "The rewarded ad wasn't loaded yet.");
        }
    }
});

科特林

myButton.setOnClickListener {
  if (rewardedAd.isLoaded) {
    val activityContext: Activity = this@MainActivity
    val adCallback = object: RewardedAdCallback() {
      override fun onRewardedAdOpened() {
        // Ad opened.
      }
      override fun onRewardedAdClosed() {
        // Ad closed.
      }
      override fun onUserEarnedReward(@NonNull reward: RewardItem) {
        // User earned reward.
      }
      override fun onRewardedAdFailedToShow(adError: AdError) {
        // Ad failed to display.
      }
    }
    rewardedAd.show(activityContext, adCallback)
  }
  else {
    Log.d("TAG", "The rewarded ad wasn't loaded yet.")
  }
}

接收廣告事件通知

提供給show()方法的RewardedAdCallback獲取獎勵廣告事件的通知。 RewardedAdCallback中的每個可重寫方法都對應於激勵廣告生命週期中的一個事件。例如, onUserEarnedReward()方法是為用戶提供獎勵的理想場所。下面提供了有關每種廣告事件方法的更多詳細信息。

可覆蓋的方法
onRewardedAdOpened()顯示廣告時調用此方法,覆蓋設備的屏幕。
onRewardedAdClosed()當獎勵廣告因用戶點擊關閉圖標或使用返回按鈕而關閉時調用此方法。如果您的應用暫停了其音頻輸出或遊戲循環,這是恢復它的好地方。
onUserEarnedReward()當用戶應該因與廣告交互而獲得獎勵時調用該方法。可以通過RewardItem參數的getType()getAmount()方法訪問為您的廣告單元配置的獎勵詳細信息。
onRewardedAdFailedToShow()當廣告無法顯示時調用此方法。它包括一個adError參數,指示發生了哪種類型的故障。錯誤代碼 ( adError.getCode() ) 的可能值在RewardedAdCallback類中定義為常量。

使用 RewardedAdCallback 預加載下一個激勵廣告

RewardedAd是一次性使用對象。這意味著一旦展示了激勵廣告,該對象就不能用於加載另一個廣告。要請求另一個激勵廣告,您需要創建一個新的RewardedAd對象。

最佳做法是在RewardedAdCallback上的onRewardedAdClosed()方法中加載另一個激勵廣告,以便在前一個激勵廣告被關閉後立即開始加載下一個激勵廣告:

爪哇

public RewardedAd createAndLoadRewardedAd() {
        RewardedAd rewardedAd = new RewardedAd(this,
                "ca-app-pub-3940256099942544/5224354917");
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
}

@Override
public void onRewardedAdClosed() {
    this.rewardedAd = createAndLoadRewardedAd();
}

科特林

fun createAndLoadRewardedAd(): RewardedAd {
  val rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
  val adLoadCallback = object: RewardedAdLoadCallback() {
    override fun onRewardedAdLoaded() {
      // Ad successfully loaded.
    }
    override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
      // Ad failed to load.
    }
  }
  rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
  return rewardedAd
}
fun onRewardedAdClosed() {
  this.rewardedAd = createAndLoadRewardedAd()
}

加載多個獎勵廣告

要加載多個激勵廣告,請按照創建激勵廣告對像中概述的步驟並為您要加載的每個廣告加載一個廣告部分。下面的代碼片段演示瞭如何為兩個不同的廣告展示位置加載兩個激勵廣告。

爪哇

package ...

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.rewarded.RewardedAd;

public class MainActivity extends Activity {

    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        gameOverRewardedAd = createAndLoadRewardedAd(
          "ca-app-pub-3940256099942544/5224354917");
        extraCoinsRewardedAd = createAndLoadRewardedAd(
          "ca-app-pub-3940256099942544/5224354917");
    }

    public RewardedAd createAndLoadRewardedAd(String adUnitId) {
        RewardedAd rewardedAd = new RewardedAd(this, adUnitId);
        RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
            @Override
            public void onRewardedAdLoaded() {
                // Ad successfully loaded.
            }

            @Override
            public void onRewardedAdFailedToLoad(LoadAdError adError) {
                // Ad failed to load.
            }
        };
        rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
        return rewardedAd;
    }
}

科特林

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.rewarded.RewardedAd

class MainActivity: Activity() {

  private lateinit var gameOverRewardedAd: RewardedAd
  private lateinit var extraCoinsRewardedAd: RewardedAd

  override fun onCreate(savedInstanceState:Bundle) {
    ...
    gameOverRewardedAd = createAndLoadRewardedAd(
      "ca-app-pub-3940256099942544/5224354917")
    extraCoinsRewardedAd = createAndLoadRewardedAd(
      "ca-app-pub-3940256099942544/5224354917")
  }

  fun createAndLoadRewardedAd(adUnitId:String): RewardedAd {
    val rewardedAd = RewardedAd(this, adUnitId)
    val adLoadCallback = object: RewardedAdLoadCallback() {
      override fun onRewardedAdLoaded() {
        // Ad successfully loaded.
      }
      override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
        // Ad failed to load.
      }
    }
    rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
    return rewardedAd
  }
}

常問問題

我可以獲得RewardedAd的獎勵詳情嗎?
是的,如果您在onUserEarnedReward()回調之前需要獎勵金額, RewardedAd有一個getRewardItem()方法,您可以在廣告加載後檢查以驗證獎勵金額。
初始化調用是否有超時?
10 秒後,即使中介網絡仍未完成初始化,Google 移動廣告 SDK 也會調用OnInitializationCompleteListener
如果我收到初始化回調時某些中介網絡還沒有準備好怎麼辦?

最佳做法是在OnInitializationCompleteListener的回調中加載廣告。即使中介網絡尚未準備好,Google 移動廣告 SDK 仍會要求該網絡提供廣告。因此,如果中介網絡在超時後完成初始化,它仍然可以在該會話中為未來的廣告請求提供服務。

您可以通過調用MobileAds.getInitializationStatus()在整個應用會話期間繼續輪詢所有適配器的初始化狀態。

如何找出特定中介網絡未準備就緒的原因?

AdapterStatus.getDescription()描述了適配器未準備好為廣告請求提供服務的原因。