插页式激励广告是一种激励用户的广告格式,采用这种格式时,您可以通过在应用中的自然过渡点自动展示的广告向用户提供奖励。与激励广告不同,用户无需自行选择即可观看插页式激励广告。
前提条件
- Google 移动广告 SDK 19.2.0 或更高版本。
- 通读入门指南。
实现
植入插页式激励广告的主要步骤如下所示:
- 加载广告
- [可选] 验证 SSV 回调
- 注册全屏事件回调
- 处理奖励回调
- 展示广告
加载广告
广告的加载是通过针对 RewardedInterstitialAd
类使用静态 load()
方法完成的。该加载方法需要使用情境、您的广告单元 ID、 an AdRequest
对象和 RewardedInterstitialAdLoadCallback
(以在广告加载成功或失败时收到通知)。已加载的 RewardedInterstitialAd
对象会以 onRewardedInterstitialAdLoaded()
回调中的参数的形式提供。以下示例展示了如何在 MainActivity
中加载 RewardedInterstitialAd
。
Java
public class MainActivity extends AppCompatActivity { private RewardedInterstitialAd rewardedInterstitialAd; private String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) { loadAd(); } }); } public void loadAd() { // Use the test ad unit ID to load an ad. RewardedInterstitialAd.load(MainActivity.this, "ca-app-pub-3940256099942544/5354046379", new AdRequest.Builder().build(), new RewardedInterstitialAdLoadCallback() { @Override public void onAdLoaded(RewardedInterstitialAd ad) { Log.d(TAG, "Ad was loaded."); rewardedInterstitialAd = ad; } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, loadAdError.toString()); rewardedInterstitialAd = null; } }); } }
Kotlin
import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback class MainActivity : AppCompactActivity() { private var rewardedInterstitialAd? = null private final var TAG = "MainActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) MobileAds.initialize(this) { initializationStatus -> loadAd() } } private fun loadAd() { RewardedInterstitialAd.load(this, "ca-app-pub-3940256099942544/5354046379", AdRequest.Builder().build(), object : RewardedInterstitialAdLoadCallback() { override fun onAdLoaded(ad: RewardedInterstitialAd) { Log.d(TAG, "Ad was loaded.") rewardedInterstitialAd = ad } override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) rewardedInterstitialAd = null } }) } }
[可选] 验证服务器端验证 (SSV) 回调
对于需要服务器端验证回调中额外数据的应用,应使用激励广告的自定义数据功能。在激励广告对象上设置的任何字符串值都将传递给 SSV 回调的 custom_data
查询参数。如果未设置自定义数据值,custom_data
查询参数值不会出现在 SSV 回调中。
以下代码示例演示了如何在请求广告之前对插页式激励广告对象设置自定义数据。
Java
RewardedInterstitialAd.load(MainActivity.this, "ca-app-pub-3940256099942544/5354046379", new AdRequest.Builder().build(), new RewardedInterstitialAdLoadCallback() { @Override public void onAdLoaded(RewardedInterstitialAd ad) { Log.d(TAG, "Ad was loaded."); rewardedInterstitialAd = ad; ServerSideVerificationOptions options = new ServerSideVerificationOptions .Builder() .setCustomData("SAMPLE_CUSTOM_DATA_STRING") .build(); rewardedInterstitialAd.setServerSideVerificationOptions(options); } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, loadAdError.toString()); rewardedInterstitialAd = null; } });
Kotlin
RewardedInterstitialAd.load(this, "ca-app-pub-3940256099942544/5354046379", AdRequest.Builder().build(), object : RewardedInterstitialAdLoadCallback() { override fun onAdLoaded(ad: RewardedInterstitialAd) { Log.d(TAG, "Ad was loaded.") rewardedInterstitialAd = ad val options = ServerSideVerificationOptions.Builder() .setCustomData("SAMPLE_CUSTOM_DATA_STRING") .build() rewardedInterstitialAd.setServerSideVerificationOptions(options) } override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) rewardedInterstitialAd = null } })
如果您要设置自定义奖励字符串,则必须在展示广告之前设置。
注册回调
要接收有关展示事件的通知,您必须向广告的 setter 方法传递 FullScreenContentCallback
对象。FullScreenContentCallback
对象会在广告成功展示或展示失败,以及用户关闭广告时处理回调。以下代码展示了如何在 RewardedInterstitialAdLoadCallback
中设置匿名 FullScreenContentCallback
对象:
Java
public void loadAd(){ RewardedInterstitialAd.load(MainActivity.this, "ca-app-pub-3940256099942544/5354046379", new AdRequest.Builder().build(), new RewardedInterstitialAdLoadCallback() { @Override public void onAdLoaded(RewardedInterstitialAd ad) { rewardedInterstitialAd = ad; rewardedInterstitialAd.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."); rewardedInterstitialAd = null; } @Override public void onAdFailedToShowFullScreenContent(AdError adError) { // Called when ad fails to show. Log.e(TAG, "Ad failed to show fullscreen content."); rewardedInterstitialAd = 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."); } }); } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, loadAdError.toString()); rewardedInterstitialAd = null; } }); }
Kotlin
private fun loadAd() { RewardedInterstitialAd.load(this, "ca-app-pub-3940256099942544/5354046379", AdRequest.Builder().build(), object : RewardedInterstitialAdLoadCallback() { override fun onAdLoaded(ad: RewardedInterstitialAd) { rewardedInterstitialAd = ad rewardedInterstitialAd?.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.") rewardedInterstitialAd = null } override fun onAdFailedToShowFullScreenContent(adError: AdError) { // Called when ad fails to show. Log.e(TAG, "Ad failed to show fullscreen content.") rewardedInterstitialAd = 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.") } } } override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) rewardedInterstitialAd = null } }) }
处理奖励
要展示您的插页式激励广告,请在 MainActivity
中实现 OnUserEarnedRewardListener
接口,以便在用户获得奖励时收到通知。
Java
public class MainActivity extends AppCompatActivity implements OnUserEarnedRewardListener { ... @Override public void onUserEarnedReward(@NonNull RewardItem rewardItem) { Log.i(TAG, "User earned reward."); // TODO: Reward the user! } }
Kotlin
class MainActivity : AppCompatActivity(), OnUserEarnedRewardListener { ... override fun onUserEarnedReward(rewardItem: RewardItem) { Log.d(TAG, "User earned reward.") // TODO: Reward the user! } }
展示广告
实现 OnUserEarnedRewardListener
接口后,您可以使用广告的 show()
方法展示广告,如下所示:
Java
rewardedInterstitialAd.show(/* Activity */ MainActivity.this,/* OnUserEarnedRewardListener */ MainActivity.this);
Kotlin
rewardedInterstitialAd?.show(/* Activity */ this, /* OnUserEarnedRewardListener */ this)
GitHub 上的示例
后续步骤
详细了解用户隐私。