الإعلان البيني بمكافأة (إصدار تجريبي)

اختيار النظام الأساسي: Android iOS Unity Flutter

الإعلان البيني مقابل مكافأة هو نوع من أشكال الإعلانات المحفَّزة التي تتيح لك تقديم مكافآت مقابل الإعلانات التي تظهر تلقائيًا أثناء عمليات الانتقال الطبيعية في التطبيق. على عكس الإعلانات مقابل مكافأة، لا يُطلب من المستخدمين الموافقة على عرض إعلان بيني مقابل مكافأة. يوضّح هذا الدليل كيفية دمج الإعلانات البينية مقابل مكافأة من AdMob في تطبيق Flutter.

المتطلبات الأساسية

  • الإصدار 1.1.0 أو إصدار أحدث من إضافة Flutter
  • أكمِل الخطوات في البدء. يجب أن يكون تطبيق Flutter قد تم استيراد إضافة Google Mobile Ads Flutter إليه.

اختبار الإعلانات دائمًا باستخدام الإعلانات الاختبارية

عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات اختبارية بدلاً من الإعلانات المباشرة في مرحلة الإنتاج. وقد يؤدي عدم إجراء ذلك إلى تعليق حسابك.

أسهل طريقة لتحميل إعلانات اختبارية هي استخدام رقم تعريف وحدة الإعلانات الاختبارية المخصّص للإعلانات البينية بمكافأة:

Android

ca-app-pub-3940256099942544/5354046379

iOS

ca-app-pub-3940256099942544/6978759866

تم إعداد الوحدات الإعلانية الاختبارية لعرض إعلانات اختبارية لكل طلب، ويمكنك استخدامها في تطبيقاتك الخاصة أثناء الترميز والاختبار وتصحيح الأخطاء. ما عليك سوى التأكّد من استبدالها بأرقام تعريف الوحدات الإعلانية الخاصة بك قبل نشر تطبيقك.

تحميل إعلان

يعرض المثال التالي كيفية تحميل إعلان بيني يضم مكافأة:

class RewardedInterstitialExampleState extends State<RewardedInterstitialExample> {
  RewardedInterstitialAd? _rewardeInterstitialdAd;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/5354046379'
    : 'ca-app-pub-3940256099942544/6978759866';

  /// Loads a rewarded ad.
  void loadAd() {
    RewardedInterstitialAd.load(
        adUnitId: adUnitId,
        adRequest: const AdRequest(),
        adLoadCallback: RewardedInterstitialAdLoadCallback(
          // Called when an ad is successfully received.
          onAdLoaded: (ad) {
            debugPrint('$ad loaded.');
            // Keep a reference to the ad so you can show it later.
            _rewardedInterstitialAd = ad;
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (LoadAdError error) {
            debugPrint('RewardedInterstitialAd failed to load: $error');
          },
        ));
  }
}

أحداث الإعلانات البينية مقابل مكافأة

من خلال استخدام FullScreenContentCallback، يمكنك الاستماع إلى أحداث دورة الحياة، مثل وقت عرض الإعلان أو رفضه. اضبط قيمة RewardedInterstitialAd.fullScreenContentCallback قبل عرض الإعلان لتلقّي إشعارات بشأن هذه الأحداث. ينفّذ هذا المثال كل طريقة ويسجّل رسالة في وحدة التحكّم:

class RewardedInterstitialExampleState extends State<RewardedInterstitialExample> {
  RewardedInterstitialAd? _rewardedInterstitialAd;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/5354046379'
    : 'ca-app-pub-3940256099942544/6978759866';

  /// Loads a rewarded ad.
  void loadAd() {
    RewardedInterstitialAd.load(
        adUnitId: adUnitId,
        adRequest: const AdRequest(),
        adLoadCallback: RewardedInterstitialAdLoadCallback(
          // Called when an ad is successfully received.
          onAdLoaded: (ad) {
            ad.fullScreenContentCallback = FullScreenContentCallback(
              // Called when the ad showed the full screen content.
              onAdShowedFullScreenContent: (ad) {},
              // Called when an impression occurs on the ad.
              onAdImpression: (ad) {},
              // Called when the ad failed to show full screen content.
              onAdFailedToShowFullScreenContent: (ad, err) {
                // Dispose the ad here to free resources.
                ad.dispose();
              },
              // Called when the ad dismissed full screen content.
              onAdDismissedFullScreenContent: (ad) {
                // Dispose the ad here to free resources.
                ad.dispose();
              },
              // Called when a click is recorded for an ad.
              onAdClicked: (ad) {});

            debugPrint('$ad loaded.');
            // Keep a reference to the ad so you can show it later.
            _rewardedInterstitialAd = ad;
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (LoadAdError error) {
            debugprint('RewardedInterstitialAd failed to load: $error');
          },
        ));
  }
}

إعلان صوري

يتم عرض RewardedInterstitialAd كتراكب فوق كل محتوى التطبيق، ويتم وضعه بشكل ثابت، وبالتالي لا يمكن إضافته إلى شجرة عناصر واجهة المستخدم في Flutter. يمكنك اختيار وقت عرض الإعلان من خلال طلب show(). تستخدِم RewardedInterstitialAd.show() OnUserEarnedRewardCallback، ويتم استدعاؤها عندما يحصل المستخدم على مكافأة. احرص على تنفيذ ذلك ومكافأة المستخدم على مشاهدة الإعلان.

_rewardedInterstitialAd.show(onUserEarnedReward: (AdWithoutView ad, RewardItem rewardItem) {
  // Reward the user for watching an ad.
});

بعد استدعاء show()، لا يمكن إزالة Ad المعروض بهذه الطريقة آليًا، بل يتطلّب ذلك تدخّل المستخدم. لا يمكن عرض RewardedInterstitialAd إلا مرة واحدة. ستؤدي المكالمات اللاحقة التي سيتم عرضها إلى تشغيل onAdFailedToShowFullScreenContent.

يجب التخلّص من الإعلان عندما لا يعود هناك حاجة إلى الوصول إليه. أفضل ممارسة لتحديد وقت استدعاء dispose() هي في عمليات معاودة الاتصال FullScreenContentCallback.onAdDismissedFullScreenContent وFullScreenContentCallback.onAdFailedToShowFullScreenContent.

هذا كل شيء! أصبح تطبيقك الآن جاهزًا لعرض الإعلانات البينية مقابل مكافآت.

مثال كامل على GitHub

إعلان بيني مقابل مكافأة