شروع کنید

اولین قدم این است که Android PAL SDK را به برنامه خود اضافه کنید.

Android PAL SDK را به عنوان کتابخانه اضافه کنید

از نسخه 18.0.0، PAL SDK در مخزن Maven Google میزبانی می شود و می تواند به شرح زیر به برنامه شما اضافه شود:

app/build.gradle

...
dependencies {
    implementation 'com.google.android.gms:play-services-pal:20.2.0'
    ...
}

از طرف دیگر، PAL SDK را می توان از مخزن Maven Google بارگیری کرد و به صورت دستی به برنامه خود اضافه کرد.

ایجاد هیچ

یک "nonce" یک رشته رمزگذاری شده واحد است که توسط PAL با استفاده از NonceLoader تولید می شود. PAL SDK نیاز دارد که هر درخواست جریان جدید با یک nonce جدید تولید شده همراه باشد. با این حال، nonces را می توان برای چندین درخواست تبلیغات در یک جریان استفاده مجدد کرد. برای ایجاد یک nonce با استفاده از PAL SDK، تغییراتی را در MyActivity.java ایجاد کنید. برای دیدن یک برنامه نمونه که از PAL برای تولید nonce استفاده می کند، نمونه Android را از GitHub دانلود کنید.

ابتدا باید PAL SDK را وارد کنید، چند ویژگی خصوصی برای ذخیره NonceLoader و NonceManager خود ایجاد کنید و سپس NonceLoader خود را مقداردهی اولیه کنید.

توصیه می کنیم برای هر جلسه کاربر در برنامه خود فقط یک نمونه از کلاس NonceLoader ایجاد کنید، مگر اینکه برنامه شما دارای چندین صفحه یا ساختارهای مشابه باشد. با این کار همبسته صفحه ( &correlator ) در طول عمر یک صفحه یا جلسه کاربر در برنامه بدون تغییر باقی می ماند. شما همچنان روی همبسته جریان ( &scor ) کنترل دارید که باید برای هر جریان جدید یک بار بازنشانی شود.

همه درخواست‌های تبلیغاتی یک جریان باید از NonceLoader و مقدار همبسته جریان برای محدودیت فرکانس و ویژگی‌های حذف رقابتی استفاده کنند تا به درستی کار کنند.

import android.app.Activity;
import android.os.Bundle;
import com.google.ads.interactivemedia.pal.NonceLoader;
import com.google.ads.interactivemedia.pal.NonceManager;
import com.google.ads.interactivemedia.pal.NonceRequest;
import com.google.ads.interactivemedia.pal.ConsentSettings;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;

import java.util.HashSet;
import java.util.Set;

public class MainActivity extends Activity {
...
  private NonceLoader nonceLoader;
  private NonceManager nonceManager = null;
  private ConsentSettings consentSettings;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // The default value for allowStorage() is false, but can be
    // changed once the appropriate consent has been gathered. The
    // getConsentToStorage() method is a placeholder for the publisher's own
    // method of obtaining user consent, either by integrating with a CMP or
    // based on other methods the publisher chooses to handle storage consent.

    boolean isConsentToStorage = getConsentToStorage();

    videoView = findViewById(R.id.video_view);
    videoView.setOnTouchListener(this::onVideoViewTouch);

    consentSettings = ConsentSettings.builder()
            .allowStorage(isConsentToStorage)
            .build();

    // It is important to instantiate the NonceLoader as early as possible to
    // allow it to initialize and preload data for a faster experience when
    // loading the NonceManager. A new NonceLoader will need to be instantiated
    //if the ConsentSettings change for the user.
    nonceLoader = new NonceLoader(this, consentSettings);
    ...
  }

در مرحله بعد، یک تابع برای راه اندازی تولید nonce ایجاد کنید. برای همه درخواست‌های تبلیغاتی در یک پخش جریانی تنها به یک نونس نیاز دارید. برای اهداف آزمایشی، می‌توانید این تابع را هنگام کلیک کردن روی یک دکمه در برنامه آزمایشی خود فراخوانی کنید.

این تابع تولید nonce را به صورت ناهمزمان راه‌اندازی می‌کند، بنابراین باید یک AsyncTask برای مدیریت موفقیت یا عدم موفقیت درخواست nonce پیاده‌سازی کنید:

public void generateNonceForAdRequest() {
  Set supportedApiFrameWorksSet = new HashSet();
  supportedApiFrameWorksSet.add(2);
  supportedApiFrameWorksSet.add(7);
  supportedApiFrameWorksSet.add(9);

  NonceRequest nonceRequest = NonceRequest.builder()
      .descriptionURL("https://example.com/content1")
      .iconsSupported(true)
      .omidVersion("1.0.0")
      .omidPartnerVersion("6.2.1")
      .omidPartnerName("Example Publisher")
      .playerType("ExamplePlayerType")
      .playerVersion("1.0.0")
      .ppid("testPpid")
      .sessionId("Sample SID")
      .supportedApiFrameworks(supportedApiFrameWorksSet)
      .videoPlayerHeight(480)
      .videoPlayerWidth(640)
      .willAdAutoPlay(true)
      .willAdPlayMuted(true)
      .build();
  NonceCallbackImpl callback = new NonceCallbackImpl();
  nonceLoader
      .loadNonceManager(nonceRequest)
      .addOnSuccessListener(callback)
      .addOnFailureListener(callback);
}

private class NonceCallbackImpl implements OnSuccessListener<NonceManager>, OnFailureListener {
  @Override
  public void onSuccess(NonceManager manager) {
    nonceManager = manager;
    String nonceString = manager.getNonce();
    Log.i("PALSample", "Generated nonce: " + nonceString);
    // from here you would trigger your ad request and move on to initialize content
  }

  @Override
  public void onFailure(Exception error) {
    Log.e("PALSample", "Nonce generation failed: " + error.getMessage());
  }
}

هنگامی که یک مدیر nonce ایجاد می شود، می توان آن را در هر زمان با استفاده از nonceManager.getNonce() بازیابی کرد.

به درخواست آگهی ضمیمه کنید

برای استفاده از nonce ایجاد شده، قبل از درخواست تبلیغات، تگ تبلیغات خود را با یک پارامتر givn و مقدار nonce اضافه کنید.

/**
 * The ad tag for your ad request, for example:
 * https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external\
 * /single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1\
 * &cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=
 *
 * For more sample ad tags, see
 * developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags
 */
private static final String DEFAULT_AD_TAG = "Your ad tag";
...
@Override
public void onSuccess(NonceManager manager) {
  nonceManager = manager;
  String nonceString = manager.getNonce();
  Log.i("PALSample", "Generated nonce: " + nonceString);
  // Append the nonce to the ad tag URL.
  makeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
}

رویدادهای پخش را پیگیری کنید

در نهایت، شما نیاز به پیاده سازی رویدادهای مختلف برای پخش کننده خود دارید. برای اهداف آزمایشی، می‌توانید این موارد را به رویدادهای کلیک دکمه متصل کنید، اما در یک پیاده‌سازی واقعی، این موارد توسط رویدادهای پخش‌کننده مناسب ایجاد می‌شوند:

public void sendAdClick() {
  if (nonceManager != null) {
    nonceManager.sendAdClick();
  }
}

public void sendPlaybackStart() {
  if (nonceManager != null) {
    nonceManager.sendPlaybackStart();
  }
}

public void sendPlaybackEnd() {
  if (nonceManager != null) {
    nonceManager.sendPlaybackEnd();
  }
}

public void onVideoViewTouch(MotionEvent e) {
  if (nonceManager != null) {
    nonceManager.sendTouch(e);
  }
}

در اینجا زمان فراخوانی هر تابع در پیاده سازی است:

  • sendPlaybackStart() : زمانی که جلسه پخش ویدیوی شما شروع می شود
  • sendPlaybackEnd() : زمانی که جلسه پخش ویدیوی شما به پایان می رسد
  • sendAdClick() : هر بار که بیننده روی تبلیغ کلیک می کند
  • sendTouch() : در هر تعامل لمسی با پخش کننده

(اختیاری) سیگنال های Google Ad Manager را از طریق سرورهای تبلیغاتی شخص ثالث ارسال کنید

هنگامی که سرور تبلیغات شخص ثالث خود را برای کار با Google Ad Manager تنظیم می‌کنید، به مستندات سرور خود مراجعه کنید تا مقدار nonce را در هر درخواست تبلیغ دریافت و ارسال کنید. مثال ارائه شده مربوط به یک URL درخواست تبلیغ با پارامتر nonce است. پارامتر nonce از PAL SDK، از طریق سرورهای واسطه شما، و سپس به Ad Manager منتشر می‌شود و امکان کسب درآمد بهتر را فراهم می‌کند.

سرور تبلیغات شخص ثالث خود را پیکربندی کنید تا nonce را در درخواست سرور به Ad Manager لحاظ کند. در اینجا نمونه ای از تگ تبلیغاتی است که در داخل سرور تبلیغات شخص ثالث پیکربندی شده است:

'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'

برای جزئیات بیشتر، راهنمای پیاده سازی سمت سرور Google Ad Manager را ببینید.

Ad Manager برای شناسایی مقدار nonce به دنبال givn= می گردد. سرور تبلیغات شخص ثالث باید از مقداری ماکرو خاص مانند %%custom_key_for_google_nonce%% پشتیبانی کند و آن را با پارامتر درخواست nonce که در مرحله قبل ارائه کردید جایگزین کند. اطلاعات بیشتر در مورد نحوه انجام این کار باید در مستندات سرور تبلیغات شخص ثالث موجود باشد.