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

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

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

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

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

الخطوة الثانية: عرض إعلانات الفيديو بمكافأة في نشاطك

تهيئة مجموعة Audience Network SDK

تمت إضافة هذا الأسلوب في مجموعة 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());
    ...
}

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

السيناريو الأول: اعرض الإعلان فورًا بمجرد تحميله بنجاح. يمكن تعديل الأسلوب onAdLoaded() المذكور أعلاه لعرضه كما يلي:

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 محددة للتحقق من كل مرات ظهور الإعلان ومما إذا كان يجب منح مكافأة أم لا.

  1. تقوم مجموعة Audience Network SDK بطلب إعلان فيديو بمكافأة باستخدام المعلمات التالية:
    • معرف موضع Audience Network
    • معرف مستخدم فريد - سمة تستخدمها لتعريف مستخدم فريد. على سبيل المثال، معرّف رقمي
    • قيمة المكافأة - قيمة المكافأة التي تريد منحها للمستخدم. على سبيل المثال، 100 قطعة نقدية
  2. بعد اكتمال عرض الفيديو، يقوم خادم فيسبوك بترحيل هذه القيم إلى نقطة النهاية المحددة التي تستخدمها، بالإضافة إلى المفتاح السري للتطبيق ومعرّف المعاملة الفريد.
  3. وبمجرد الاستلام، يقوم الخادم بالتحقق من الطلب ويقوم بالاستجابة بالطريقة التالية:
    • استجابة 200: تعني أن الطلب صالح ويجب منح المكافأة
    • استجابة ليس 200: تعني أن الطلب غير صالح ويجب عدم منح المكافأة.
  4. وبمجرد اكتمال عرض الفيديو، يتم عرض بطاقة الإنهاء وسيتم تشغيل أحد الأحداث التالية.
    • 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  
}  

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

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