Implementacja adaptera reklam z nagrodą

Adapter zapośredniczenia odbiera komunikaty i żądania z pakietu SDK do reklam mobilnych Google i komunikuje się z pakietem SDK sieci zewnętrznej, aby zrealizować te żądania.

Ten przewodnik jest przeznaczony dla sieci reklamowych, które chcą utworzyć adapter zapośredniczenia reklam z nagrodą na potrzeby zapośredniczenia reklam mobilnych Google. We fragmentach kodu poniżej w celach pokazowych wykorzystano przykładowy pakiet SDK. Pełną implementację adaptera utworzonego na potrzeby tego przykładowego pakietu SDK znajdziesz w naszym projekcie AndroidZapośredniczenie. Ten przewodnik wyjaśnia, jak stworzyć przejściówkę.

Zdefiniuj nazwę klasy adaptera i parametry serwera

Sieci reklamowe zapośredniczone przez platformę zapośredniczenia AdMob zwykle wymagają co najmniej jednego identyfikatora do identyfikacji wydawcy. Identyfikatory te są reprezentowane jako parametry serwera i definiowane podczas konfigurowania zewnętrznej sieci reklamowej na potrzeby zapośredniczenia w interfejsie AdMob.

Przed utworzeniem adaptera zapośredniczenia musisz przekazać Google nazwę klasy adaptera i inne parametry wymagane do uzyskania dostępu do Twojej sieci reklamowej.

Wdróż klasę adaptera

Pierwszym krokiem jest zaimplementowanie klasy abstrakcyjnej Adaptera:

...
import com.google.android.gms.ads.mediation.Adapter;
...

public class SampleAdapter extends Adapter {
 ...
}

Dzięki tej zmianie klasa wdroży kilka metod opisanych poniżej.

Zgłoś numery wersji

Adapter musi zgłaszać do pakietu SDK do reklam mobilnych Google zarówno wersję samego adaptera, jak i wersję tego pakietu SDK firmy zewnętrznej. Wersje są zgłaszane za pomocą funkcji VersionInfo.

Przejściówki Google typu open source i wersjonowane używają 4-cyfrowego schematu wersji adaptera, VersionInfoale dozwolone są tylko 3 cyfry. Aby obejść ten problem, zalecamy połączenie ostatnich 2 cyfr w wersji poprawki w ten sposób:

...
import com.google.android.gms.ads.VersionInfo;
...

public class SampleAdapter extends Adapter implements SampleRewardedAdListener {
  ...
  @Override
  public VersionInfo getVersionInfo() {
    String versionString = BuildConfig.VERSION_NAME;
    String[] splits = versionString.split("\\.");

    if (splits.length >= 4) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }

  @Override
  public VersionInfo getSDKVersionInfo() {
    String versionString = SampleAdRequest.getSDKVersion();
    String[] splits = versionString.split("\\.");

    if (splits.length >= 3) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]);
      return new VersionInfo(major, minor, micro);
    }

    return new VersionInfo(0, 0, 0);
  }
  ...
}

Zainicjuj adapter

Po zainicjowaniu w aplikacji pakietu SDK do reklam mobilnych Google wywoływany jest initialize() we wszystkich adapterach skonfigurowanych dla aplikacji w interfejsie AdMob.

Argument List<MediationConfiguration> zawiera informacje o wszystkich miejscach docelowych skonfigurowanych w Twojej sieci reklamowej w interfejsie AdMob. Użyj tych informacji do zainicjowania pakietu SDK sieci reklamowej. Po zainicjowaniu pakietu SDK sieci reklamowej zgłoś do pakietu SDK do reklam mobilnych Google udaną lub nieudaną inicjalizację, wywołując metodę onInitializationSucceeded() lub onInitializationFailed() dla argumentu InitializationCompleteCallbackpodanego w wywołaniu initialize().

...
import com.google.android.gms.ads.mediation.InitializationCompleteCallback;
import com.google.android.gms.ads.mediation.MediationConfiguration;
...

public class SampleAdapter extends Adapter {
  ...
  @Override
  public void initialize(
      Context context,
      InitializationCompleteCallback initializationCompleteCallback,
      List<MediationConfiguration> mediationConfigurations) {
    if (context == null) {
      initializationCompleteCallback.onInitializationFailed(
          "Initialization Failed: Context is null.");
      return;
    }

    // The Sample SDK doesn't have an initialization method, so this example
    // immediately reports a success callback.
    initializationCompleteCallback.onInitializationSucceeded();
  }
  ...
}

Wysyłanie żądania reklamy z nagrodą

Aby wysłać żądanie reklamy z nagrodą, użyj metody loadRewardedAd(). Umieść odwołanie do MediationAdLoadCallback, które umożliwia zgłoszenie udanego lub nieudanego wczytania reklamy w pakiecie SDK do reklam mobilnych Google.

Obiekt MediationRewardedAdCallback będzie dostępny po wywołaniu onSuccess(), którego możesz później używać do przekazywania innych zdarzeń reklamowych, np. kliknięć lub przyznanych nagród.

...
import com.google.ads.mediation.sample.sdk.SampleAdRequest;
import com.google.ads.mediation.sample.sdk.SampleRewardedAd;
import com.google.ads.mediation.sample.sdk.SampleRewardedAdListener;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationRewardedAd;
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback;
...

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...

  /**
   * A MediationAdLoadCallback that handles any callback when a Sample rewarded
   * ad finishes loading.
   */
  private MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> adLoadCallBack;

  /**
   * Represents a SampleRewardedAd.
   */
  private SampleRewardedAd sampleRewardedAd;

  /**
   * Used to forward rewarded video ad events to the Google Mobile Ads SDK..
   */
  private MediationRewardedAdCallback rewardedAdCallback;

  ...

  // Hold a reference to the MediationAdLoadCallback object to report ad load
  // events to the Google Mobile Ads SDK.
  @Override
  public void loadRewardedAd(
      MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
      MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
          mediationAdLoadCallback) {
    adLoadCallBack = mediationAdLoadCallback;
    MediationRewardedAdConfiguration adConfiguration = mediationRewardedAdConfiguration;

    String adUnitId = adConfiguration.getServerParameters().getString(SAMPLE_AD_UNIT_KEY);

    sampleRewardedAd = new SampleRewardedAd(adUnitId);
    SampleAdRequest request = new SampleAdRequest();
    sampleRewardedAd.setListener(this);
    sampleRewardedAd.loadAd(request);
  }

  // Hold a reference to the MediationRewardedAdCallback object to report ad
  // lifecycle events to the Google Mobile Ads SDK.
  @Override
  public void onRewardedAdLoaded() {
    rewardedAdCallback = mediationAdLoadCallBack.onSuccess(this);
  }

  @Override
  public void onRewardedAdFailedToLoad(SampleErrorCode error) {
    mediationAdLoadCallBack.onFailure(error.toString());
  }
  ...
}

Wyświetl reklamę

Pakiet SDK do reklam mobilnych Google może w każdej chwili wywołać metodę showAd() adaptera, gdy pakiet SDK otrzyma powiadomienie o prawidłowym wczytaniu reklamy. Adapter powinien wyświetlić reklamę z nagrodą. Jeśli z jakiegoś powodu nie można wyświetlić reklamy, wywołaj wywołanie zwrotne onAdFailedToShow().

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void showAd(Context context) {
    if (!(context instanceof Activity)) {
      rewardedAdCallback.onAdFailedToShow(
          "An activity context is required to show Sample rewarded ad.");
      return;
    }
    Activity activity = (Activity) context;

    if (!sampleRewardedAd.isAdAvailable()) {
      rewardedAdCallback.onAdFailedToShow("No ads to show.");
      return;
    }
    sampleRewardedAd.showAd(activity);
  }
  ...
}

Raportowanie zdarzeń reklamowych do pakietu SDK do reklam mobilnych

Po wyświetleniu reklamy adapter powinien zgłaszać zdarzenia cyklu życia reklamy odpowiednio do pakietu SDK do reklam mobilnych Google, korzystając z obiektuMediationRewardedAdCallback dostarczonego podczas wczytywania reklamy.

Te wywołania zwrotne są zwykle przekierowywane z metod wywołań zwrotnych uruchamianych przez pakiet SDK sieci reklamowej. Ten przykład implementuje wywołania zwrotne z przykładowego pakietu SDK i mapuje je na wywołania zwrotne dostępne w MediationRewardedAdCallback.

public class SampleAdapter extends Adapter, SampleRewardedAdListener
    implements MediationRewardedAd {
  ...
  @Override
  public void onAdRewarded(final String rewardType, final int amount) {
    RewardItem rewardItem =
        new RewardItem() {
          @Override
          public String getType() {
            return rewardType;
          }

          @Override
          public int getAmount() {
            return amount;
          }
        };
    rewardedAdCallback.onUserEarnedReward(rewardItem);
  }

  @Override
  public void onAdClicked() {
    rewardedAdCallback.reportAdClicked();
  }

  @Override
  public void onAdFullScreen() {
    rewardedAdCallback.onAdOpened();
    rewardedAdCallback.onVideoStart();
    rewardedAdCallback.reportAdImpression();
  }

  @Override
  public void onAdClosed() {
    rewardedAdCallback.onAdClosed();
  }

  @Override
  public void onAdCompleted() {
    rewardedAdCallback.onVideoComplete();
  }
  ...
}

Poniżej znajdziesz szczegółowe informacje o zdarzeniach reklamowych, które powinny być raportowane do pakietu SDK do reklam mobilnych Google:

Zdarzenie dotyczące reklamy Opis
onAdOpened() Powiadamia pakiet SDK do reklam mobilnych Google, że reklama zostanie otwarta.
onVideoStart() Powiadomienie pakietu SDK do reklam mobilnych Google o rozpoczęciu odtwarzania reklamy z nagrodą.
reportAdImpression() Powiadomienie pakietu SDK do reklam mobilnych Google o tym, że reklama została wyświetlona.
onVideoComplete() Powiadomienie pakietu SDK do reklam mobilnych Google o zakończeniu odtwarzania reklamy z nagrodą.
onUserEarnedReward() Informuje pakiet SDK do reklam mobilnych Google, że użytkownik zdobył nagrodę.
reportAdClicked() Informuje pakiet SDK do reklam mobilnych Google o kliknięciu reklamy.
onAdClosed() Powiadomienie pakietu SDK do reklam mobilnych Google o zamknięciu reklamy.
onAdFailedToShow() Informuje pakiet SDK do reklam mobilnych Google, że reklama się nie wyświetliła.