البدء

هذا الدليل مخصّص للناشرين الذين يريدون تحقيق الربح من تطبيق C++ باستخدام AdMob ولا يستخدمون Firebase. إذا كنت تخطط لتضمين Firebase في تطبيقك (أو كنت تفكّر في ذلك)، يمكنك الاطّلاع على إصدار AdMob مع Firebase من هذا الدليل بدلاً من ذلك.

يُعدّ دمج حزمة SDK لإعلانات Google على الأجهزة الجوّالة C++ في أحد التطبيقات الخطوة الأولى نحو عرض الإعلانات وتحقيق الربح. بعد دمج حزمة تطوير البرامج (SDK)، يمكنك اختيار شكل الإعلان (مثل الإعلان البيني أو الإعلان بمكافأة) واتّباع الخطوات لتنفيذها.

تشمل حزمة SDK لإعلانات Google على الأجهزة الجوّالة C++ حزمة SDK لإعلانات Google على الأجهزة الجوّالة لنظامَي التشغيل iOS وAndroid، ولا تتوفّر إلا على هاتين المنصتين. تستفيد حزمة SDK لإعلانات Google على الأجهزة الجوّالة C++ من إنشاءات Firebase C++ لإتاحة العمليات غير المتزامنة، ولذا تظل في مساحة الاسم firebase::gma.

وإذا كانت هذه هي المرة الأولى التي تراجع فيها هذا الدليل، ننصحك بتنزيل وتطبيق اختبار C++ من Google للأجهزة الجوّالة والمتابعة.

المتطلبات الأساسية

Android

  • استخدام Android Studio 3.2 أو إصدار أحدث
  • تأكَّد من أنّ ملف الإصدار لتطبيقك يتضمّن القيم التالية:
    • minSdkVersion من 16 سنة أو أكثر
    • compileSdkVersion فئة 28 أو أكثر

iOS

  • استخدام Xcode 13 أو إصدار أحدث
  • الإصدار 10.0 أو الإصدارات الأحدث من iOS

إعداد تطبيقك في حسابك على AdMob

سجِّل تطبيقك كتطبيق AdMob من خلال إكمال الخطوات التالية:

  1. سجّل الدخول أو اشترِك في حساب AdMob.

  2. سجِّل تطبيقك باستخدام AdMob. تؤدّي هذه الخطوة إلى إنشاء تطبيق على AdMob يحمل رقم تعريف فريد لتطبيق AdMob مطلوب في وقت لاحق من هذا الدليل.

تثبيت حزمة SDK لإعلانات Google على الأجهزة الجوّالة C++

بما أنّ حزمة تطوير البرامج (SDK) لعرض إعلانات Google للأجهزة الجوّالة C++ متوفّرة في مساحة الاسم firebase::gma، نزِّل حزمة SDK C++ في Firebase، ثم فكّ ضغطها إلى دليل من اختيارك.

لا تختلف حزمة تطوير البرامج (SDK) التي تستخدم Firebase C++ عن النظام الأساسي، ولكنها تتطلب عمليات ضبط مكتبة خاصة بالنظام الأساسي.

Android

  1. في ملف gradle.properties الخاص بمشروعك، حدِّد موقع حزمة تطوير البرامج (SDK) التي تم فك ضغطها:

      systemProp.firebase_cpp_sdk.dir=full-path-to-SDK
    
  2. إلى ملف settings.gradle للمشروع، أضف المحتوى التالي:

      def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir')
    
      gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir"
      includeBuild "$firebase_cpp_sdk_dir"
    
  3. إلى ملف Gradle (على مستوى التطبيق) في وحدتك الإعلانية (عادةً app/build.gradle)، أضِف المحتوى التالي الذي يتضمّن اعتمادية حزمة SDK لإعلانات Google على الأجهزة الجوّالة C++.

      android.defaultConfig.externalNativeBuild.cmake {
        arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
      }
    
      # Add the dependency for the Google Mobile Ads C++ SDK
      apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
      firebaseCpp.dependencies {
        gma
      }
    
  4. أضِف المحتوى التالي إلى ملف CMakeLists.txt الخاص بالمشروع.

      # Add Firebase libraries to the target using the function from the SDK.
      add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
    
      # Add the Google Mobile Ads C++ SDK.
    
      # The Firebase C++ library `firebase_app` is required,
      # and it must always be listed last.
    
      set(firebase_libs
        firebase_gma
        firebase_app
      )
    
      target_link_libraries(${target_name} "${firebase_libs}")
    
  5. يمكنك مزامنة تطبيقك للتأكّد من توفّر الإصدارات اللازمة على جميع الارتباطات.

اكتملت العملية تم إعداد تطبيق C++ لاستخدام حزمة تطوير البرامج (SDK) لعرض إعلانات Google للأجهزة الجوّالة C++ بدون أي خدمات Firebase أخرى.

iOS

وتُعد الخطوات الواردة في هذا القسم مثالاً على كيفية إضافة حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة C++ إلى مشروع iOS.

  1. يمكنك الحصول على الإصدار 1 من CocoaPods أو الإصدارات الأحدث من خلال تشغيل:

    sudo gem install cocoapods --pre
    
  2. أضِف مجموعة إعلانات Google للأجهزة الجوّالة من حزمة تطوير البرامج (SDK) التي تم فك ضغطها.

    1. أنشئ ملف Podfile إذا لم يكن لديك ملف:

      cd your-app-directory
      pod init
      
    2. إلى Podfile، أضِف المجموعة لحزمة SDK لإعلانات Google على الأجهزة الجوّالة C++:

        pod 'Google-Mobile-Ads-SDK'
      
    3. ثبِّت مجموعة الإعلانات المتسلسلة، ثم افتح الملف .xcworkspace في Xcode.

      pod install
      open your-app.xcworkspace
      
    4. أضِف أُطر العمل التالية من حزمة تطوير البرامج (SDK) التي تستخدم Firebase C++ إلى المشروع:

      • xcframeworks/firebase.xcframework
      • xcframeworks/firebase_gma.xcframework

اكتملت العملية تم إعداد تطبيق C++ لاستخدام حزمة تطوير البرامج (SDK) لعرض إعلانات Google للأجهزة الجوّالة C++ بدون أي خدمات Firebase أخرى.

إعداد رقم تعريف تطبيق AdMob المتعلق بتطبيقك

Android

اتبع الخطوة 3 من ضبط تطبيقك كما هو موضّح في دليل حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة ثم العودة إلى صفحة بدء استخدام C++ هذه.

iOS

اتّبِع خطوة تعديل بياناتك.plist كما هو موضّح في دليل حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة، ثم ارجع إلى صفحة بدء استخدام +C.

إعداد حزمة "SDK لإعلانات Google على الأجهزة الجوّالة"

قبل تحميل الإعلانات، يجب أن يُعِدّ تطبيقك إعداد حزمة تطوير البرامج (SDK) C++ من "إعلانات Google على الأجهزة الجوّالة" عن طريق استدعاء firebase::gma::Initialize() الذي يُعِدّ حزمة تطوير البرامج (SDK) ويكمل firebase::Future بعد اكتمال عملية الإعداد (أو بعد انتهاء المهلة التي تبلغ 30 ثانية). يجب تنفيذ هذا الإجراء مرة واحدة فقط، ويُفضَّل عند إطلاق التطبيق.

قد يتم تحميل الإعلانات مسبقًا من خلال حزمة تطوير البرامج (SDK) C++ لإعلانات Google على الأجهزة الجوّالة أو حِزم تطوير البرامج (SDK) لشركاء التوسّط عند الاتصال بـ Initialize(). إذا كنت بحاجة إلى الحصول على موافقة المستخدمين في المنطقة الاقتصادية الأوروبية أو ضبط أي علامات خاصة بالطلب (مثل tag_for_child_directed_treatment أو tag_for_under_age_of_consent)، أو اتخاذ إجراء آخر قبل تحميل الإعلانات، تأكَّد من إجراء ذلك عن طريق استدعاء firebase::gma::SetRequestConfiguration() قبل إعداد حزمة تطوير البرامج (SDK) الخاصة بخدمة Google Ads +C++. لمزيد من المعلومات، اطّلِع على دليل الاستهداف.

إليك مثال على كيفية الاتصال بالرقم Initialize():

Android

// Initialize the Google Mobile Ads library
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
  firebase::gma::Initialize(jni_env, j_activity, &result);

if (result != kInitResultSuccess) {
  // Initialization immediately failed, most likely due to a missing dependency.
  // Check the device logs for more information.
  return;
}

// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
    future.error() == firebase::gma::kAdErrorCodeNone) {
  // Initialization completed.
} else {
  // Initialization on-going, or an error has occurred.
}

iOS

// Initialize the Google Mobile Ads library.
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
  firebase::gma::Initialize(&result);

if (result != kInitResultSuccess) {
  // Initialization immediately failed, most likely due to a missing dependency.
  // Check the device logs for more information.
  return;
}

// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
    future.error() == firebase::gma::kAdErrorCodeNone) {
  // Initialization completed.
} else {
  // Initialization on-going, or an error has occurred.
}

استخدِم Future لمراقبة حالة اكتمال مكالمة الطريقة.

توفّر لك طريقة Future طريقة تحديد حالة استدعاء الطريقة غير المتزامنة.

على سبيل المثال، عندما يتصل تطبيقك firebase::gma::Initialize()، يتم إنشاء firebase::Future جديد وعرضه. يمكن لتطبيقك بعد ذلك استطلاع status() من Future لتحديد وقت اكتمال الإعداد. بعد اكتمال الإجراء، يمكن لتطبيقك استدعاء result() للحصول على AdapterInitializationStatus الناتجة.

إنّ الطرق التي تعرض Future تستخدم طريقة "النتيجة الأخيرة" المقابلة التي يمكن أن تستخدمها التطبيقات لاسترداد أحدث Future لإجراء معيّن. على سبيل المثال، يستخدِم firebase::gma::Initialize() طريقة مقابلة باسم firebase::gma::InitializeLastResult()، التي تعرض Future التي يمكن أن يستخدمها تطبيقك للتحقّق من حالة المكالمة الأخيرة لـ firebase::gma::Initialize().

إذا كانت حالة Future كاملة ورمز الخطأ الخاص بها هو firebase::gma::kAdErrorCodeNone، يعني ذلك أن العملية قد اكتملت بنجاح.

ويمكنك أيضًا تسجيل عمليات معاودة الاتصال لاستدعاءها عند اكتمال Future. وفي بعض الحالات، سيتم عرض معاودة الاتصال في سلسلة محادثات مختلفة، لذا احرص على أن يكون الرمز آمنًا باستخدام سلسلة المحادثات. يستخدم مقتطف الرمز هذا مؤشر دالة لمعاودة الاتصال:

// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. This allows you to pass any custom data to the callback
// handler. In this case, the app has no data, so you must pass nullptr.
firebase::gma::InitializeLastResult().OnCompletion(OnCompletionCallback,
  /*user_data=*/nullptr);

// The OnCompletion callback function.
static void OnCompletionCallback(
  const firebase::Future<AdapterInitializationStatus>& future, void* user_data) {
  // Called when the Future is completed for the last call to firebase::gma::Initialize().
  // If the error code is firebase::gma::kAdErrorCodeNone,
  // then the SDK has been successfully initialized.
  if (future.error() == firebase::gma::kAdErrorCodeNone) {
    // success!
  } else {
    // failure.
  }
}

اختيار شكل الإعلان

تم استيراد حزمة تطوير البرامج (SDK) لخدمة +Google لإعلانات Google على الأجهزة الجوّالة، وأصبحت جاهزًا لتنفيذ إعلان. يعرض AdMob عددًا من أشكال الإعلانات المختلفة، لذا يمكنك اختيار الشكل الذي يناسب تجربة تطبيقك على أفضل نحو.

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

تنفيذ إعلانات البانر

إعلان بيني

الإعلانات بملء الشاشة التي تغطي واجهة تطبيق إلى أن يغلقها المستخدم وتُستخدم هذه التطبيقات على أفضل نحو في فترات الإيقاف المؤقت أثناء تنفيذ التطبيق، مثل الانتقال بين مستويات اللعبة أو بعد اكتمال المهمة.

تنفيذ الإعلانات البينية

تم منح المكافأة

الإعلانات التي تكافئ المستخدمين على مشاهدة فيديوهات قصيرة وتفاعلهم مع إعلانات تشغيل إصدار بسيط من اللعبة والاستطلاعات يُستخدم هذا الخيار لتحقيق الربح من التطبيقات المجانية للتشغيل.

تنفيذ الإعلانات بمكافأة