پیاده سازی یک آداپتور تبلیغاتی با پاداش

یک آداپتور میانجی پیام‌ها و درخواست‌ها را از Google Mobile Ads SDK دریافت می‌کند و با یک SDK شبکه شخص ثالث ارتباط برقرار می‌کند تا این درخواست‌ها را برآورده کند.

این راهنما برای شبکه‌های تبلیغاتی در نظر گرفته شده است که به دنبال ایجاد یک آداپتور میانجی آگهی با پاداش برای میانجیگری تبلیغات موبایلی Google هستند. یک نمونه SDK در قطعه کد زیر برای اهداف نمایشی استفاده می شود. می‌توانید اجرای کامل یک آداپتور ساخته شده برای این نمونه SDK را در پروژه AndroidMediation ما بیابید. این راهنما نحوه ساخت آداپتور را توضیح می دهد.

نام کلاس آداپتور و پارامترهای سرور را تعریف کنید

شبکه‌های تبلیغاتی که از طریق پلتفرم میانجی‌گری AdMob انجام می‌شوند معمولاً برای شناسایی ناشر به یک یا چند شناسه نیاز دارند. این شناسه‌ها به‌عنوان پارامترهای سرور نشان داده می‌شوند و هنگام پیکربندی یک شبکه تبلیغاتی شخص ثالث برای میانجی‌گری در رابط کاربری AdMob تعریف می‌شوند.

قبل از ایجاد یک آداپتور میانجی، باید نام کلاس آداپتور خود و سایر پارامترهای مورد نیاز را برای دسترسی به شبکه تبلیغاتی خود در اختیار Google قرار دهید.

پیاده سازی کلاس آداپتور

اولین قدم پیاده سازی کلاس انتزاعی Adapter است:

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

public class SampleAdapter extends Adapter {
 ...
}

این تغییر تضمین می کند که کلاس شما چندین متد را که در زیر مورد بحث قرار گرفته است را پیاده سازی می کند.

گزارش شماره نسخه

آداپتور باید هم نسخه خود آداپتور و هم نسخه SDK شخص ثالث را به Google Mobile Ads SDK گزارش دهد. نسخه ها با استفاده از VersionInfoگزارش شده اند.

آداپتورهای منبع باز و نسخه شده Google از طرح نسخه آداپتور 4 رقمی استفاده می کنند، اما VersionInfoفقط 3 رقم را مجاز می کند. برای حل این مشکل، توصیه می شود که دو رقم آخر را در نسخه پچ ترکیب کنید، همانطور که در زیر نشان داده شده است:

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

آداپتور را راه اندازی کنید

پس از راه‌اندازی اولیه Google Mobile Ads SDK توسط یک برنامه، initialize() روی همه آداپتورهای پیکربندی شده برای برنامه در رابط کاربری AdMob فراخوانی می‌شود.

آرگومان List<MediationConfiguration> اطلاعاتی را در مورد همه مکان‌های پیکربندی شده برای شبکه تبلیغاتی شما در رابط کاربری AdMob ارائه می‌کند. از این اطلاعات برای راه اندازی SDK شبکه تبلیغاتی خود استفاده کنید. هنگامی که SDK شبکه تبلیغاتی شما راه اندازی شد، با فراخوانی روش onInitializationSucceeded() یا onInitializationFailed() در آرگومان InitializationCompleteCallback ارائه شده در initialize() InitializationCompleteCallback، یک مقداردهی اولیه موفقیت آمیز یا ناموفق را به Google Mobile Ads SDK گزارش دهید.

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

درخواست آگهی با پاداش

از متد loadRewardedAd() برای درخواست تبلیغ با پاداش استفاده کنید. یک مرجع به MediationAdLoadCallback نگه دارید، که به شما امکان می‌دهد یک بار آگهی موفق یا ناموفق را به Google Mobile Ads SDK گزارش دهید.

شی MediationRewardedAdCallback پس از فراخوانی onSuccess() در دسترس خواهد بود، که بعداً از آن برای انتقال سایر رویدادهای تبلیغاتی مانند کلیک‌ها یا پاداش‌های اعطایی استفاده خواهید کرد.

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

آگهی را نمایش دهید

Google Mobile Ads SDK ممکن است روش showAd() آداپتور شما را در هر زمانی که SDK از بارگیری موفقیت آمیز تبلیغ مطلع شد، فراخوانی کند. آداپتور باید تبلیغ پاداش را نمایش دهد. اگر به هر دلیلی تبلیغ نمی تواند نمایش داده شود، با callback 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);
  }
  ...
}

رویدادهای تبلیغاتی را به SDK تبلیغات موبایل گزارش دهید

پس از نمایش آگهی، آداپتور باید رویدادهای چرخه عمر آگهی را مطابق با Google Mobile Ads SDK با استفاده از شئ MediationRewardedAdCallback ارائه شده در زمان بارگیری موفقیت آمیز آگهی گزارش کند.

به طور معمول، این تماس‌ها از روش‌های پاسخ به تماسی که توسط SDK شبکه تبلیغاتی شما اجرا می‌شوند، ارسال می‌شوند. این مثال، تماس‌های Sample SDK را پیاده‌سازی می‌کند و آنها را به تماس‌های موجود در 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();
  }
  ...
}

رویدادهای تبلیغاتی که باید به Google Mobile Ads SDK گزارش شوند به تفصیل در زیر آمده است:

رویداد تبلیغاتی شرح
onAdOpened() به Google Mobile Ads SDK اطلاع می دهد که آگهی باز خواهد شد.
onVideoStart() به Google Mobile Ads SDK اطلاع می دهد که یک تبلیغ پاداش شروع به پخش کرد.
ReportAdImpression() به Google Mobile Ads SDK اطلاع می‌دهد که نمایشی در آگهی رخ داده است.
onVideoComplete() به Google Mobile Ads SDK اطلاع می دهد که پخش آگهی پاداش داده شده به پایان رسیده است.
onUserEarnedReward() به Google Mobile Ads SDK اطلاع می دهد که کاربر پاداشی را به دست آورده است.
ReportAdClicked() به Google Mobile Ads SDK اطلاع می دهد که روی تبلیغ کلیک شده است.
onAdClosed() به Google Mobile Ads SDK اطلاع می دهد که آگهی بسته شده است.
onAdFailedToShow() به Google Mobile Ads SDK اطلاع می دهد که تبلیغ نمایش داده نشد.