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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

لدعم الناشرين في الوفاء بواجباتهم بموجب هذه السياسة، تقدّم Google حزمة تطوير برامج (SDK) للموافقة. حزمة تطوير البرامج (SDK) للموافقة هي مكتبة مفتوحة المصدر توفّر وظائف مفيدة لجمع الموافقات من المستخدمين. تتوفر شفرة المصدر الكاملة على GitHub.

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

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

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

يمكن للتطبيقات استيراد حزمة تطوير البرامج (SDK) للموافقة التي تحتوي على Gadle ذات التبعية التي تشير إلى مستودع Google Maven. لاستخدام هذا المستودع، عليك الرجوع إليه في ملف build.gradle على مستوى مشروع التطبيق. افتح صفحتك وابحث عن قسم allprojects:

مثال على build.gradle على مستوى المشروع (مقتطف)

allprojects {
    repositories {
        google()
        jcenter()
    }
}

أضِف التوجيه google() أعلاه إذا لم يكن موجودًا من قبل.

بعد ذلك، افتح ملف build.gradle على مستوى التطبيق لتطبيقك، وابحث عن قسم "العناصر التابعة".

مثال على build.gradle على مستوى التطبيق (مقتطف)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.ads.consent:consent-library:1.0.6'
}

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

قبل استخدام أي طرق أخرى في "حزمة تطوير البرامج (SDK) للموافقة"، عليك تعديل حالة الموافقة للتأكّد من أنّ حزمة تطوير البرامج (SDK) للموافقة تتضمّن أحدث المعلومات بشأن مزوّدي تقنية الإعلان الذين اخترتهم فيAdMob واجهة المستخدم. في حال تغيير قائمة مزوّدي تقنية الإعلان بعد تقديم المستخدم لآخر موافقة، يتم إعادة حالة الموافقة إلى حالة غير معروفة.

في حالة عدم استخدام التوسط

إذا كنت لا تستخدم التوسّط، لديك خياران لتنفيذ "حزمة تطوير البرامج (SDK) للموافقة" لجمع الموافقة.

يتمثل أحد الخيارات في استخدام حزمة تطوير البرامج (SDK) للموافقة لتقديم نموذج موافقة تعرضه Google للمستخدمين. يعرض نموذج الموافقة قائمة بمزوّدي تقنية الإعلان الذين اخترتهم في AdMob واجهة المستخدم. تخزّن "حزمة تطوير البرامج (SDK) للموافقة" استجابة موافقة المستخدم.

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

بعد أن يختار المستخدم الموافقة، يمكنك أن تطلب من "حزمة تطوير البرامج (SDK) للموافقة" تخزين خيار موافقة المستخدم كما هو موضّح في موافقة الناشر المُدار التي يديرها الناشر.

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

في حال استخدام AdMob التوسط

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

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

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

تعديل حالة الموافقة

عند استخدام حزمة تطوير البرامج (SDK) للموافقة، يُنصَح بتحديد حالة موافقة المستخدم في كل عملية تشغيل للتطبيق. لإجراء ذلك، يمكنك استدعاء requestConsentInfoUpdate() على مثال ConsentInformation.

import com.google.ads.consent.*;

public class MainActivity extends Activity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        String[] publisherIds = {"pub-0123456789012345"};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                 // User's consent status successfully updated.
            }

            @Override
            public void onFailedToUpdateConsentInfo(String errorDescription) {
                 // User's consent status failed to update.
            }
        });
        ...
    }
    ...
}

يتطلب الاستدعاء إلى requestConsentInfoUpdate() وسيطتين:

في حال تحديث معلومات الموافقة بنجاح، يتم توفير حالة الموافقة المعدَّلة من خلال طريقة onConsentInfoUpdated() في ConsentInfoUpdateListener. قد يتضمن ConsentStatus المعروض القيم المدرجة أدناه:

حالة الموافقة التعريف
ConsentStatus.PERSONALIZED منح المستخدم الموافقة على الإعلانات المخصّصة.
ConsentStatus.NON_PERSONALIZED لقد منح المستخدم الموافقة على الإعلانات غير المخصّصة.
ConsentStatus.UNKNOWN لم يمنح المستخدم موافقته على الإعلانات المخصّصة أو غير المخصّصة ولم يمنحها أي موافقة.

بعد تحديث معلومات الموافقة بنجاح، يمكنك أيضًا مراجعة ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown() لمعرفة ما إذا كان المستخدم مقيمًا في المنطقة الاقتصادية الأوروبية أو ما إذا كان الموقع الجغرافي للطلب غير معروف.

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

إذا كانت طريقة isRequestLocationInEeaOrUnknown() تعرض true:

حزمة Googleللموافقة طريقتين لجمع الموافقات من المستخدم:

تذكّر تزويد المستخدمين بخيار تغيير الموافقة أو إلغائها.

نموذج الموافقة الذي تعرضه Google هو نموذج قابل للضبط بملء الشاشة يتم عرضه فوق محتوى تطبيقك. يمكنك تهيئة النموذج لتزويد المستخدم بمجموعات من الخيارات التالية:

  • الموافقة على عرض الإعلانات المخصّصة
  • الموافقة على عرض الإعلانات غير المخصّصة
  • استخدام إصدار مدفوع من التطبيق بدلاً من عرض الإعلانات

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

يتم إعداد نموذج الموافقة الذي تعرضه Google ويعرضه باستخدام الصف ConsentForm. يوضّح الرمز التالي كيفية إنشاء ConsentForm باستخدام خيارات الموافقة الثلاثة جميعها:

URL privacyUrl = null;
try {
    // TODO: Replace with your app's privacy policy URL.
    privacyUrl = new URL("https://www.your.com/privacyurl");
} catch (MalformedURLException e) {
    e.printStackTrace();
    // Handle error.
}
ConsentForm form = new ConsentForm.Builder(context, privacyUrl)
    .withListener(new ConsentFormListener() {
        @Override
        public void onConsentFormLoaded() {
            // Consent form loaded successfully.
        }

        @Override
        public void onConsentFormOpened() {
            // Consent form was displayed.
        }

        @Override
        public void onConsentFormClosed(
                ConsentStatus consentStatus, Boolean userPrefersAdFree) {
            // Consent form was closed.
        }

        @Override
        public void onConsentFormError(String errorDescription) {
            // Consent form error.
        }
    })
    .withPersonalizedAdsOption()
    .withNonPersonalizedAdsOption()
    .withAdFreeOption()
    .build();

تُعدّ الطرق المذكورة أعلاه نموذج الموافقة الذي تعرضه Google مع الخيارات التالية:

withListener()
تسجّل مستمعًا إلى ConsentForm. تتطابق كل طريقة من الطرق القابلة للاستبدال في ConsentFormListener مع حدث في دورة حياة نموذج الموافقة.
الطرق التي يمكن إلغاؤها
onConsentFormLoaded تم تحميل نموذج الموافقة بنجاح.
onConsentFormError تعذّر تحميل نموذج الموافقة. توفر المعلمة errorDescription وصفًا للخطأ.
onConsentFormOpened تم فتح نموذج الموافقة.
onConsentFormClosed تم إغلاق نموذج الموافقة. توفّر معلمات الطريقة المعلومات التالية:
  • consentStatus عبارة عن قيمة ConsentStatus تعرض حالة الموافقة المحدَّثة للمستخدم.
  • تكون قيمة userPrefersAdFree هي true عندما يختار المستخدم استخدام إصدار مدفوع من التطبيق بدلاً من عرض الإعلانات.
withPersonalizedAdsOption()
يشير هذا الخيار إلى أنّ نموذج الموافقة يجب أن يعرض خيارًا مخصّصًا للإعلان.
withNonPersonalizedAdsOption()
يشير هذا الخيار إلى ضرورة أن يعرض نموذج الموافقة خيارًا غير مخصّص للإعلان.
withAdFreeOption()
يشير هذا الخيار إلى ضرورة أن يعرض نموذج الموافقة خيار تطبيق بلا إعلانات.

بعد إنشاء كائن ConsentForm، حمِّل نموذج الموافقة من خلال استدعاء طريقة load() في ConsentForm، كما هو موضّح أدناه:

form.load();

لتقديم نموذج الموافقة الذي تعرضه Google للمستخدم، يمكنك الاتصال بالرقم show() على مثال ConsentForm، كما هو موضّح أدناه:

form.show();

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

جمع الموافقات التي يديرها الناشر

إذا اختَرت جمع الموافقات بنفسك، يمكنك استخدام طريقة getAdProviders() في الفئة ConsentInformation لربط مزوّدي تقنية الإعلان بالرقم التعريفي للناشر المستخدَم في تطبيقك. تجدر الإشارة إلى أن الموافقة مطلوبة للقائمة الكاملة بمزوّدي تقنية الإعلان الذين تم إعدادهم للأرقام التعريفية للناشرين.

قبل الاتصال بـ getAdProviders()، يجب الانتظار حتى تصل طريقة onConsentInfoUpdate() إلى ConsentInfoUpdateListener كما هو موضّح في القسم تحديث حالة الموافقة.

List<AdProvider> adProviders =
    ConsentInformation.getInstance(context).getAdProviders();

يمكنك بعد ذلك استخدام قائمة مزوّدي تقنية الإعلان للحصول على الموافقة بنفسك.

بعد الحصول على الموافقة، سجِّل ConsentStatus المقابل لاستجابة المستخدم باستخدام طريقة setConsentStatus() للفئة ConsentInformation.

ConsentInformation.getInstance(context)
    .setConsentStatus(ConsentStatus.PERSONALIZED);

بعد الإبلاغ عن الموافقة على حزمة تطوير البرامج (SDK) للموافقة، يمكنك إعادة توجيه الموافقة إلى حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة.

للسماح للمستخدمين بتحديث موافقتهم، ما عليك سوى تكرار الخطوات الموضحة في قسم جمع الموافقة عندما يختار المستخدم تحديث حالة الموافقة.

إذا كان الناشر على دراية بأن المستخدم دون سن الرشد، يجب أن تعيّن جميع طلبات الإعلان TFUA (علامة المستخدمين تحت سن الرشد في أوروبا). لتضمين هذه العلامة في جميع طلبات الإعلان التي يتم إجراؤها من تطبيقك، اتصل برقم setTagForUnderAgeOfConsent(true). يسري هذا الإعداد على جميع طلبات الإعلان المستقبلية.

ConsentInformation.getInstance(context).setTagForUnderAgeOfConsent(true);

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

لإزالة TFUA من طلبات الإعلان، اتصل برقم setTagForUnderAgeOfConsent(false).

الاختبار

تختلف سلوكيات "حزمة تطوير البرامج (SDK) للموافقة" حسب قيمة ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown(). على سبيل المثال، يتعذّر تحميل نموذج الموافقة إذا لم يكن المستخدم مقيمًا في المنطقة الاقتصادية الأوروبية.

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

  1. اتبع التعليمات الواردة في قسم حالة الموافقة على التحديث لاستدعاء requestConsentInfoUpdate. ثم شغّل تطبيقك. تحقق من ناتج logcat للسجل التالي:

    I/ConsentInformation: Use
    ConsentInformation.getInstance(context).addTestDevice("33BE2250B43518CCDA7DE426D04EE231")
    to get test ads on this device.
  2. عيّن جهازك كجهاز اختبار باستخدام معرّف الإعلانات من logcat:

    ConsentInformation.getInstance(context).addTestDevice("33BE2250B43518CCDA7DE426D04EE231");
  3. وأخيرًا، يمكنك الاتصال بالرقم setDebugGeography لتحديد الموقع الجغرافي المفضّل لديك لأغراض الاختبار.

    // Geography appears as in EEA for test devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
    // Geography appears as not in EEA for debug devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_NOT_EEA);

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

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

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

Java

Bundle extras = new Bundle();
extras.putString("npa", "1");

AdRequest request = new AdRequest.Builder()
    .addNetworkExtrasBundle(AdMobAdapter.class, extras)
    .build();

Kotlin

val extras = Bundle()
extras.putString("npa", "1")

val request = AdRequest.Builder()
    .addNetworkExtrasBundle(AdMobAdapter::class.java, extras)
    .build()

وفي حال طلب إعلانات غير مخصّصة، يتضمّن عنوان URL لطلب الإعلان حاليًا &npa=1. تجدر الإشارة إلى أن هذه التفاصيل هي تفاصيل تنفيذ داخلية بشأن "SDK لإعلانات Google على الأجهزة الجوّالة" وتخضع للتغيير.

تأخير قياس التطبيق (اختياري)

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

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

لتأخير قياس التطبيقات، أضِف العلامة <meta-data> التالية إلى AndroidManifest.xml.

<manifest>
     <application>
        <!-- Delay app measurement until MobileAds.initialize() is called. -->
        <meta-data
            android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
            android:value="true"/>
    </application>
</manifest>

الأسئلة الشائعة

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