Wymagania wstępne
- Pakiet SDK do reklam mobilnych Google w wersji 19.7.0 lub nowszej.
- Zapoznaj się z przewodnikiem dla początkujących.
Zawsze testuj reklamy za pomocą reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.
Najłatwiejszym sposobem wczytania reklam testowych jest użycie dedykowanego identyfikatora jednostki reklamowej na potrzeby testów reklam z nagrodą na urządzeniach z Androidem:
ca-app-pub-3940256099942544/5224354917
Jest on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.
Więcej informacji o działaniu testowych reklam w pakiecie SDK do reklam mobilnych znajdziesz w artykule Testowe reklamy.
Wczytywanie obiektu reklamy z nagrodą
Reklamy z nagrodą są wczytywane przez wywołanie statycznej metody load()
w klasie RewardedAd
i przekazanie argumentu RewardedAdLoadCallback
. Zwykle odbywa się to w metodie onCreate()
obiektu Activity
.
Pamiętaj, że podobnie jak inne wywołania zwrotne wczytywania formatu RewardedAdLoadCallback
wykorzystuje LoadAdError
, aby zapewnić większą dokładność informacji o błędach.
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
}
})
}
}
Ustaw FullScreenContentCallback
FullScreenContentCallback
obsługuje zdarzenia związane z wyświetlaniem RewardedAd
. Zanim wyświetlisz RewardedAd
, ustaw połączenie zwrotne w ten sposób:
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.")
}
}
Wyświetlanie reklamy
Podczas wyświetlania reklamy z nagrodą używasz obiektu OnUserEarnedRewardListener
do obsługi zdarzeń związanych z nagrodami.
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.")
}
[Opcjonalnie] Walidowanie wywołań zwrotnych weryfikacji po stronie serwera (SSV)
Aplikacje, które wymagają dodatkowych danych w zgłoszeniach weryfikacji po stronie serwera, powinny korzystać z funkcji danych niestandardowych reklam z nagrodą. Każda wartość ciągu znaków ustawiona w obiekcie reklamy z nagrodą jest przekazywana do parametru zapytania custom_data
wywołania zwrotnego SSV. Jeśli nie ustawisz wartości danych niestandardowych, parametr zapytania custom_data
nie będzie obecny w wywołaniu zwrotnym SSV.
Poniższy przykładowy kod pokazuje, jak ustawić dane niestandardowe obiektu reklamy z nagrodą przed wysłaniem prośby o reklamę.
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
}
})
Jeśli chcesz ustawić niestandardowy ciąg znaków nagrody, musisz to zrobić przed wyświetleniem reklamy.
Najczęstsze pytania
- Czy w przypadku wywołania inicjującego występuje limit czasu?
- Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje funkcję
OnInitializationCompleteListener
, nawet jeśli zapośredniczająca sieć reklamowa nie zakończyła jeszcze inicjalizacji. - Co się stanie, jeśli niektóre sieci pośredniczące nie będą gotowe, gdy otrzymam wywołanie zwrotne inicjalizowania?
Zalecamy wczytywanie reklamy w ramach wywołania zwrotnego funkcji
OnInitializationCompleteListener
. Nawet jeśli sieć zapośredniczenia nie jest gotowa, pakiet SDK do reklam mobilnych Google nadal wysyła do niej żądanie reklamy. Jeśli sieć zapośredniczenia zakończy inicjowanie po upływie limitu czasu, nadal może obsługiwać kolejne żądania reklam w tej sesji.Podczas sesji aplikacji możesz nadal sprawdzać stan inicjalizacji wszystkich adapterów, wywołując funkcję
MobileAds.getInitializationStatus()
.- Jak sprawdzić, dlaczego dana sieć pośrednicząca nie jest gotowa?
AdapterStatus.getDescription()
wyjaśnia, dlaczego adapter nie jest gotowy do obsługi żądań reklam.- Czy metoda
onUserEarnedReward()
jest zawsze wywoływana przed metodąonAdDismissedFullScreenContent()
? W przypadku Google Ads wszystkie wywołania
onUserEarnedReward()
występują przedonAdDismissedFullScreenContent()
. W przypadku reklam wyświetlanych w ramach zapośredniczenia kolejność wywołań określa implementacja pakietu SDK sieci reklamowej firmy zewnętrznej. W przypadku pakietów SDK sieci reklamowej, które udostępniają pojedyncze wywołanie zwrotne close z informacjami o nagrodzie, adapter pośredniczący wywołuje funkcjęonUserEarnedReward()
przed wywołaniemonAdDismissedFullScreenContent()
.
Przykłady w GitHub
Dalsze kroki
Zapoznaj się z tymi tematami: