تتيح لك 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 سوى 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 محددة للتحقق من كل مرات ظهور الإعلان ومما إذا كان يجب منح مكافأة أم لا.
placementId
: معرف موضع Audience NetworkRewardData
- كائن RewardData
يتكون من UserId
يمثل معرف المستخدم وCurrency
يمثل المكافأة الفعلية في اللعبة.200 response
: الطلب صالح ويجب تسليم المكافأةNon 200 response
: الطلب غير صالح ويجب ألا يتم تسليم المكافأة.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 ومعايير مجتمع فيسبوك.