تبلیغات بنری

پلتفرم مورد نظر را انتخاب کنید: اندروید (بتا) جدید-منتخب اندروید، iOS، یونیتی ، فلاتر

بنرهای تبلیغاتی، تبلیغات مستطیلی شکلی هستند که بخشی از طرح‌بندی برنامه را اشغال می‌کنند. بنرهای تطبیقی ​​لنگری، تبلیغاتی با نسبت ابعاد ثابت هستند که در حین تعامل کاربران با برنامه، روی صفحه باقی می‌مانند و یا در بالا یا پایین صفحه نمایش قرار می‌گیرند.

این راهنما نحوه بارگذاری یک بنر تبلیغاتی تطبیقی ​​متصل به یک برنامه اندروید را پوشش می‌دهد.

پیش‌نیازها

همیشه با تبلیغات آزمایشی تست کنید

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

ساده‌ترین راه برای بارگذاری تبلیغات آزمایشی، استفاده از شناسه اختصاصی واحد تبلیغات آزمایشی ما برای بنرهای اندروید است:

/21775744923/example/adaptive-banner

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

برای اطلاعات بیشتر در مورد نحوه عملکرد تبلیغات آزمایشی GMA Next-Gen SDK ، به بخش «فعال کردن تبلیغات آزمایشی» مراجعه کنید.

یک شیء AdView ایجاد کنید

برای نمایش بنرها، موارد زیر را انجام دهید:

کاتلین

  1. یک شیء AdView ایجاد کنید.
  2. شیء AdView را به طرح‌بندی برنامه خود اضافه کنید.

مثال زیر شیء AdView را ایجاد و به طرح‌بندی برنامه اضافه می‌کند:

private fun createAdView(adViewContainer: FrameLayout, activity: Activity) {
  val adView = AdView(activity)
  adViewContainer.addView(adView)
}

جاوا

  1. یک شیء AdView ایجاد کنید.
  2. شیء AdView را به طرح‌بندی برنامه خود اضافه کنید.

مثال زیر شیء AdView را ایجاد و به طرح‌بندی برنامه اضافه می‌کند:

private void createAdView(FrameLayout adViewContainer, Activity activity) {
  AdView adView = new AdView(activity);
  adViewContainer.addView(adView);
}

طرح‌بندی XML

یک عنصر AdView به فایل XML طرح‌بندی خود اضافه کنید:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <com.google.android.libraries.ads.mobile.sdk.banner.AdView
      android:id="@+id/adView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

جت‌پک آهنگسازی

  1. یک عنصر AndroidView را در رابط کاربری Compose قرار دهید.
  2. یک متغیر mutableStateOf<BannerAd?> برای نگهداری بنر تبلیغاتی تعریف کنید:
// Initialize required variables.
val context = LocalContext.current
var bannerAdState by remember { mutableStateOf<BannerAd?>(null) }

// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  bannerAdState?.let { bannerAd ->
    Box(modifier = Modifier.fillMaxWidth()) {
      // Display the ad within an AndroidView.
      AndroidView(
        modifier = modifier.wrapContentSize(),
        factory = { bannerAd.getView(requireActivity()) },
      )
    }
  }
}

بارگذاری یک تبلیغ

مثال زیر یک بنر تبلیغاتی تطبیقی ​​با عرض ۳۶۰ را در یک شیء AdView بارگذاری می‌کند:

کاتلین

private fun loadBannerAd(adView: AdView, activity: Activity) {
  // Get a BannerAdRequest for a 360 wide anchored adaptive banner ad.
  val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(activity, 360)
  val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()

  adView.loadAd(
    adRequest,
    object : AdLoadCallback<BannerAd> {
      override fun onAdLoaded(ad: BannerAd) {
        ad.adEventCallback =
          object : BannerAdEventCallback {
            override fun onAdImpression() {
              Log.d(TAG, "Banner ad recorded an impression.")
            }

            override fun onAdClicked() {
              Log.d(TAG, "Banner ad clicked.")
            }
          }
      }

      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.e(TAG, "Banner ad failed to load: $adError")
      }
    },
  )
}

جاوا

private void loadBannerAd(AdView adView, Activity activity) {
  // Get a BannerAdRequest for a 360 wide anchored adaptive banner ad.
  AdSize adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(activity, 360);
  BannerAdRequest adRequest = new BannerAdRequest.Builder(AD_UNIT_ID, adSize).build();

  adView.loadAd(
      adRequest,
      new AdLoadCallback<BannerAd>() {
        @Override
        public void onAdLoaded(@NonNull BannerAd bannerAd) {
          bannerAd.setAdEventCallback(
              new BannerAdEventCallback() {
                @Override
                public void onAdImpression() {
                  Log.d(TAG, "Banner ad recorded an impression.");
                }

                @Override
                public void onAdClicked() {
                  Log.d(TAG, "Banner ad clicked.");
                }
              });
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          Log.e(TAG, "Banner ad failed to load: " + adError);
        }
      });
}

جت‌پک آهنگسازی

// Request an anchored adaptive banner with a width of 360.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(requireContext(), 360)

// Load the ad when the screen is active.
val coroutineScope = rememberCoroutineScope()
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(context) {
  bannerAdState?.destroy()
  if (!isPreviewMode) {
    coroutineScope.launch {
      when (val result = BannerAd.load(BannerAdRequest.Builder(AD_UNIT_ID, adSize).build())) {
        is AdLoadResult.Success -> {
          bannerAdState = result.ad
        }
        is AdLoadResult.Failure -> {
          showToast("Banner failed to load.")
          Log.w(Constant.TAG, "Banner ad failed to load: $result.error")
        }
      }
    }
  }
}

تازه کردن یک آگهی

اگر واحد تبلیغاتی خود را برای به‌روزرسانی پیکربندی کرده‌اید، در صورت عدم بارگذاری تبلیغ، نیازی به درخواست تبلیغ دیگری ندارید. GMA Next-Gen SDK هر نرخ به‌روزرسانی که در رابط کاربری مدیر تبلیغات مشخص کرده‌اید را در نظر می‌گیرد. اگر به‌روزرسانی را فعال نکرده‌اید، یک درخواست جدید ارسال کنید. برای جزئیات بیشتر در مورد به‌روزرسانی واحد تبلیغاتی، مانند تنظیم نرخ به‌روزرسانی، به نرخ به‌روزرسانی برای تبلیغات در برنامه‌های تلفن همراه مراجعه کنید.

انتشار یک منبع تبلیغاتی

وقتی استفاده از بنر تبلیغاتی تمام شد، می‌توانید منابع بنر تبلیغاتی را آزاد کنید.

برای آزادسازی منبع تبلیغ، تبلیغ را از سلسله مراتب نما حذف کرده و تمام ارجاعات آن را حذف می‌کنید:

کاتلین

// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
  parentView.removeView(adView)
}

// Destroy the banner ad resources.
adView?.destroy()

// Drop reference to the banner ad.
adView = null

جاوا

// Remove banner from view hierarchy.
if (adView.getParent() instanceof ViewGroup) {
  ((ViewGroup) adView.getParent()).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
// Drop reference to the banner ad.
adView = null;

جت‌پک آهنگسازی


// Destroy the ad when the screen is disposed.
DisposableEffect(Unit) { onDispose { bannerAdState?.destroy() } }

رویدادهای تبلیغاتی

شما می‌توانید به تعدادی از رویدادها در چرخه عمر تبلیغ، از جمله نمایش و کلیک تبلیغ، و همچنین باز و بسته شدن تبلیغ، گوش دهید. توصیه می‌شود قبل از نمایش بنر، فراخوانی را تنظیم کنید.

کاتلین

BannerAd.load(
  BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.adEventCallback =
        object : BannerAdEventCallback {
          override fun onAdImpression() {
            // Banner ad recorded an impression.
          }

          override fun onAdClicked() {
            // Banner ad recorded a click.
          }

          override fun onAdShowedFullScreenContent() {
            // Banner ad showed.
          }

          override fun onAdDismissedFullScreenContent() {
            // Banner ad dismissed.
          }

          override fun onAdFailedToShowFullScreenContent(
            fullScreenContentError: FullScreenContentError
          ) {
            // Banner ad failed to show.
          }
        }
    }
    // ...
  }
)

جاوا

BannerAd.load(
    new BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        ad.setAdEventCallback(new BannerAdEventCallback() {
          @Override
          public void onAdImpression() {
            // Banner ad recorded an impression.
          }

          @Override
          public void onAdClicked() {
            // Banner ad recorded a click.
          }

          @Override
          public void onAdShowedFullScreenContent() {
            // Banner ad showed.
          }

          @Override
          public void onAdDismissedFullScreenContent() {
            // Banner ad dismissed.
          }

          @Override
          public void onAdFailedToShowFullScreenContent(
              @NonNull FullScreenContentError fullScreenContentError) {
            // Banner ad failed to show.
          }
        });

        // ...
      }
    });

فراخوان به‌روزرسانی آگهی

اگر از به‌روزرسانی خودکار برای بنرهای تبلیغاتی استفاده می‌کنید، BannerAdRefreshCallback رویدادهای به‌روزرسانی آگهی را مدیریت می‌کند. حتماً قبل از اضافه کردن نمای تبلیغ به سلسله مراتب نمای خود، فراخوانی را تنظیم کنید. برای جزئیات بیشتر در مورد به‌روزرسانی آگهی، به «به‌روزرسانی یک آگهی» مراجعه کنید.

کاتلین

BannerAd.load(
  BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.bannerAdRefreshCallback =
        object : BannerAdRefreshCallback {
          // Set the ad refresh callbacks.
          override fun onAdRefreshed() {
            // Called when the ad refreshes.
          }

          override fun onAdFailedToRefresh(loadAdError: LoadAdError) {
            // Called when the ad fails to refresh.
          }
        }

      // ...
    }
  }
)

جاوا

BannerAd.load(
    new BannerAdRequest.Builder("/21775744923/example/adaptive-banner", adSize).build(),
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd ad) {
        ad.setBannerAdRefreshCallback(
            // Set the ad refresh callbacks.
            new BannerAdRefreshCallback() {
              @Override
              public void onAdRefreshed() {
                // Called when the ad refreshes.
              }

              @Override
              public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
                // Called when the ad fails to refresh.
              }
            });
        // ...
      }
    });

شتاب سخت‌افزاری برای تبلیغات ویدیویی

برای اینکه تبلیغات ویدیویی با موفقیت در نمایش بنرهای تبلیغاتی شما نمایش داده شوند، باید شتاب‌دهنده سخت‌افزاری فعال باشد.

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

فعال کردن شتاب سخت‌افزاری

اگر برنامه شما با فعال بودن شتاب سخت‌افزاری به صورت سراسری به درستی رفتار نمی‌کند، می‌توانید آن را برای فعالیت‌های منفرد نیز کنترل کنید. برای فعال یا غیرفعال کردن شتاب سخت‌افزاری، می‌توانید از ویژگی android:hardwareAccelerated برای عناصر <application> و <activity> در AndroidManifest.xml خود استفاده کنید. مثال زیر شتاب سخت‌افزاری را برای کل برنامه فعال می‌کند اما آن را برای یک فعالیت غیرفعال می‌کند:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

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

برنامه‌ی نمونه‌ای که نحوه‌ی استفاده از GMA Next-Gen SDK را نشان می‌دهد، دانلود و اجرا کنید.