Reklamy z nagrodą (starszy interfejs API)

Warunki wstępne

  • Pakiet SDK do reklam mobilnych Google w wersji 17.2.0 lub nowszej.
  • Postępuj zgodnie z przewodnikiem dla początkujących, aby zaimportować pakiet SDK do reklam mobilnych Google i zaktualizować swój manifest Androida.

Utwórz obiekt reklamy z nagrodą

Reklamy z nagrodą są żądane i wyświetlane przez obiekty RewardedAd . Pierwszym krokiem jest utworzenie wystąpienia RewardedAd . Odbywa się to w onCreate() Activity w następującym fragmencie kodu:

Jawa

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");
    }

}

Kotlin

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")
  }
}

Konstruktor wymaga następujących argumentów:

Zawsze testuj z reklamami testowymi

Tworząc i testując swoje aplikacje, używaj reklam testowych, a nie rzeczywistych reklam produkcyjnych. Niespełnienie tego warunku może doprowadzić do zawieszenia Twojego konta.

Najłatwiejszym sposobem załadowania reklam testowych jest użycie naszego dedykowanego identyfikatora testowej jednostki reklamowej dla reklam z nagrodą na Androida:

ca-app-pub-3940256099942544/5224354917

Został specjalnie skonfigurowany do zwracania reklam testowych dla każdego żądania i możesz go używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Tylko pamiętaj, aby zastąpić go własnym identyfikatorem jednostki reklamowej przed opublikowaniem aplikacji.

Więcej informacji o działaniu testowych reklam pakietu SDK do reklam mobilnych znajdziesz w artykule Testowanie reklam .

Załaduj reklamę

Aby załadować reklamę z nagrodą, wywołaj metodę loadAd() obiektu RewardedAd . Ta metoda wymaga wystąpień AdRequest i RewardedAdLoadCallback jako argumentów.

Jawa

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);
    }
}

Kotlin

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)
  }
}

Metody onRewardedAdLoaded() i onRewardedAdFailedToLoad() funkcji RewardedAdLoadCallback dostarczają wynik operacji ładowania reklamy.

Metody nadrzędne
onRewardedAdLoaded() Ta metoda jest wykonywana po zakończeniu ładowania reklamy.
onRewardedAdFailedToLoad() Ta metoda jest wywoływana, gdy reklama się nie wczytuje. Zawiera parametr błędu typu LoadAdError , który wskazuje, jaki rodzaj błędu wystąpił. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją debugowania błędów ładowania reklam .

Pokaż reklamę

Zanim wyświetlisz użytkownikom reklamę z nagrodą, musisz wyraźnie wskazać użytkownikowi możliwość wyświetlenia treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą muszą być zawsze dostępne.

Aby wyświetlić RewardedAd , użyj metody isLoaded() , aby sprawdzić, czy zakończyło się ładowanie, a następnie wywołaj show() . Metoda show() wymaga jako argumentów instancji Activity i RewardedAdCallback . Instancja Activity powinna być aktywnością, z której prezentowana jest reklama z nagrodą.

Reklama z nagrodą z poprzedniego przykładu kodu może być wyświetlana w OnClickListener przycisku w następujący sposób:

Jawa

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.");
        }
    }
});

Kotlin

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.")
  }
}

Otrzymuj powiadomienia o zdarzeniach reklamowych

RewardedAdCallback dostarczony do metody show() otrzymuje powiadomienia o zdarzeniach reklamy nagrodzonej. Każda z możliwych do zastąpienia metod w RewardedAdCallback odpowiada zdarzeniu w cyklu życia reklamy z nagrodą. Na przykład metoda onUserEarnedReward() jest idealnym miejscem do zapewnienia użytkownikowi nagrody. Dodatkowe informacje o każdej metodzie zdarzenia reklamowego znajdują się poniżej.

Metody nadrzędne
onRewardedAdOpened() Ta metoda jest wywoływana, gdy reklama jest wyświetlana, zasłaniając ekran urządzenia.
onRewardedAdClosed() Ta metoda jest wywoływana, gdy reklama z nagrodą zostanie zamknięta z powodu kliknięcia przez użytkownika ikony zamykania lub użycia przycisku Wstecz. Jeśli Twoja aplikacja wstrzymała wyjście audio lub pętlę gry, jest to świetne miejsce do jej wznowienia.
onUserEarnedReward() Metoda jest wywoływana, gdy użytkownik powinien zostać nagrodzony za interakcję z reklamą. Dostęp do szczegółów nagrody skonfigurowanych dla Twojej jednostki reklamowej można uzyskać za pomocą getType() i getAmount() parametru RewardItem .
onRewardedAdFailedToShow() Ta metoda jest wywoływana, gdy reklama się nie wyświetla. Zawiera parametr adError , który wskazuje, jaki rodzaj awarii wystąpił. Możliwe wartości kodu błędu ( adError.getCode() ) są zdefiniowane jako stałe w klasie RewardedAdCallback .

Używanie RewardedAdCallback do wstępnego wczytywania następnej reklamy z nagrodą

RewardedAd to obiekt jednorazowego użytku. Oznacza to, że po wyświetleniu reklamy z nagrodą obiekt nie może zostać użyty do załadowania kolejnej reklamy. Aby poprosić o kolejną reklamę z nagrodą, musisz utworzyć nowy obiekt RewardedAd .

Najlepszą praktyką jest wczytanie kolejnej reklamy z nagrodą w onRewardedAdClosed() na RewardedAdCallback , aby następna reklama z nagrodą zaczęła się ładować zaraz po odrzuceniu poprzedniej:

Jawa

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();
}

Kotlin

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()
}

Ładowanie wielu reklam z nagrodą

Aby załadować wiele reklam z nagrodą, wykonaj czynności opisane w sekcji Utwórz obiekt reklamy z nagrodą i wczytaj sekcje reklam dla każdej reklamy, którą chcesz wczytać. Poniższy fragment kodu pokazuje, jak załadować dwie reklamy z nagrodą w dwóch różnych miejscach docelowych.

Jawa

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;
    }
}

Kotlin

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
  }
}

FAQ

Czy mogę otrzymać szczegóły nagrody za RewardedAd ?
Tak, jeśli potrzebujesz kwoty nagrody przed wywołaniem zwrotnym onUserEarnedReward() , RewardedAd ma getRewardItem() , którą możesz sprawdzić, aby zweryfikować kwotę nagrody po załadowaniu reklamy.
Czy istnieje limit czasu na wywołanie inicjujące?
Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje OnInitializationCompleteListener , nawet jeśli sieć zapośredniczenia nadal nie została inicjowana.
Co się stanie, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymuję wywołanie zwrotne inicjowania?

Najlepszą praktyką jest załadowanie reklamy wewnątrz wywołania zwrotnego OnInitializationCompleteListener . Nawet jeśli sieć zapośredniczenia nie jest gotowa, pakiet SDK do reklam mobilnych Google nadal poprosi tę sieć o reklamę. Jeśli więc sieć zapośredniczenia zakończy inicjowanie po upływie limitu czasu, nadal może obsługiwać przyszłe żądania reklam w tej sesji.

Możesz nadal odpytywać stan inicjowania wszystkich adapterów przez całą sesję aplikacji, wywołując MobileAds.getInitializationStatus() .

Jak dowiedzieć się, dlaczego dana sieć zapośredniczenia nie jest gotowa?

AdapterStatus.getDescription() opisuje, dlaczego adapter nie jest gotowy do obsługi żądań reklam.