必要條件
- Google Mobile Ads SDK 19.7.0 或更新版本。
- 完成入門指南。
一律使用測試廣告進行測試
建構及測試應用程式時,請務必使用測試廣告,而非即時正式版的廣告。否則我們可能會將您的帳戶停權。
載入測試廣告最簡單的方法,就是使用 Android 獎勵廣告專屬的測試廣告單元 ID:
ca-app-pub-3940256099942544/5224354917
它經過特別設定,可以針對每次要求傳回測試廣告,而您可以在編寫、測試和偵錯應用程式時,在自己的應用程式中使用它。發布應用程式前,請務必將其中的 ID 換成自己的廣告單元 ID。
如要進一步瞭解 Mobile Ads SDK 的測試廣告運作方式,請參閱「測試廣告」。
載入獎勵廣告物件
系統會載入 RewardedAd
類別的靜態 load()
方法並傳入 RewardedAdLoadCallback
,以載入獎勵廣告。這項作業通常會在 Activity
的 onCreate()
方法中完成。
請注意,如同其他格式載入回呼,RewardedAdLoadCallback
會利用 LoadAdError
提供較高精確度的錯誤詳細資料。
Java
import com.google.android.gms.ads.rewarded.RewardedAd; public class MainActivity extends Activity { private RewardedAd rewardedAd; private final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { AdRequest adRequest = new AdRequest.Builder().build(); RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917", adRequest, new RewardedAdLoadCallback() { @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { // Handle the error. Log.d(TAG, loadAdError.toString()); rewardedAd = null; } @Override public void onAdLoaded(@NonNull RewardedAd ad) { rewardedAd = ad; Log.d(TAG, "Ad was loaded."); } }); } }
Kotlin
class MainActivity : AppCompatActivity() { private var rewardedAd: RewardedAd? = null private final var TAG = "MainActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var adRequest = AdRequest.Builder().build() RewardedAd.load(this,"ca-app-pub-3940256099942544/5224354917", adRequest, object : RewardedAdLoadCallback() { override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) rewardedAd = null } override fun onAdLoaded(ad: RewardedAd) { Log.d(TAG, "Ad was loaded.") rewardedAd = ad } }) } }
[選用] 驗證伺服器端驗證 (SSV) 回呼
如果應用程式需要伺服器端驗證回呼提供額外資料,則應使用獎勵廣告的自訂資料功能。獎勵廣告物件的任何字串值,都會傳遞至 SSV 回呼的 custom_data
查詢參數。如未設定自訂資料值,SSV 回呼就不會顯示 custom_data
查詢參數值。
以下程式碼範例示範如何在要求廣告前,設定獎勵廣告物件的自訂資料。
Java
RewardedAd.load(MainActivity.this, "ca-app-pub-3940256099942544/5354046379", new AdRequest.Builder().build(), new RewardedAdLoadCallback() { @Override public void onAdLoaded(RewardedAd ad) { Log.d(TAG, "Ad was loaded."); rewardedAd = ad; ServerSideVerificationOptions options = new ServerSideVerificationOptions .Builder() .setCustomData("SAMPLE_CUSTOM_DATA_STRING") .build(); rewardedAd.setServerSideVerificationOptions(options); } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, loadAdError.toString()); rewardedAd = null; } });
Kotlin
RewardedAd.load(this, "ca-app-pub-3940256099942544/5354046379", AdRequest.Builder().build(), object : RewardedAdLoadCallback() { override fun onAdLoaded(ad: RewardedAd) { Log.d(TAG, "Ad was loaded.") rewardedInterstitialAd = ad val options = ServerSideVerificationOptions.Builder() .setCustomData("SAMPLE_CUSTOM_DATA_STRING") .build() rewardedAd.setServerSideVerificationOptions(options) } override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) rewardedAd = null } })
如要設定自訂獎勵字串,您必須先完成這項操作才能顯示廣告。
設定 FullScreenContentCallback
FullScreenContentCallback
會處理與顯示 RewardedAd
相關的事件。顯示 RewardedAd
之前,請務必按照下列方式設定回呼:
Java
rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() { @Override public void onAdClicked() { // Called when a click is recorded for an ad. Log.d(TAG, "Ad was clicked."); } @Override public void onAdDismissedFullScreenContent() { // Called when ad is dismissed. // Set the ad reference to null so you don't show the ad a second time. Log.d(TAG, "Ad dismissed fullscreen content."); rewardedAd = null; } @Override public void onAdFailedToShowFullScreenContent(AdError adError) { // Called when ad fails to show. Log.e(TAG, "Ad failed to show fullscreen content."); rewardedAd = null; } @Override public void onAdImpression() { // Called when an impression is recorded for an ad. Log.d(TAG, "Ad recorded an impression."); } @Override public void onAdShowedFullScreenContent() { // Called when ad is shown. Log.d(TAG, "Ad showed fullscreen content."); } });
Kotlin
rewardedAd?.fullScreenContentCallback = object: FullScreenContentCallback() { override fun onAdClicked() { // Called when a click is recorded for an ad. Log.d(TAG, "Ad was clicked.") } override fun onAdDismissedFullScreenContent() { // Called when ad is dismissed. // Set the ad reference to null so you don't show the ad a second time. Log.d(TAG, "Ad dismissed fullscreen content.") rewardedAd = null } override fun onAdFailedToShowFullScreenContent(adError: AdError?) { // Called when ad fails to show. Log.e(TAG, "Ad failed to show fullscreen content.") rewardedAd = null } override fun onAdImpression() { // Called when an impression is recorded for an ad. Log.d(TAG, "Ad recorded an impression.") } override fun onAdShowedFullScreenContent() { // Called when ad is shown. Log.d(TAG, "Ad showed fullscreen content.") } }
顯示廣告
顯示獎勵廣告時,您需要使用 OnUserEarnedRewardListener
物件來處理獎勵事件。
Java
if (rewardedAd != null) { Activity activityContext = MainActivity.this; rewardedAd.show(activityContext, new OnUserEarnedRewardListener() { @Override public void onUserEarnedReward(@NonNull RewardItem rewardItem) { // Handle the reward. Log.d(TAG, "The user earned the reward."); int rewardAmount = rewardItem.getAmount(); String rewardType = rewardItem.getType(); } }); } else { Log.d(TAG, "The rewarded ad wasn't ready yet."); }
Kotlin
rewardedAd?.let { ad -> ad.show(this, OnUserEarnedRewardListener { rewardItem -> // Handle the reward. val rewardAmount = rewardItem.amount val rewardType = rewardItem.type Log.d(TAG, "User earned the reward.") }) } ?: run { Log.d(TAG, "The rewarded ad wasn't ready yet.") }
常見問題
- 初始化呼叫有逾時嗎?
- 10 秒後,即使中介服務聯播網尚未完成初始化,Google Mobile Ads SDK 也會叫用
OnInitializationCompleteListener
。 - 如果收到初始化回呼時,部分中介服務聯播網尚未就緒,該怎麼辦?
建議您在
OnInitializationCompleteListener
回呼中載入廣告。即使中介服務聯播網尚未就緒,Google Mobile Ads SDK 仍會要求該聯播網放送廣告。因此,如果中介服務聯播網在逾時後完成初始化,在該工作階段日後仍可發出廣告請求。您可以呼叫
MobileAds.getInitializationStatus()
,在應用程式工作階段期間持續輪詢所有轉接程式的初始化狀態。- 如何找出特定中介服務聯播網尚未就緒的原因?
AdapterStatus.getDescription()
說明瞭為何轉接程式尚未準備好為廣告請求提供服務。- 系統一律會在
onAdDismissedFullScreenContent()
回呼之前呼叫onUserEarnedReward()
回呼嗎? 如果是 Google 廣告,所有
onUserEarnedReward()
呼叫都是在onAdDismissedFullScreenContent()
之前發生。如果是透過中介服務放送的廣告,第三方廣告聯播網 SDK 的導入會決定回呼順序。如果是提供獎勵資訊的單一關閉回呼的廣告聯播網 SDK,中介服務轉接程式會在onAdDismissedFullScreenContent()
之前叫用onUserEarnedReward()
。