بموجب سياسة موافقة المستخدم في الاتحاد الأوروبي التي تتّبعها Google، يجب الإفصاح عن معلومات محدّدة للمستخدمين داخل المنطقة الاقتصادية الأوروبية، والمملكة المتحدة وسويسرا والحصول على موافقتهم على استخدام ملفات تعريف الارتباط أو غير ذلك من البيانات المحفوظة على أجهزتهم المحلية وفقًا للمتطلبات القانونية، وكذلك موافقتهم على استخدام البيانات الشخصية (مثل المعرّف الإعلاني) لعرض الإعلانات.
تعكس هذه السياسة شروط "التوجيه الأوروبّي بشأن الخصوصية الإلكترونية" و"اللائحة العامّة لحماية البيانات" (GDPR) في الاتّحاد الأوروبّي.
يقدّم هذا الدليل الخطوات المطلوبة لدعم رسالة طلب الموافقة بموجب "اللائحة العامة لحماية البيانات" (GDPR) والإصدار 2 من "إطار الشفافية والموافقة" الصادر عن مكتب IAB كجزء من حزمة تطوير البرامج لمنصة UMP. ويُفترض استخدامه مع مقالة البدء التي تقدّم نظرة عامة حول كيفية تشغيل تطبيقك باستخدام حزمة تطوير البرامج لمنصة UMP والأساسيات الخاصة بإعداد رسالتك. الإرشادات التالية خاصة برسالة طلب الموافقة بموجب "اللائحة العامة لحماية البيانات" (GDPR) والإصدار 2 من "إطار الشفافية والموافقة" الصادر عن مكتب IAB. لمزيد من المعلومات، يُرجى الاطّلاع على كيفية تأثير متطلبات IAB في رسائل طلب الموافقة في الاتحاد الأوروبي.
المتطلبات الأساسية
- إعداد حزمة تطوير البرامج لمنصة UMP.
- إنشاء رسالة لطلب الموافقة بموجب اللوائح التنظيمية الأوروبية في تطبيقاتك
إبطال الموافقة
تتطلّب "اللائحة العامة لحماية البيانات" إبطال الموافقة للسماح للمستخدمين بسحب خيارات الموافقة في أي وقت. يُرجى الاطّلاع على خيارات الخصوصية لتنفيذ طريقة تتيح للمستخدمين سحب خيارات الموافقة.
علامة للقاصرين دون سن الرشد
للإشارة إلى ما إذا كان المستخدم دون سن الرشد، اضبط
setTagForUnderAgeOfConsent (TFUA). عند ضبط TFUA على true، لا تطلب حزمة تطوير البرامج لمنصة UMP الموافقة من المستخدم. إذا كان تطبيقك يستهدف جمهورًا مختلطًا، اضبط هذه المَعلمة للمستخدمين الأطفال لضمان عدم طلب الموافقة.
يضبط المثال التالي TFUA على "صحيح" في طلب الموافقة على منصة UMP:
جافا
ConsentRequestParameters params = new ConsentRequestParameters
.Builder()
// Indicate the user is under age of consent.
.setTagForUnderAgeOfConsent(true)
.build();
consentInformation = UserMessagingPlatform.getConsentInformation(this);
consentInformation.requestConsentInfoUpdate(
this,
params,
(OnConsentInfoUpdateSuccessListener) () -> {
// ...
},
(OnConsentInfoUpdateFailureListener) requestConsentError -> {
// ...
});
Kotlin
val params = ConsentRequestParameters
.Builder()
// Indicate the user is under age of consent.
.setTagForUnderAgeOfConsent(true)
.build()
consentInformation = UserMessagingPlatform.getConsentInformation(this)
consentInformation.requestConsentInfoUpdate(
this,
params,
ConsentInformation.OnConsentInfoUpdateSuccessListener {
// ...
},
ConsentInformation.OnConsentInfoUpdateFailureListener {
requestConsentError ->
// ...
})
الوساطة
اتّبِع الخطوات الواردة في مقالة إضافة شركاء إعلانات إلى الرسائل المنشورة لطلب موافقة المستخدمين بموجب "اللائحة العامة لحماية البيانات" (GDPR) لإضافة شركاء التوسّط إلى قائمة الشركاء الإعلانيين. قد يؤدّي عدم الالتزام بذلك إلى عدم تمكّن الشركاء من عرض الإعلانات على تطبيقك.
قد يتوفّر لدى شركاء التوسّط أيضًا أدوات إضافية للمساعدة في الامتثال للّائحة العامة لحماية البيانات. يُرجى الاطّلاع على دليل التكامل الخاص بشريك معيّن لمزيد من التفاصيل.
كيفية قراءة خيارات الموافقة
بعد جمع الموافقة بموجب "اللائحة العامة لحماية البيانات"، يمكنك قراءة خيارات الموافقة من وحدة التخزين المحلية باتّباع مواصفات الإصدار 2 من "إطار الشفافية والموافقة". يشير المفتاح IABTCF_PurposeConsents إلى الموافقة على كلّ من أغراض "إطار الشفافية والموافقة".
يوضّح مقتطف الرمز التالي كيفية التحقّق من الموافقة على الغرض 1:
جافا
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
// Example value: "1111111111"
String purposeConsents = sharedPref.getString("IABTCF_PurposeConsents", "");
// Purposes are zero-indexed. Index 0 contains information about Purpose 1.
if (!purposeConsents.isEmpty()) {
String purposeOneString = purposeConsents.charAt(0).toString();
boolean hasConsentForPurposeOne = purposeOneString.equals("1");
}
Kotlin
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
// Example value: "1111111111"
val purposeConsents = sharedPref.getString("IABTCF_PurposeConsents", "")
// Purposes are zero-indexed. Index 0 contains information about Purpose 1.
if (purposeConsents?.isEmpty() == false) {
val purposeOneString = purposeConsents.first().toString()
val hasConsentForPurposeOne = purposeOneString == "1"
}
الأسئلة الشائعة
- ماذا يحدث إذا لم أتّخذ أي إجراء للوفاء بـ متطلبات منصة إدارة الموافقة لعرض الإعلانات في المنطقة الاقتصادية الأوروبية والمملكة المتحدة وسويسرا؟
اعتبارًا من 16 يناير 2024، إذا لم يستخدم الشريك منصة معتمَدة من Google لإدارة الموافقة، لن تكون مؤهّلة للعرض على الزيارات الواردة من المنطقة الاقتصادية الأوروبية والمملكة المتحدة سوى الإعلانات المحدودة.
سيبدأ فرض هذه المتطلبات في 16 يناير 2024 على نسبة صغيرة من الزيارات الواردة من المنطقة الاقتصادية الأوروبية والمملكة المتحدة، على أن يتم تطبيقها على جميع هذه الزيارات في نهاية فبراير 2024. يُرجى استخدام منصة معتمَدة لإدارة الموافقة بحلول 16 يناير 2024 لضمان عدم تأثُّر عملية تحقيق الربح.
- كيف يمكنني معرفة ما إذا كان المستخدم قد منح الموافقة؟
لا يتم تمثيل الموافقة باستخدام بت واحد، بل باستخدام مجموعة من الأغراض و المورّدين على النحو المحدّد في مواصفات "إطار الشفافية والموافقة" الصادر عن مكتب IAB. يُرجى الاطّلاع على سياسات الموافقة: الإعلانات المخصّصة والإعلانات غير المخصّصة لمعرفة معايير تخصيص "إعلانات Google".
بالإضافة إلى ذلك، تستخدم تقنيات الإعلان في قائمة مزوّدي تقنية الإعلان من Google غير المسجَّلة في قائمة مورّدي إطار الشفافية والموافقة المواصفات الفنية لـ الموافقة الإضافية من Google لجمع الموافقة. تنشر Google قائمة مزوّدي تقنية الإعلان غير المسجَّلين لدى مكتب IAB وأرقام تعريفهم في الموقع التالي: https://storage.googleapis.com/tcfac/additional-consent-providers.csv.
لتصحيح الأخطاء في طلب عرض إعلان فردي، استخدِم ميزة تحديد المشاكل في إعدادات الخصوصية في أداة فحص الإعلانات لعرض إشارات الخصوصية التالية التي تم تمريرها في طلب عرض الإعلان كجزء من تكامل الناشر مع إطار الشفافية والموافقة الصادر عن مكتب IAB في أوروبا:
تصنيف أداة فحص الإعلانات مَعلَمة طلب عرض الإعلان المعنى تنطبق "اللائحة العامة لحماية البيانات" (IABTCF_gdprApplies) gdprما إذا كانت اللائحة العامة لحماية البيانات تنطبق على طلب عرض الإعلان هذا. سلسلة الموافقة والشفافية (IABTCF_TCString) gdpr_consentسلسلة الموافقة والشفافية يوفّر مكتب IAB أداة على الويب يمكنك من خلالها فك ترميز القيمة يدويًا . سلسلة الموافقة الإضافية (IABTCF_AddtlConsent) addtl_consentسلسلة الموافقة الإضافية من المواصفات الفنية لـ "الموافقة الإضافية" من Google. لقراءة خيارات الموافقة آليًا، يُرجى الاطّلاع على كيفية قراءة خيارات الموافقة لمزيد من المعلومات.
- هل أحتاج إلى استخدام حزمة تطوير البرامج لمنصة UMP من Google للوفاء بمتطلبات منصة إدارة الموافقة؟
لا، يمكنك استخدام أي منصة لإدارة الموافقة من قائمة منصات إدارة الموافقة المعتمَدة من Google لعرض الإعلانات.
- كيف يمكنني عرض نموذج الموافقة مرة أخرى باستخدام حزمة تطوير البرامج لمنصة UMP حتى إذا كان المستخدم قد منح الموافقة من قبل؟
إذا سبق أن اتّخذ المستخدم قرارًا بشأن الموافقة، لن يطلب حلّ إدارة الموافقة من Google جمع موافقة جديدة إلى أن تنتهي صلاحية سلسلة الموافقة والشفافية أو تصبح غير صالحة بطريقة أخرى.
تتطلّب "اللائحة العامة لحماية البيانات" تعديل الموافقة للسماح للمستخدمين بسحب خيارات الموافقة في أي وقت. يُرجى الاطّلاع على خيارات الخصوصية لتنفيذ طريقة تتيح للمستخدمين سحب خيارات الموافقة. لعرض نموذج الموافقة مرة أخرى، استخدِم
showPrivacyOptionsForm().- لقد دمجت منصة معتمَدة من Google لإدارة الموافقة، ولكن لا تظهر لي أي طلبات عرض الإعلان يتم إرسالها إلى شركاء التوسّط، حتى من المستخدمين الذين منحوا الموافقة. ما سبب ذلك؟
بموجب "إطار الشفافية والموافقة"، تتحقّق Google من أن مزوّدي تقنيات الإعلان ومصادر الطلب الآلية الأخرى لا تنتهك سياسة Google وأنّها تملك أساسًا قانونيًا واحدًا على الأقل لمعالجة البيانات قبل تضمينها في تدفق التوسّط. يُرجى الانتقال إلى قسم التوسّط لمزيد من المعلومات.
بعض شركاء التوسّط في قائمة مزوّدي تقنية الإعلان من Google غير مسجَّلين في قائمة مورّدي إطار الشفافية والموافقة. بدلاً من ذلك، يستخدم هؤلاء الشركاء المواصفات الفنية لـ "الموافقة الإضافية" من Google لجمع الموافقة. تنشر Google قائمة مزوّدي تقنية الإعلان غير المسجَّلين لدى مكتب IAB وأرقام تعريفهم في الموقع التالي: https://storage.googleapis.com/tcfac/additional-consent-providers.csv
تتيح حزمة تطوير البرامج لمنصة UMP تخزين سلسلة الموافقة الإضافية، ما يسمح لك بإضافة شركاء إعلانات إلى الرسائل المنشورة لطلب موافقة المستخدمين بموجب "اللائحة العامة لحماية البيانات" (GDPR) بدون الحاجة إلى معرفة ما إذا كان الشركاء مسجَّلين في "إطار الشفافية والموافقة". عند استخدام منصة خارجية لإدارة الموافقة، عليك اتّباع الخطوات التالية:
- التأكّد من أنّ منصة إدارة الموافقة الخارجية تتيح تخزين سلسلة الموافقة الإضافية
- تضمين كل شريك توسّط في قائمة مزوّدي تقنية الإعلان الذين تستخدمهم منصة إدارة الموافقة الخارجية لجمع الموافقة
- هل يمكنني تغيير طريقة عمل تطبيقي إذا لم يمنح المستخدمون الموافقة؟ هل تسمح السياسة بذلك؟
يمكن للناشرين قراءة سلسلة "إطار الشفافية والموافقة" الصادر عن مكتب IAB في تطبيقاتهم. يُرجى الاطّلاع على كيفية قراءة خيارات الموافقة للحصول على معلومات حول قراءة خيارات الموافقة آليًا. على الناشرين مراجعة التزاماتهم بموجب اللوائح التنظيمية ذات الصلة مع مستشار قانوني.
- عند النقر على إدارة الخيارات والموافقة على جميع الأغراض، لا تظهر لي أي إعلانات. ما سبب ذلك؟
بالإضافة إلى جمع الموافقة على الأغراض، عليك أيضًا جمع موافقة المورّد. يجب الحصول على الموافقة على الأغراض وموافقة المورّد لأي مورّد، مثل Google، لعرض إعلانات مناسبة.
- كيف يمكنني تنفيذ الإصدار 2 من سلسلة الموافقة الإضافية للمستخدمين الذين سبق أن منحوا الموافقة على الإصدار 1؟
يُرجى التحقّق من المفتاح
IABTCF_AddtlConsentفي وحدة التخزين المحلية وفقًا لـ المواصفات الفنية لـ "الموافقة الإضافية" من Google لتحديد ما إذا كان المستخدم قد منح الموافقة على الإصدار 2 من سلسلة الموافقة الإضافية وما إذا كنت بحاجة إلى عرض نموذج الموافقة مرة أخرى.جافا
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); // Example value: "2~1.35.41.101~dv.9.21.81" String additionalConsent = sharedPref.getString("IABTCF_AddtlConsent", ""); // Index 0 contains information about the specification version number. if (!additionalConsent.isEmpty()) { String specACVersion = additionalConsent.charAt(0); boolean isACVersion2 = purposeOneString.equals("2"); }Kotlin
val sharedPref = PreferenceManager.getDefaultSharedPreferences(context) // Example value: "2~1.35.41.101~dv.9.21.81" val additionalConsent = sharedPref.getString("IABTCF_AddtlConsent", "") // Index 0 contains information about the specification version number. if (!additionalConsent.isEmpty()) { val specACVersion = additionalConsent.first() val isACVersion2 = specACVersion == "2" }