طلب موافقة من المستخدمين في أوروبا

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

أكمِل البدء بالإصدار 1.3.0 من المكوّن الإضافي GMA Flutter الإضافي المتوافق مع "SDK لمنصة User Messaging Platform".

قراءة كيفية تأثير متطلبات IAB في رسائل طلب موافقة المستخدمين في الاتحاد الأوروبي

مقدمة

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

بموجب سياسة موافقة المستخدم في الاتحاد الأوروبي التي تتّبعها Google، يجب الإفصاح عن معلومات محدّدة للمستخدمين في المنطقة الاقتصادية الأوروبية (EEA) والمملكة المتحدة والحصول على موافقتهم على استخدام ملفات تعريف الارتباط أو غير ذلك من البيانات المحفوظة على أجهزتهم المحلية، حيثما يكون ذلك مطلوبًا قانونًا، وعلى استخدام البيانات الشخصية (مثل AdID) لعرض الإعلانات. تعكس هذه السياسة متطلبات التوجيه الأوروبي بشأن الخصوصية الإلكترونية واللائحة العامة لحماية البيانات (GDPR).

لمساعدة الناشرين في الوفاء بالتزاماتهم بموجب هذه السياسة، تقدِّم Google حزمة تطوير البرامج (SDK) لمنصّة User Messaging Platform (UMP). تم تحديث حزمة تطوير البرامج (SDK) الخاصة بمنصة UMP لتتوافق مع أحدث معايير IAB. لقد بسّطنا أيضًا عملية إعداد نماذج الموافقة وإدراج شركاء الإعلانات. يمكن الآن التعامل مع كل عمليات الضبط هذه بسهولة من خلال "الخصوصية والمراسلة" في "مدير إعلانات Google":

يرشدك هذا الدليل إلى طريقة تثبيت حزمة SDK وتنفيذ حلول IAB وتفعيل ميزات الاختبار.

شفافية تتبُّع التطبيقات (نظام التشغيل iOS فقط)

إذا كنت تخطِّط لاستخدام حزمة تطوير البرامج لمنصة UMP للتعامل مع متطلبات شفافية تتبُّع التطبيقات من Apple، تأكّد من إنشاء رسالة ATT وإعدادها ونشرها باستخدام "الخصوصية والمراسلة" في "مدير إعلانات Google":

لكي تعرض حزمة تطوير البرامج (SDK) لمنصة UMP رسالة تنبيه مخصّصة، عليك تعديل Info.plist لإضافة مفتاح NSUserTrackingUsageDescription بسلسلة رسالة مخصّصة تصف استخدامك.

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

يظهر وصف الاستخدام كجزء من مربّع حوار "شفافية تتبُّع التطبيقات" عند تقديم نموذج الموافقة:

بعد ذلك، عليك ربط إطار عمل AppTrackingTransparency:

أثناء إجراء الاختبارات، تذكَّر أنّه وفقًا لمتطلبات Apple، سيظهر مربّع الحوار ATT لمعرِّف المعلِنين (IDFA) مرة واحدة فقط لأنّ requestTrackingAuthorization: طلب لمرة واحدة. لإظهار التنبيه للمرة الثانية، يجب إلغاء تثبيت التطبيق وإعادة تثبيته على جهاز الاختبار.

استخدام حزمة تطوير البرامج (SDK)

تم تصميم حزمة SDK لاستخدامها بطريقة خطية. خطوات استخدام حزمة SDK هي:

  1. اطلب أحدث المعلومات المتعلّقة بالموافقة.
  2. تحقَّق مما إذا كانت الموافقة مطلوبة.
  3. تحقَّق من توفُّر نموذج، وإذا كان الأمر كذلك، يُرجى تحميل النموذج.
  4. قدِّم النموذج.
  5. توفير طريقة تمكّن المستخدمين من تغيير موافقتهم.

ننصحك بطلب تحديث معلومات الموافقة عند كل عملية إطلاق للتطبيق. سيحدّد هذا ما إذا كان المستخدم بحاجة إلى تقديم موافقته أم لا.

final params = ConsentRequestParameters();
ConsentInformation.instance.requestConsentInfoUpdate(
  params,
  () async {
    // The consent information state was updated.
    // You are now ready to check if a form is available.
  },
  (FormError error) {
    // Handle the error
  },
);

تحميل نموذج إذا كان متاحًا

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

  • فعّل المستخدم الحد الأقصى من تتبع الإعلانات.
  • لقد وضعت علامة على المستخدم باعتباره دون سن الرشد.

للتحقّق من توفّر نموذج، استخدِم طريقة isConsentFormAvailable() على مثيل ConsentInformation. أضف طريقة برنامج تضمين لتحميل نموذج:

final params = ConsentRequestParameters();
ConsentInformation.instance.requestConsentInfoUpdate(
  params,
  () async {
    if (await ConsentInformation.instance.isConsentFormAvailable()) {
      loadForm();
    }
  },
  (FormError error) {
    // Handle the error
  },
);

لتحميل النموذج، عليك استخدام طريقة loadConsentForm() الثابتة في الفئة ConsentForm. عدِّل طريقة loadForm() على النحو التالي:

void loadForm() {
  ConsentForm.loadConsentForm(
    (ConsentForm consentForm) async {
      // Present the form
    },
    (FormError formError) {
      // Handle the error
    },
  );
}

تقديم النموذج إذا لزم الأمر

لتقديم نموذج الموافقة، استخدِم طريقة show() في الصف ConsentForm. يجب تحديد ما إذا كان المستخدم يتطلب موافقة قبل تقديم النموذج. لمعرفة ما إذا كانت الموافقة مطلوبة، يمكنك استدعاء getConsentStatus() على عنصر ConsentInformation الذي يعرض تعدادًا من النوع ConsentStatus. هناك أربع قيم محتملة للسمة ConsentStatus:

  • unknown: حالة الموافقة غير معروفة.
  • required: موافقة المستخدم مطلوبة، ولكن لم يتم الحصول عليها بعد.
  • notRequired: موافقة المستخدم غير مطلوبة. على سبيل المثال، المستخدم ليس مقيمًا في المنطقة الاقتصادية الأوروبية أو المملكة المتحدة.
  • obtained: تم الحصول على موافقة المستخدم. لم يتم تحديد التخصيص.

عدِّل طريقة loadForm على النحو التالي:

void loadForm() {
  ConsentForm.loadConsentForm(
    (ConsentForm consentForm) async {
      var status = await ConsentInformation.instance.getConsentStatus();
      if (status == ConsentStatus.required) {
        consentForm.show(
          (FormError formError) {
            // Handle dismissal by reloading form
            loadForm();
          },
        );
      }
    },
    (formError) {
      // Handle the error
    },
  );
}

إذا لم تكن الموافقة مطلوبة، يمكنك الاحتفاظ بإشارة إلى النموذج حتى يتمكّن المستخدم من تغيير حالة الموافقة.

الاختبار

فرض منطقة جغرافية

توفّر حزمة تطوير البرامج (SDK) لمنصّة UMP طريقة لاختبار سلوك تطبيقك كما لو أنّ الجهاز تم رصده في المنطقة الاقتصادية الأوروبية باستخدام ConsentDebugSettings.debugGeography.

لتتمكّن من استخدام وظيفة تصحيح الأخطاء، عليك تقديم رقم التعريف المجزّأ لجهاز الاختبار في إعدادات تصحيح الأخطاء في تطبيقك. إذا تم استدعاء requestConsentInfoUpdate() بدون ضبط هذه القيمة، سيسجّل تطبيقك تجزئة رقم التعريف المطلوبة عند تشغيله.

ConsentDebugSettings debugSettings = ConsentDebugSettings(
  debugGeography: DebugGeography.debugGeographyEea,
  testIdentifiers: ['TEST-DEVICE-HASHED-ID']);

ConsentRequestParameters params = ConsentRequestParameters(
  consentDebugSettings: debugSettings);

ConsentInformation.instance.requestConsentInfoUpdate(
  params,
  () {},
  (error) {});

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

أثناء اختبار تطبيقك باستخدام حزمة تطوير البرامج لمنصة UMP، قد يكون من المفيد إعادة ضبط حالة حزمة تطوير البرامج (SDK) لكي تتمكّن من محاكاة تجربة التثبيت الأولى للمستخدم. توفِّر حزمة تطوير البرامج (SDK) طريقة reset لإجراء ذلك.

ConsentInformation.instance.reset();

يجب أيضًا إعادة ضبط الطلب إذا قررت إزالة حزمة تطوير البرامج (SDK) لمنصّة UMP تمامًا من مشروعك.

الوساطة

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

ولا تعيد حزمة تطوير البرامج (SDK) الخاصة بمنصة UMP أو حزمة "SDK لإعلانات الأجهزة الجوّالة" توجيه معلومات الموافقة إلى شركاء التوسّط. بدلاً من ذلك، عند استخدام حل IAB، تكتب حزمة تطوير البرامج (SDK) لمنصة UMP معلومات حالة الموافقة إلى مساحة التخزين المحلية، وتتحمّل كل حزمة SDK لشريك التوسّط مسؤولية قراءة المفاتيح المناسبة. تأكد من التحقق مع كل شبكة تابعة لجهة خارجية لتحديد ما إذا كانت تدعم حل IAB.

في حال استخدام حلّ مخصّص لطلب الموافقة، تقع على عاتقك مسؤولية إشعار حِزم SDK التابعة لجهات خارجية بحالة الموافقة في تطبيقك. لكل شبكة توسّط واجهات برمجة التطبيقات الخاصة بها للتعامل مع طلب الموافقة، وقد تم توثيقها لنظامَي التشغيل Android وiOS.

راجع استخدام واجهات برمجة التطبيقات الخاصة بالشبكة لمعرفة كيفية طلبها من Dart.

السلوك التلقائي لحزمة "SDK لإعلانات Google على الأجهزة الجوّالة" هو عرض الإعلانات المخصّصة. إذا وافق المستخدم على تلقّي الإعلانات غير المخصّصة فقط، يمكنك ضبط عنصر AdManagerAdRequest بالرمز التالي لتحديد أنه يجب طلب الإعلانات غير المخصّصة فقط:

final AdManagerAdRequest = AdManagerAdRequest(nonPersonalizedAds: true);

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