تتيح الإعلانات التي تضم مكافأة للمستخدمين إمكانية التفاعل معهم في المقابل للحصول على مكافآت داخل التطبيق. يوضّح لك هذا الدليل كيفية دمج الإعلانات التي تضم مكافآت في تطبيقات Android وiOS باستخدام حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة بتنسيق C++.
الاطّلاع على بعض قصص نجاح العملاء: دراسة الحالة 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
. عرض الصفحة الرئيسية هوjobject
JNI يشير إلى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
، اطّلِع على مقالة
استخدام العقود الآجلة لرصد حالة اكتمال طلبات معالجة الطلبات
.
تحميل إعلان
يتم تحميل الإعلان باستخدام الطريقة 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 لإعلانات Google على الأجهزة الجوّالة C++ " عملية
تم إرجاع مبلغ
firebase::Future
من قِبلInitialize()
حتى في حال استمرار شبكة توسّط. لم تكمل عملية الإعداد. - ماذا لو لم تكن بعض شبكات التوسّط جاهزة عند تلقّي طلب إعادة الاتصال لبدء عملية الإعداد؟
ومن بين أفضل الممارسات تحميل الإعلانات بعد اكتمال إعداد حزمة تطوير البرامج (SDK). حتى إذا لم تكن شبكة التوسّط جاهزة، ستظلّ حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" مكتوبة بلغة C++ تتطلب من هذه الشبكة عرض إعلان. وبالتالي، إذا انتهت شبكة التوسّط من بدء التشغيل بعد انتهاء مهلة الانتظار، سيظل بإمكانها عرض طلبات الإعلانات المستقبلية في تلك الجلسة.
يمكنك مواصلة التحقق من حالة الإعداد لجميع المحوّلات. جلسة التطبيق من خلال الاتصال بالرقم
GetInitializationStatus()
.- كيف يمكنني معرفة سبب عدم جهوزية شبكة توسّط معيَّنة؟
يوضّح
AdapterStatus.description()
سبب عدم جاهزية المحوّل للصيانة. لطلبات الإعلان. يمكنك الاطّلاع على رمز المصدر لتطبيق مثال على تطبيق بدء التشغيل السريع في GitHub للحصول على مثال على تسجيل حالة محوِّل التوسّط.
مراجع إضافية
مثال في GitHub
- يمكنك الاطّلاع على رمز المصدر لمثال تطبيق بدء التشغيل السريع على GitHub.