تتيح "الإعلانات مقابل مكافأة" للمستخدمين خيار التفاعل معها مقابل الحصول على مكافآت داخل التطبيق. يوضّح لك هذا الدليل كيفية دمج الإعلانات مقابل مكافآت في تطبيقات Android وiOS باستخدام حزمة تطوير البرامج (SDK) للغة C++ من "إعلانات Google على الأجهزة الجوّالة".
يمكنك الاطّلاع على بعض قصص نجاح العملاء: دراسة الحالة 1 ودراسة الحالة 2.
المتطلبات الأساسية
- أكمِل الخطوات في البدء.
- (نظام التشغيل Android فقط) الإلمام بالعمل مع مراجع JNI
jobject
(راجِع نصائح حول JNI في Android).
اختبار الإعلانات دائمًا باستخدام الإعلانات الاختبارية
عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات اختبارية بدلاً من الإعلانات المباشرة في مرحلة الإنتاج. وقد يؤدي عدم إجراء ذلك إلى تعليق حسابك.
أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام معرّف وحدة إعلانية اختبارية مخصّصة للإعلانات مقابل مكافآت، ويختلف هذا المعرّف حسب نظام تشغيل الجهاز:
- نظام تشغيل Android:
ca-app-pub-3940256099942544/5224354917
- نظام تشغيل iOS:
ca-app-pub-3940256099942544/1712485313
تم إعدادها خصيصًا لعرض إعلانات اختبارية لكل طلب، ويمكنك استخدامها في تطبيقاتك الخاصة أثناء الترميز والاختبار وتصحيح الأخطاء. ما عليك سوى التأكّد من استبداله برقم تعريف الوحدة الإعلانية قبل نشر تطبيقك.
لمزيد من المعلومات عن طريقة عمل الإعلانات الاختبارية في حزمة تطوير البرامج (SDK) لإعلانات الأجهزة الجوّالة، يُرجى الاطّلاع على مقالة الإعلانات الاختبارية.
التنفيذ
في ما يلي الخطوات الرئيسية لدمج الإعلانات مقابل مكافآت:
- تحميل إعلان
- التسجيل لتلقّي مكالمات ردّ
- اعرض الإعلان وتعامل مع حدث المكافأة.
ضبط RewardedAd
يتم عرض "الإعلانات مقابل مكافأة" في عناصر RewardedAd
، لذا فإنّ الخطوة الأولى نحو دمج "الإعلانات مقابل مكافأة" في تطبيقك هي إنشاء نسخة من RewardedAd
وتهيئتها.
أضِف العنوان التالي إلى رمز C++ لتطبيقك:
#include "firebase/gma/rewarded_ad.h"
الإعلان عن كائن
RewardedAd
وإنشاؤه:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
ابدأ بتهيئة مثيل
RewardedAd
باستخدام عملية تحويل نوع العرض الرئيسي إلى النوعAdParent
. عرض العنصر الأب هو مرجع JNIjobject
إلىActivity
Android أو مؤشر إلىUIView
iOS.// my_ad_parent is a jobject reference to an Android Activity or // a pointer to an iOS UIView. firebase::gma::AdParent ad_parent = static_cast<firebase::gma::AdParent>(my_ad_parent); firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
كبديل للاحتفاظ بالمستقبل كمتغير، يمكنك التحقّق بشكل دوري من حالة عملية التهيئة عن طريق استدعاء
InitializeLastResult()
على العنصرRewardedAd
. قد يكون ذلك مفيدًا لتتبُّع عملية الإعداد في حلقة اللعبة العامة.// Monitor the status of the future in your game loop: firebase::Future<void> result = rewarded_ad->InitializeLastResult(); if (result.status() == firebase::kFutureStatusComplete) { // Initialization completed. if(future.error() == firebase::gma::kAdErrorCodeNone) { // Initialization successful. } else { // An error has occurred. } } else { // Initialization on-going. }
لمزيد من المعلومات حول استخدام firebase::Future
، يُرجى الاطّلاع على
استخدام Futures لتتبُّع حالة اكتمال طلبات الطرق.
تحميل إعلان
يتم تحميل الإعلان باستخدام الطريقة LoadAd()
على عنصر RewardedAd
. يتطلّب أسلوب التحميل أن تكون قد بدأت عنصر RewardedAd
، وأن يكون لديك رقم تعريف الوحدة الإعلانية وعنصر AdRequest
. يتم عرض firebase::Future
يمكنك استخدامه لتتبُّع حالة عملية التحميل ونتيجتها.
يوضّح الرمز التالي كيفية تحميل إعلان بعد إعداد RewardedAd
بنجاح:
firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);
التسجيل لتلقّي معاودة الاتصال
يجب توسيع فئة FullScreenContentListener
لتلقّي إشعارات بشأن أحداث عرض الإعلانات مقابل مكافأة وأحداث مراحل النشاط. يمكن تسجيل فئة فرعية مخصّصة
FullScreenContentListener
من خلال الطريقة
RewardedAd::SetFullScreenContentListener()
، وستتلقّى عمليات ردّ الاتصال عند عرض الإعلان بنجاح أو بدون نجاح، وكذلك عند إغلاقه.
يوضّح الرمز التالي كيفية توسيع الفئة وتعيينها للإعلان:
class ExampleFullScreenContentListener : public firebase::gma::FullScreenContentListener { public: ExampleFullScreenContentListener() {} void OnAdClicked() override { // This method is invoked when the user clicks the ad. } void OnAdDismissedFullScreenContent() override { // This method is invoked when the ad dismisses full screen content. } void OnAdFailedToShowFullScreenContent(const AdError& error) override { // This method is invoked when the ad failed to show full screen content. // Details about the error are contained within the AdError parameter. } void OnAdImpression() override { // This method is invoked when an impression is recorded for an ad. } void OnAdShowedFullScreenContent() override { // This method is invoked when the ad showed its full screen content. } }; ExampleFullScreenContentListener* example_full_screen_content_listener = new ExampleFullScreenContentListener(); rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);
RewardedAd
هو عنصر يُستخدَم لمرة واحدة. وهذا يعني أنّه بعد عرض إعلان مقابل مكافأة، لا يمكن عرضه مرة أخرى. من أفضل الممارسات تحميل إعلان آخر بمكافأة في الطريقة OnAdDismissedFullScreenContent()
الخاصة بـ FullScreenContentListener
، وذلك لكي يبدأ تحميل الإعلان التالي بمكافأة فور إغلاق الإعلان السابق.
عرض الإعلان والتعامل مع حدث المكافأة
قبل عرض "إعلان مقابل مكافأة" للمستخدمين، يجب أن تقدّم لهم خيارًا واضحًا بمشاهدة محتوى الإعلان مقابل مكافأة. يجب أن تكون الإعلانات مقابل مكافآت تجربة اختيارية تتطلّب موافقة المستخدم.
عند عرض إعلانك، يجب توفير عنصر UserEarnedReward
للتعامل مع المكافأة التي سيحصل عليها المستخدم.
يوضّح الرمز التالي كيفية عرض RewardedAd
:
// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
public firebase::gma::UserEarnedRewardListener {
public:
ExampleUserEarnedRewardListener() { }
void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
// Reward the user!
}
};
ExampleUserEarnedRewardListener* user_earned_reward_listener =
new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);
الأسئلة الشائعة
- هل هناك مهلة زمنية لمكالمة الإعداد؟
- بعد 10 ثوانٍ، تكمل حزمة تطوير البرامج (SDK) الخاصة بتطبيقات C++ من "إعلانات Google على الأجهزة الجوّالة" عملية
firebase::Future
التي تعرضهاInitialize()
حتى إذا لم تكمل إحدى شبكات التوسّط عملية الإعداد بعد. - ماذا لو لم تكن بعض شبكات التوسّط جاهزة عند تلقّي معاودة الاتصال الخاصة ببدء التشغيل؟
من أفضل الممارسات تحميل الإعلانات بعد اكتمال عملية تهيئة حزمة تطوير البرامج (SDK). حتى إذا لم تكن إحدى شبكات التوسّط جاهزة، ستطلب حزمة تطوير البرامج (SDK) للغة C++ من "إعلانات Google على الأجهزة الجوّالة" من تلك الشبكة عرض إعلان. لذلك، إذا انتهت شبكة التوسّط من عملية الإعداد بعد انتهاء المهلة، سيظل بإمكانها عرض الإعلانات في الطلبات المستقبلية خلال تلك الجلسة.
يمكنك مواصلة طلب حالة الإعداد لجميع المحوّلات طوال جلسة تطبيقك من خلال استدعاء
GetInitializationStatus()
.- كيف يمكنني معرفة سبب عدم جاهزية شبكة توسّط معيّنة؟
توضّح السمة
AdapterStatus.description()
سبب عدم جاهزية وسيط عرض الإعلانات لتلبية طلبات الإعلانات. يمكنك الاطّلاع على الرمز المصدري لتطبيق التشغيل السريع النموذجي على GitHub للحصول على مثال حول تسجيل حالة وسيط الإعلانات.
مراجع إضافية
مثال في GitHub
- يمكنك الاطّلاع على الرمز المصدري لتطبيق التشغيل السريع الخاص بنا في GitHub.