البدء

يوضّح لك هذا الدليل كيفية استخدام إضافة "الإعلانات المدمجة مع المحتوى" لتنفيذ إعلانات 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;
}