تتيح لك Audience Network إمكانية تحقيق أرباح من تطبيقات Android من خلال إعلانات فيسبوك. إعلانات الفيديو بمكافأة عبارة عن تجربة بوضع ملء الشاشة تتيح للمستخدمين اختيار مشاهدة فيديو مقابل الحصول على شيء ما، مثل عملة افتراضية وعناصر داخل التطبيق ومحتوى حصري وغير ذلك الكثير. وتتراوح مدة التجربة الإعلانية ما بين 15 إلى 30 ثانية ولا يمكن تخطّيها وتتضمّن بطاقة نهاية تحتوي على زر دعوة لاتخاذ إجراء. بمجرد اكتمال عرض الفيديو بالكامل، فستتلقى استدعاءً لمنح المكافأة المُقترحة للمستخدم.
احرص على قراءة دليل بدء استخدام Audience Network ودليل بدء استخدام Android قبل المتابعة.
تمت إضافة هذا الأسلوب في مجموعة Audience Network SDK لنظام Android بالإصدار 5.1.
يلزم وجود تهيئة واضحة لمجموعة Audience Network SDK لنظام Android بالإصدار 5.3.0
والإصدارات الأحدث. يرجى الرجوع إلى هذا المستند حول كيفية تهيئة مجموعة Audience Network SDK لنظام Android.
قبل إنشاء كائن إعلان وتحميل إعلانات، يجب عليك تهيئة مجموعة Audience Network SDK. ويوصى بإجراء ذلك عند تشغيل التطبيق.
public class YourApplication extends Application { ... @Override public void onCreate() { super.onCreate(); // Initialize the Audience Network SDK AudienceNetworkAds.initialize(this); } ... }
أضف الرمز البرمجي التالي أعلى نشاطك لاستيراد مجموعة SDK لإعلانات فيسبوك:
import com.facebook.ads.*;
بعد ذلك، قم بتهيئة كائن الفيديو بمكافأة وتعيين وظيفة استماع وتحميل تصميم الفيديو. يتطلب إعلان الفيديو بمكافأة واجهة RewardedVideoAdListener
والتي تنفذ الأساليب التالية ضمن عينة الرمز البرمجي لمعالجة أحداث متعددة. فعلى سبيل المثال في نشاطك:
private final String TAG = RewardedVideoAdActivity.class.getSimpleName(); private RewardedVideoAd rewardedVideoAd; @Override public void onCreate(Bundle savedInstanceState) { ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { @Override public void onError(Ad ad, AdError error) { // Rewarded video ad failed to load Log.e(TAG, "Rewarded video ad failed to load: " + error.getErrorMessage()); } @Override public void onAdLoaded(Ad ad) { // Rewarded video ad is loaded and ready to be displayed Log.d(TAG, "Rewarded video ad is loaded and ready to be displayed!"); } @Override public void onAdClicked(Ad ad) { // Rewarded video ad clicked Log.d(TAG, "Rewarded video ad clicked!"); } @Override public void onLoggingImpression(Ad ad) { // Rewarded Video ad impression - the event will fire when the // video starts playing Log.d(TAG, "Rewarded video ad impression logged!"); } @Override public void onRewardedVideoCompleted() { // Rewarded Video View Complete - the video has been played to the end. // You can use this event to initialize your reward Log.d(TAG, "Rewarded video completed!"); // Call method to give reward // giveReward(); } @Override public void onRewardedVideoClosed() { // The Rewarded Video ad was closed - this can occur during the video // by closing the app, or closing the end card. Log.d(TAG, "Rewarded video ad closed!"); } }; rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); ... }
private RewardedVideoAd rewardedVideoAd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... @Override public void onAdLoaded(Ad ad) { // Rewarded video ad is loaded and ready to be displayed rewardedVideoAd.show(); } ... }; rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); ... }
في حالة عدم عرض الإعلان على الفور بعد تحميل الإعلان، يتولى المطوّر مسؤولية التحقق مما إذا تم إلغاء صلاحية الإعلان أم لا. بمجرد تحميل الإعلان بنجاح، سيكون الإعلان صالحًا لمدة 60 دقيقة. لن تحقق أي أرباح إذا كنت تعرض إعلانًا غير صالح. يجب أن تستدعي isAdInvalidated()
للتحقق من صحة الإعلان.
يجب عليك متابعة الفكرة أدناه، ولكن يرجى عدم نسخ الرمز البرمجي في مشروعك لأنه مجرد مثال:
private RewardedVideoAd rewardedVideoAd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... }; // load the ad rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .build()); // Here is just an example for displaying the ad with delay // Please call this method at appropriate timing in your project showAdWithDelay(); } private void showAdWithDelay() { /** * Here is an example for displaying the ad with delay; * Please do not copy the Handler into your project */ // Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Check if rewardedVideoAd has been loaded successfully if (rewardedVideoAd == null || !rewardedVideoAd.isAdLoaded()) { return; } // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad. if (rewardedVideoAd.isAdInvalidated()) { return; } rewardedVideoAd.show(); } }, 1000 * 60 * 15); // Show the ad after 15 minutes }
إذا كنت تستخدم محاكي Google Android الافتراضي، فستتم إضافة سطر الرمز البرمجي التالي قبل تحميل أي إعلان اختباري:AdSettings.addTestDevice("HASHED ID");
.
استخدم معرف التجزئة المطبوع في سجل رسائل النظام "log cat" عندما تقدم طلبًا لأول مرة لتحميل إعلان على أحد الأجهزة.
لا تحتاج الأجهزة التي تستخدم Genymotion والأجهزة الفعلية إلى إجراء هذه الخطوة. إذا كنت تريد الاختبار باستخدام إعلانات حقيقية، الرجاء الرجوع إلى إرشادات الاختبار.
وأخيرًا، امسح الكائن مع أسلوب destroy
في الأسلوب onDestroy
لنشاطك. لاحظ أنه يجب أيضًا استخدام الأسلوب destroy
لمسح كائنات الإعلان القديمة قبل تعيينها إلى مثيل جديد لتجنب تسرب الذاكرة.
@Override protected void onDestroy() { if (rewardedVideoAd != null) { rewardedVideoAd.destroy(); rewardedVideoAd = null; } super.onDestroy(); }
تتطلب إعلانات الفيديو في Audience Network تمكين ميزة عرض يستند إلى تسريع الأجهزة، وإن لم يتم ذلك فقد تظهر شاشة سوداء في مشاهدات الفيديو. ينطبق ذلك على
ميزة تسريع الأجهزة بشكل افتراضي في مستوى واجهة Target API التي يتم تمكينها هي >=14 (Ice Cream Sandwich, Android 4.0.1)، ولكن يمكنك أيضًا تمكين هذه الميزة على مستوى التطبيق أو مستوى النشاط.
في ملف بيانات Android الذي تستخدمه، أضف السمة التالية إلى العلامة <application>
لتمكين ميزة تسريع الأجهزة في تطبيقك بالكامل:
<application android:hardwareAccelerated="true" ...>
إذا كنت لا تريد سوى تمكين الميزة لأنشطة محددة في تطبيقك، يمكنك في ملف بيانات Android الخاص بك إضافة الميزة التالية إلى العلامة <activity>
. وسيؤدي المثال التالي إلى تمكين ميزة تسريع الأجهزة في AudienceNetworkActivity
التي يتم استخدامها لعرض الإعلانات الخلالية ومقاطع الفيديو بمكافأة:
<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>
تُعد هذه العملية اختيارية! لا يجب عليك تنفيذ عملية التحقق من المكافأة جهة الخادم لاستخدام إعلانات الفيديو بمكافأة. ولا يلزم إجراء ذلك إلا إذا قررت التحقق من المكافآت على خادمك الخاص بهدف تحسين الأمان من خلال توفير خطوة تحقق على خادمك الخاص. يرجى تقديم نقطة نهاية الناشر التي تستخدمها إلى ممثل فيسبوك الخاص بك بغرض تمكين هذه الميزة.
إذا كنت تدير مكافآت مستخدميك على جانب الخادم، فاعلم أن فيسبوك يوفر حلاً لتنفيذ تلك العملية بأمان من خلال استخدام أحد أساليب التحقق من الصحة. سيقوم خادمنا بالتواصل مع نقطة نهاية https محددة للتحقق من كل مرات ظهور الإعلان ومما إذا كان يجب منح مكافأة أم لا.
onRewardServerSuccess
- يتم تشغيله فقط إذا تم تلقي استجابة 200 أثناء الخطوة الثالثة.onRewardServerFailed
- يتم تشغيله فقط إذا تم تلقي استجابة بخلاف 200 أثناء الخطوة الثالثة.مثال يوضح عنوان URL الذي سيتم إرساله إلى نقطة نهاية الناشر التي تستخدمها من خادم فيسبوك: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
سيبدو سير العمل كما يلي:
بعد بدء تشغيل كائن الفيديو بمكافأة، يجب عليك تمرير معرّف مستخدم ومبلغ المكافأة إلى بيانات الإعلان بمكافأة قبل تحميل الإعلان. يتم تقديم كلاً من معرّف المستخدم ومبلغ المكافأة في تنسيق سلسلة أحرف. على سبيل المثال:
private RewardedVideoAd rewardedVideoAd; private void loadRewardedVideoAd { // Instantiate a RewardedVideoAd object. // NOTE: the placement ID will eventually identify this as your App, you can ignore it for // now, while you are testing and replace it later when you have signed up. // While you are using this temporary code you will only get test ads and if you release // your code like this to the Google Play your users will not receive ads (you will get // a no fill error). rewardedVideoAd = new RewardedVideoAd(this, "YOUR_PLACEMENT_ID"); RewardedVideoAdListener rewardedVideoAdListener = new RewardedVideoAdListener() { ... }; // Create the rewarded ad data RewardData rewardData = new RewardData("YOUR_USER_ID", "YOUR_REWARD"); rewardedVideoAd.loadAd( rewardedVideoAd.buildLoadAdConfig() .withAdListener(rewardedVideoAdListener) .withRewardData(rewardData) .build()); }
حتى يتم إرسال إشعار إلى تطبيقك حول ما إذا تم التحقق من صحة المكافأة أم لا، ستحتاج إلى تنفيذ الواجهة S2SRewardedVideoAdListener
. وهذا يتضمن كل الأحداث الموضحة أعلاه في الواجهة RewardedVideoAdListener
، إلى جانب حدثين إضافيين. ويمكن استخدام ما يلي إلى جانب الأحداث المذكورة أعلاه.
@Override public void onRewardServerSuccess() { // Rewarded video ad validated } @Override public void onRewardServerFailed() { // Rewarded video ad not validated or no response from server }
يرجى ملاحظة - قد تحدث استدعاءات التحقق من صحة الخادم بعد تجاهل المستخدم لبطاقة الإنهاء. يجب عليك عدم إعادة تعيين كائن الفيديو بمكافأة إلا بعد تنفيذ أحد هذه الاستدعاءات.
اكتشف نماذج الرموز البرمجية لمجموعة Audience Network Android على Github. قم باستيراد المشروعات إلى IDE، ثم تشغيله على أي جهاز أو على المحاكي.
بمجرد أن تكون مستعدًا لتفعيل ونشر تطبيقك وتحقيق الأرباح، يجب تقديم تطبيقك للمراجعة بعد التأكد من التزامه بسياسات Audience Network ومعايير مجتمع فيسبوك.