Prerequisites
- Google Mobile Ads SDK 19.7.0 or higher.
- Complete the Get started guide.
Always test with test ads
When building and testing your apps, make sure you use test ads rather than live, production ads. Failure to do so can lead to suspension of your account.
The easiest way to load test ads is to use our dedicated test ad unit ID for Android rewarded ads:
ca-app-pub-3940256099942544/5224354917
It's been specially configured to return test ads for every request, and you're free to use it in your own apps while coding, testing, and debugging. Just make sure you replace it with your own ad unit ID before publishing your app.
For more information about how the Mobile Ads SDK's test ads work, see Test Ads.
טעינת אובייקט של מודעה מתגמלת
מודעות מתגמלות נטענות על ידי קריאה לשיטה load()
הסטטית במחלקה RewardedAd
והעברת הערך RewardedAdLoadCallback
. בדרך כלל עושים את זה בשיטה onCreate()
של Activity
.
שימו לב שבדומה לקריאות חוזרות (callback) של טעינת פורמטים אחרים, 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
}
})
}
}
הגדרת 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.")
}
[אופציונלי] אימות קריאות חוזרות (callback) לאימות בצד השרת (SSV)
באפליקציות שנדרשת עבורן נתונים נוספים באימות בצד השרת, יש להשתמש בתכונת הנתונים המותאמים אישית של המודעות המתגמלות. כל ערך מחרוזת שמוגדר באובייקט של מודעה מתגמלת מועבר לפרמטר השאילתה custom_data
של הקריאה החוזרת (SSV). אם לא הוגדר ערך לנתונים מותאמים אישית, ערך הפרמטר של השאילתה custom_data
לא יופיע בקריאה החוזרת של ה-SSV.
דוגמת הקוד הבאה ממחישה איך להגדיר נתונים מותאמים אישית לאובייקט של מודעה מתגמלת לפני שמבקשים מודעה.
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
}
})
אם ברצונך להגדיר מחרוזת תגמול מותאמת אישית, עליך לעשות זאת לפני הצגת המודעה.
FAQ
- Is there a timeout for the initialization call?
- After 10 seconds, the Google Mobile Ads SDK invokes the
OnInitializationCompleteListener
even if a mediation network still hasn't completed initialization. - What if some mediation networks aren't ready when I get the initialization callback?
We recommend loading an ad inside the callback of the
OnInitializationCompleteListener
. Even if a mediation network is not ready, the Google Mobile Ads SDK still asks that network for an ad. So if a mediation network finishes initializing after the timeout, it can still service future ad requests in that session.You can continue to poll the initialization status of all adapters throughout your app session by calling
MobileAds.getInitializationStatus()
.- How do I find out why a particular mediation network isn't ready?
AdapterStatus.getDescription()
describes why an adapter is not ready to service ad requests.- Does the
onUserEarnedReward()
callback always get called before theonAdDismissedFullScreenContent()
callback? For Google ads, all
onUserEarnedReward()
calls occur beforeonAdDismissedFullScreenContent()
. For ads served through mediation, the third-party ad network SDK's implementation determines the callback order. For ad network SDKs that provide a single close callback with reward information, the mediation adapter invokesonUserEarnedReward()
beforeonAdDismissedFullScreenContent()
.
דוגמאות ב-GitHub
השלבים הבאים
נסו את הנושאים הבאים: