البدء

يوضّح لك هذا الدليل كيفية استخدام إضافة الإعلانات المدمجة مع المحتوى لتنفيذ إعلانات AdMob المدمجة مع المحتوى في أحد تطبيقات Unity، بالإضافة إلى بعض الأمور المهمة التي يجب وضعها في الاعتبار على طول الطريق.

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

يتم عرض الإعلانات المدمجة مع المحتوى باستخدام أنواع GameObjects نفسها التي تستخدمها حاليًا لإنشاء تطبيقاتك، ويمكن تنسيقها بما يتناسب مع التصميم المرئي لتجربة المستخدم التي تعيش فيها. عند تحميل إعلان مُدمج مع المحتوى، يتلقى تطبيقك عنصرًا مدمجًا مع المحتوى يحتوي على مواد العرض وسيعرضها تطبيق Unity (بدلاً من حزمة تطوير البرامج (SDK)).

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

  • الإصدار 7.0.0 من المكوّن الإضافي Unity حول إعلانات Google على الأجهزة الجوّالة أو إصدار أحدث.
  • أكمل دليل البدء.
  • نزِّل إضافة الإعلانات المدمجة مع المحتوى وثبِّتها.

تحميل أشكال الإعلانات المدمجة مع المحتوى

يتم تحميل الإعلانات المدمجة مع المحتوى من خلال الفئة AdLoader التي تحتوي على فئة AdLoader.Builder خاصة بها لتخصيصها أثناء عملية الإنشاء. تضبط الطريقة ForNativeAd() أداة AdLoader للتعامل مع الإعلانات المدمجة مع المحتوى.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
}

التسجيل في أحداث إعلانات AdLoader

ليتم إعلامك عند تحميل إعلان مدمج مع المحتوى بنجاح أو تعذُّر تحميله، أضِف المفوَّضين إلى صف AdLoader للأحداث المُدرَجة أدناه.

OnNativeAdLoaded

يتم استدعاؤه عند تحميل إعلان مدمج مع المحتوى بنجاح. يجب أن يكون لديك مفوَّض لهذا الحدث للوصول إلى الإعلان الذي تم تحميله.

OnAdFailedToLoad

يتم استدعاؤه عند تعذُّر تحميل إعلان مدمج مع المحتوى.

تحميل الإعلان

بعد الانتهاء من إنشاء AdLoader، يمكنك استدعاء طريقة LoadAd() لطلب إعلان:

adLoader.LoadAd(new AdRequest.Builder().Build());

وضع طلب الإعلان معًا

يوضّح مقتطف الرمز أدناه كيفية إنشاء AdLoader تم ضبطه لطلب الإعلانات المدمجة مع المحتوى، وإعداد المفوَّضين لعمليات تحميل الإعلانات الناجحة والفاشلة، وتقديم طلب إعلان.

private void RequestNativeAd() {
    AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
        .ForNativeAd()
        .Build();
    adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
    adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
    adLoader.LoadAd(new AdRequest.Builder().Build());
}

التعامل مع عمليات تحميل الإعلانات التي تعذّر إجراؤها

الحدث OnAdFailedToLoad من النوع EventHandle<AdFailedToLoadEventArgs>. في ما يلي تحليل سبب تعذُّر تحميل الإعلانات من هذا الحدث.

private void RequestNativeAd() {
    ...
    adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}

private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
    Debug.Log("Native ad failed to load: " + args.Message);
}

عرض إعلان مدمج مع المحتوى

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

التعامل مع عدد الإعلانات

الحدث OnNativeAdLoaded من النوع EventHandler<NativeAdEventArgs>. يمكن استرداد الإعلان المضمن في عنصر NativeAd من NativeAdEventArgs كما هو موضح:

private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
}

استرداد مواد عرض الإعلانات المدمجة مع المحتوى

بعد تحميل الإعلانات، يمكن الوصول إلى مواد العرض كما هو موضّح أدناه. ويتم عرض أصول الرسومات ككائنات Texture2D، كما يتمّ عرض مواد العرض النصية ككائنات string.

private bool nativeAdLoaded;
private NativeAd nativeAd;

void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for the icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        // Get string for headline asset of native ad.
        string headline = this.nativeAd.GetHeadlineText();
    }
}

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}

تجدر الإشارة إلى أنّه يجب الوصول إلى مواد عرض الإعلان فقط في سلسلة التعليمات الرئيسية، على سبيل المثال، من خلال طريقة Update() في نص Unity برمجي. تجدر الإشارة أيضًا إلى أنّه لا يمكن دائمًا ضمان توفّر مواد العرض التالية، ويجب التحقّق منها قبل عرضها:

  • GetStarRating()
  • GetStore()
  • GetPrice()
  • GetAdvertiser()
  • GetIconTexture()

مادة عرض "خيارات الإعلان"

يجب عرض مادة عرض الإعلان "خيارات الإعلان" كجزء من الإعلان المدمج مع المحتوى. من المهم أيضًا أن ترى مادة عرض الإعلان "خيارات الإعلان" بسهولة، لذا اختر ألوان الخلفية والصور بشكلٍ مناسب.

تسجيل GameObjects لمادة عرض الإعلان

عليك تسجيل GameObject لمادة عرض الإعلان لكي يتم عرضها في تطبيق Unity. في حال إتمام التسجيل بنجاح، تعرض الطريقة المستخدمة لتسجيل GameObject خطأ bool. بالنسبة إلى List<GameObject>، تعرض الطريقة int للإشارة إلى عدد GameObject الذي تم تسجيله بنجاح.

وفي حال تعذّر تسجيل مادة عرض الإعلان، لن يتم التعرّف على مرّات الظهور والنقرات على الإعلان المتجاوب المعنيّ والمتوافق مع المحتوى.

if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
    // Handle failure to register the icon ad asset.
}

يجب أن يتضمّن GameObject المسجَّل لمادة عرض الإعلان مكوّن تصادم محدب يمثل حجم وشكل GameObject. إذا كانت عناصر GameObject المسجَّلة في مواد عرض الإعلانات لا تتضمّن مكوِّنات Collider أو تم إعدادها بشكلٍ غير صحيح، لن تعمل الإعلانات المدمجة مع المحتوى بشكلٍ صحيح.

في مقتطف الرمز أدناه، تمت إضافة BoxCollider إلى GameObject تستخدِم السمة TextMesh لعرض مادة عرض الإعلان الرئيسي في الصفحة الرئيسية لإعلان مدمج مع المحتوى. بعد إرفاق BoxCollider بالعنصر GameObject، سيتم ضبط حجمه تلقائيًا لاستيعاب نص المكوِّن TextMesh.

// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;

// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;

// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();

تجريبي

يوضّح الرمز التالي كيفية استرداد مادة عرض رمز إعلان مدمج مع المحتوى تم تحميله بنجاح، وعرض مادة عرض الإعلان على شكل رمز من خلال ضبط زخرفة Quad، وتسجيل GameObject لاستخدامه في عرض مادة العرض. ينبغي تكرار عملية استرداد مادة عرض الإعلان وتسجيلها ضمن فئة الإعلان المدمج مع المحتوى لكل مادة من مواد العرض التي يعرضها التطبيق.

private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
    ...

    if (this.nativeAdLoaded) {
        this.nativeAdLoaded = false;
        // Get Texture2D for icon asset of native ad.
        Texture2D iconTexture = this.nativeAd.GetIconTexture();

        icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
        icon.transform.position = new Vector3(1, 1, 1);
        icon.transform.localScale = new Vector3(1, 1, 1);
        icon.GetComponent<Renderer>().material.mainTexture = iconTexture;

        // Register GameObject that will display icon asset of native ad.
        if (!this.nativeAd.RegisterIconImageGameObject(icon))
        {
            // Handle failure to register ad asset.
        }
    }
}
...

private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
    Debug.Log("Native ad loaded.");
    this.nativeAd = args.nativeAd;
    this.nativeAdLoaded = true;
}