إضافة إعلانات الفيديو بمكافأة إلى تطبيق Unity

تتيح لك Audience Network إمكانية تحقيق أرباح من تطبيقاتك على أنظمة Android وiOS من خلال إعلانات فيسبوك. إعلانات الفيديو بمكافأة عبارة عن تجربة بوضع ملء الشاشة تتيح للمستخدمين اختيار مشاهدة إعلان فيديو مقابل الحصول على شيء ذي قيمة، مثل عملة افتراضية وعناصر داخل التطبيق ومحتوى حصري وغير ذلك. تجربة الإعلان عبارة عن فيديو قصير وبطاقة إنهاء بدعوة لاتخاذ إجراء. بمجرد اكتمال عرض الفيديو بالكامل، فستتلقى استدعاءً لمنح المكافأة المقترحة للمستخدم.

احرص على قراءة دلائل بدء استخدام Audience Network وبدء استخدام تطبيق Unity قبل المتابعة.

خطوات إعلانات فيديو بمكافأة

الخطوة الأولى: تهيئة إعلانات الفيديو بمكافأة

الخطوة الثانية: إضافة أحداث الاستدعاء

الخطوة الثالثة: تحميل الإعلان

الخطوة الرابعة: عرض الإعلان

الخطوة الأولى: تهيئة إعلانات الفيديو بمكافأة

تتمثل الخطوة الأولى لعرض إعلان الفيديو بمكافأة في إنشاء كائن RewardedVideoAd في برنامج C#‎ نصي مرفق في GameObject.

...
using AudienceNetwork;
...

public class RewardedVideoAdTest : MonoBehaviour
{
    public void LoadRewardedVideo()
    {
        // Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings).
        // Use different ID for each ad placement in your app.
        this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID");

        this.rewardedVideoAd.Register(this.gameObject);

        // Set delegates to get notified on changes or when the user interacts with the ad.
        this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
            Debug.Log("RewardedVideo ad loaded.");
            this.isLoaded = true;
        });
        this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
            Debug.Log("RewardedVideo ad failed to load with error: " + error);
        });
        this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
            Debug.Log("RewardedVideo ad logged impression.");
        });
        this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
            Debug.Log("RewardedVideo ad clicked.");
        });

        this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
            Debug.Log("Rewarded video ad did close.");
            if (this.rewardedVideoAd != null) {
                this.rewardedVideoAd.Dispose();
            }
        });

        // Initiate the request to load the ad.
        this.rewardedVideoAd.LoadAd();
    }
}

تتوفر لدى جهة إنشاء RewardedVideoAd المعلمات التالية:

  • placementId - معرف موضع Audience Network للوحدة الإعلانية للفيديو بمكافأة.

الخطوة الثانية: إضافة أحداث الاستدعاء

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

...
// Set delegates to get notified on changes or when the user interacts with the ad.
this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
    Debug.Log("RewardedVideo ad loaded.");
    this.isLoaded = true;
});
this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
    Debug.Log("RewardedVideo ad failed to load with error: " + error);
});
this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
    Debug.Log("RewardedVideo ad logged impression.");
});
this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
    Debug.Log("RewardedVideo ad clicked.");
});

this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
    Debug.Log("Rewarded video ad did close.");
    if (this.rewardedVideoAd != null) {
        this.rewardedVideoAd.Dispose();
    }
});
...

استدعاء نشاط الإعلان التالف في Android لتطبيق Unity

لا يتعلق ذلك سوى بنظام Android.

لا تدعم ألعاب Unity الحالية الخاصة بنظام Android سوى Activity الرئيسي في Unity للحصول على launchMode من singleTask. اعرض مستند Unity لملف بيانات Android ومستند Android للنشاط.

نظرًا لأننا نستخدم Activity لعرض إعلانات Interstitial وRewarded Video، قد يكون نشاط الإعلان تالفًا دون إغلاقه بشكل صحيح عندما يستعين المستخدم بأحد التطبيقات كخلفية، ثم يعيد تشغيله باستخدام الأيقونة وليس من مبدل التطبيقات. يمكنك استخدام الاستدعاءات التالية، والتحقق مما إذا أغلق المستخدم الإعلان أم لا:

بالنسبة للإعلانات الخلالية:

this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* *لا يتعلق سوى بنظام Android. * لن يتم تشغيل هذا الاستدعاء إلا في حالة تلف نشاط الإعلان الخلالي * دون إغلاقه بشكل صحيح. لا يحدث ذلك إلا في حالة * استخدام تطبيق يتضمن launchMode:singleTask (مثل لعبة تطبيق Unity) * كخلفية، ثم إعادة تشغيله من خلال النقر على الأيقونة. */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif 

بالنسبة لإعلانات الفيديو بمكافأة:

this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* *لا يتعلق سوى بنظام Android. * لن يتم تشغيل هذا الاستدعاء إلا في حالة تلف نشاط الفيديو بمكافأة * دون إغلاقه بشكل صحيح. لا يحدث ذلك إلا في حالة * استخدام تطبيق يتضمن launchMode:singleTask (مثل لعبة تطبيق Unity) * كخلفية، ثم إعادة تشغيله من خلال النقر على الأيقونة. */ this.rewardedVideoAd.rewardedVideoAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Rewarded video activity destroyed without being closed first."); Debug.Log("Game should resume. User should not get a reward."); } }); #endif 

الخطوة الثالثة: تحميل الإعلان

بمجرد إنشاء مثيل لـ RewardedVideoAd، تكون الخطوة التالية هي تحميل إعلان. يتم تنفيذ ذلك عن طريق استدعاء الأسلوب loadAd.

في المثال الموضح أعلاه، إليك كيفية بدء تحميل الإعلان:

...
this.rewardedVideoAd.LoadAd();
...

الخطوة الرابعة: عرض الإعلان

أخيرًا، بعد تحميل الإعلان، يمكنك استدعاء الأسلوب Show لعرض إعلان الفيديو بمكافأة على الشاشة. على سبيل المثال، يمكنك إنشاء وظيفة لـ ShowRewardedVideo، واستدعاء هذه الوظيفة عندما يحين وقت عرض الإعلان:

public void ShowRewardedVideo()
{
    if (this.isLoaded) {
        this.rewardedVideoAd.Show();
        this.isLoaded = false;
    } else {
        Debug.Log("Ad not loaded. Click load to request an ad.");
    }
}

التحقق من المكافأة جهة الخادم

تُعد هذه العملية اختيارية! لا يجب عليك تنفيذ عملية التحقق من المكافأة جهة الخادم لاستخدام إعلانات الفيديو بمكافأة. ولا يلزم إجراء ذلك إلا إذا قررت التحقق من المكافآت على خادمك الخاص بهدف تحسين الأمان من خلال توفير خطوة تحقق على خادمك الخاص. يرجى تقديم نقطة نهاية الناشر التي تستخدمها إلى ممثل فيسبوك الخاص بك بغرض تمكين هذه الميزة.

نظرة عامة

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

  1. تطلب مجموعة SDK لـ Audience Network إعلان فيديو بمكافأة باستخدام المعلمات التالية:
    • placementId: معرف موضع Audience Network
    • RewardData - كائن RewardData يتكون من UserId يمثل معرف المستخدم وCurrency يمثل المكافأة الفعلية في اللعبة.
  2. بعد اكتمال عرض الفيديو، يقوم خادم فيسبوك بترحيل هذه القيم إلى نقطة النهاية المحددة التي تستخدمها، بالإضافة إلى المفتاح السري للتطبيق ومعرف المعاملة الفريد.
  3. وبمجرد الاستلام، يتحقق الخادم من الطلب ويقوم بالاستجابة كما يلي:
    • 200 response: الطلب صالح ويجب تسليم المكافأة
    • Non 200 response: الطلب غير صالح ويجب ألا يتم تسليم المكافأة.
  4. وفور اكتمال عرض الفيديو، يتم عرض بطاقة النهاية ويتم تشغيل أحد الأحداث التالية.
    • RewardedVideoAdDidSucceed - يتم تشغيله فقط إذا تم استلام استجابة 200 أثناء الخطوة الثالثة.
    • RewardedVideoAdDidFail - يتم تشغيله فقط إذا تم استلام استجابة أخرى بخلاف 200 أثناء الخطوة الثالثة.

مثال على عنوان URL الذي يتم إرساله إلى نقطة نهاية الناشر التي تستخدمها من خادم فيسبوك: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

سيبدو سير العمل كما يلي:

التنفيذ

بعد تهيئة كائن الفيديو بمكافأة، يجب عليك تمرير معرف مستخدم ومبلغ المكافأة إلى بيانات الإعلان بمكافأة قبل تحميل الإعلان. يمكن القيام بذلك من خلال الفئة RewardData. يتوفر معرف المستخدم ومبلغ المكافأة في شكل سلاسل. على سبيل المثال:

public class RewardedVideoAdTest : MonoBehaviour
{
  ...
  private bool isLoaded;
  private RewardedVideoAd rewardedVideoAd;

  public void LoadRewardedVideo()

    //Set the rewarded ad data
    RewardData rewardData = new RewardData();
    rewardData.UserId = "USER_ID";
    rewardData.Currency = "REWARD_ID";

    // Instantiate RewardedVideoAd with reward data
    this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID", rewardData);
    this.rewardedVideoAd.Register(this.gameObject);

    // Set delegates to get notified on changes or when the user interacts with the ad.
    this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() {
        Debug.Log("RewardedVideo ad loaded.");
        this.isLoaded = true;
    });
    this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) {
        Debug.Log("RewardedVideo ad failed to load with error: " + error);
    });
    this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() {
        Debug.Log("RewardedVideo ad logged impression.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() {
        Debug.Log("RewardedVideo ad clicked.");
    });
    this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() {
        Debug.Log("Rewarded video ad did close.");
        if (this.rewardedVideoAd != null) {
            this.rewardedVideoAd.Dispose();
        }
    });

    // For S2S validation you need to register the following two callback
    this.rewardedVideoAd.RewardedVideoAdDidSucceed = (delegate() {
        Debug.Log("Rewarded video ad validated by server");
    });
    this.rewardedVideoAd.RewardedVideoAdDidFail = (delegate() {
        Debug.Log("Rewarded video ad not validated, or no response from server");
    });       

    this.rewardedVideoAd.loadAd();
  }
  ...
}

لكي يتم إعلام تطبيقك بما إذا كان قد تم التحقق من المكافأة أم لا، ستحتاج إلى تنفيذ الاستدعاءات RewardedVideoAdDidSucceed وRewardedVideoAdDidFail، بالإضافة إلى استدعاءات أخرى لـ RewardedVideoAd.

بعد تحميل الإعلان، يمكنك عرض الإعلان بالأسلوب Show مثل RewardedVideoAd العادي.

يرجى العلم أنه - قد تحدث استدعاءات تحقق الخادم بعد رفض المستخدم لبطاقة النهاية. يجب عليك عدم إعادة تعيين كائن الفيديو بمكافأة إلا بعد تنفيذ أحد هذه الاستدعاءات.

الخطوات التالية

اتبع الدلائل التي نوفرها لدمج مختلف تنسيقات الإعلانات في تطبيق Unity لديك:

بمجرد أن تكون مستعدًا لعرض البث المباشر باستخدام تطبيقك وتحقيق الأرباح، يجب تقديم تطبيقك للمراجعة بعد التأكد من التزامه بسياسات Audience Network ومعايير مجتمع فيسبوك.