بموجب سياسة موافقة المستخدم في الاتحاد الأوروبي من Google، يجب الإفصاح عن معلومات معينة للمستخدمين في المنطقة الاقتصادية الأوروبية (EEA) والمملكة المتحدة والحصول على موافقتهم لاستخدام ملفات تعريف الارتباط أو غير ذلك من البيانات المحفوظة على أجهزتهم المحلية حيثما كان ذلك مطلوبًا قانونًا، وكذلك استخدام البيانات الشخصية (مثل AdID) لعرض الإعلانات. تعكس هذه السياسة متطلبات توجيه الاتحاد الأوروبي بشأن الخصوصية الإلكترونية واللائحة العامة لحماية البيانات (GDPR).
لدعم الناشرين في الوفاء بالتزاماتهم بموجب هذه السياسة، تقدّم Google حزمة تطوير البرامج (SDK) لمنصة رسائل المستخدم (UMP). تم تحديث حزمة تطوير البرامج (SDK) في UMP لدعم أحدث معايير مكتب الإعلانات التفاعلية (IAB). يمكن الآن التعامل بكل سهولة مع هذه التهيئات في AdMob الخصوصية والمراسلة.
المتطلبات الأساسية
- أكمل دليل البدء.
- اضبط رسائلك ضمن علامة التبويب الخصوصية والمراسلة في حسابك علىAdMob . لمزيد من التفاصيل، يمكنك الاطّلاع على لمحة عن الخصوصية والمراسلة،
- إذا كنت تعمل على متطلبات متعلّقة باللائحة العامة لحماية البيانات، يمكنك قراءة كيفية تأثير متطلبات IAB في رسائل طلب موافقة المستخدمين في الاتحاد الأوروبي.
أنواع رسائل المستخدم
يمكنك الاطّلاع على أنواع رسائل المستخدم للحصول على قائمة كاملة بالرسائل المسموح بها. للحصول على إرشادات محددة حول تنفيذ كل نوع من أنواع الرسائل، راجع شريط التنقل الأيمن.
التثبيت باستخدام Gradle
إذا كنت تستخدم الإصدار 19.8.0 من حزمة SDK لإعلانات Google على الأجهزة الجوّالة أو إصدارًا أحدث، يتم تضمين حزمة تطوير البرامج (SDK) في Google User Messaging Platform مع الحزمة. إذا كنت تستخدم إصدارًا سابقًا من SDK لإعلانات الجوّال، فاحرص على تضمين حزمة تطوير البرامج (SDK) في Google User Messaging Platform على موقع build.gradle لتطبيقك كما يلي:
dependencies {
// This dependency is automatically included by Google Mobile Ads SDK 19.8.0
// or higher.
implementation 'com.google.android.ump:user-messaging-platform:2.0.0'
}
بعد إجراء التغييرات على build.gradle لتطبيقك، تأكد من مزامنة مشروعك مع ملفات Gradle.
بعد ذلك،
اعثر على رقم تعريف تطبيقك
وإضافته إلى AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.rewardedinterstitialexample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- Sample app ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
تحديد ما إذا كانت الرسالة بحاجة إلى العرض أم لا
يجب أن تطلب تحديثًا لمعلومات موافقة المستخدم في كل مرة يتم فيها تشغيل تطبيق، وذلك باستخدام requestConsentInfoUpdate()
قبل تحميل نموذج.
يمكن أن يحدد هذا ما إذا كان المستخدم بحاجة إلى تقديم موافقة إذا لم يكن قد فعل ذلك من قبل أو ما إذا كانت موافقته قد انتهت.
consentInformation
عند تقديم النموذج عند الطلب.
في ما يلي مثال على كيفية التحقق من الحالة عند بدء تشغيل التطبيق:
لغة Java
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.ump.ConsentForm; import com.google.android.ump.ConsentInformation; import com.google.android.ump.ConsentRequestParameters; import com.google.android.ump.FormError; import com.google.android.ump.UserMessagingPlatform; public class MainActivity extends AppCompatActivity { private ConsentInformation consentInformation; private ConsentForm consentForm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Set tag for under age of consent. false means users are not under // age. ConsentRequestParameters params = new ConsentRequestParameters .Builder() .setTagForUnderAgeOfConsent(false) .build(); consentInformation = UserMessagingPlatform.getConsentInformation(this); consentInformation.requestConsentInfoUpdate( this, params, new ConsentInformation.OnConsentInfoUpdateSuccessListener() { @Override public void onConsentInfoUpdateSuccess() { // The consent information state was updated. // You are now ready to check if a form is available. } }, new ConsentInformation.OnConsentInfoUpdateFailureListener() { @Override public void onConsentInfoUpdateFailure(FormError formError) { // Handle the error. } }); } }
Kotlin
Coming soon.
تحميل نموذج إذا كان متاحًا
قبل عرض نموذج، عليك أولاً تحديد ما إذا كان متاحًا. يمكن أن تكون النماذج غير المتاحة بسبب تفعيل المستخدم لميزة تتبُّع الإعلانات المحدودة أو إذا وضعت علامة عليها على أنها تحت سن الرشد.
للتحقق من توفّر نموذج، استخدِم
the isConsentFormAvailable()
method on the ConsentInformation
instance الذي أنشأته سابقًا.
بعد ذلك، أضف طريقة برنامج تضمين لتحميل النموذج:
لغة Java
... consentInformation.requestConsentInfoUpdate( this, params, new ConsentInformation.OnConsentInfoUpdateSuccessListener() { @Override public void onConsentInfoUpdateSuccess() { // The consent information state was updated. // You are now ready to check if a form is available. if (consentInformation.isConsentFormAvailable()) { loadForm(); } } }, new ConsentInformation.OnConsentInfoUpdateFailureListener() { @Override public void onConsentInfoUpdateFailure(FormError formError) { // Handle the error. } }); } public void loadForm() { } }
Kotlin
Coming soon.
لتحميل النموذج، استخدِم the static loadConsentForm()
method on the UserMessagingPlatform
class.
لغة Java
public void loadForm() { // Loads a consent form. Must be called on the main thread. UserMessagingPlatform.loadConsentForm( this, new UserMessagingPlatform.OnConsentFormLoadSuccessListener() { @Override public void onConsentFormLoadSuccess(ConsentForm consentForm) { MainActivity.this.consentForm = consentForm; } }, new UserMessagingPlatform.OnConsentFormLoadFailureListener() { @Override public void onConsentFormLoadFailure(FormError formError) { // Handle the error } } ); }
Kotlin
Coming soon.
مشاركة عرض النموذج إذا لزم الأمر
بعد تحديد مدى توفّر النموذج وتحميله، يمكنك استخدام
show()
الطريقة في
ConsentForm
المثيل لتقديم النموذج.
يمكنك استخدام
consentInformation
كائن من وقت سابق للتحقق من
consent status تحديث
طريقةloadForm()
:
لغة Java
public void loadForm() { UserMessagingPlatform.loadConsentForm( this, new UserMessagingPlatform.OnConsentFormLoadSuccessListener() { @Override public void onConsentFormLoadSuccess(ConsentForm consentForm) { MainActivity.this.consentForm = consentForm; if(consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.REQUIRED) { consentForm.show( MainActivity.this, new ConsentForm.OnConsentFormDismissedListener() { @Override public void onConsentFormDismissed(@Nullable FormError formError) { // Handle dismissal by reloading form. loadForm(); } }); } } }, new UserMessagingPlatform.OnConsentFormLoadFailureListener() { @Override public void onConsentFormLoadFailure(FormError formError) { /// Handle Error. } } ); }
Kotlin
Coming soon.
إذا كنت بحاجة إلى تنفيذ أي إجراءات بعد أن اختار المستخدم النموذج أو تجاهله، فضع هذا المنطق في معالج الإكمال أو معاودة الاتصال بالنموذج.
الاختبار
فرض منطقة جغرافية
توفر حزمة تطوير البرامج (SDK) لمنصّة Google User Messaging Platform (UMP) طريقة لاختبار سلوك تطبيقك كما لو كان الجهاز يقع في المنطقة الاقتصادية الأوروبية أو المملكة المتحدة باستخدام the setDebugGeography
method on ConsentDebugSettings.Builder
.
يجب تقديم المعرّف المجزأ لجهازك الاختباري في إعدادات تصحيح أخطاء التطبيق لاستخدام وظيفة تصحيح الأخطاء. في حال استدعاء
requestConsentInfoUpdate()
بدون ضبط هذه القيمة، سيسجِّل تطبيقك تجزئة رقم التعريف المطلوبة عند التشغيل.
لغة Java
ConsentDebugSettings debugSettings = new ConsentDebugSettings.Builder(this) .setDebugGeography(ConsentDebugSettings .DebugGeography .DEBUG_GEOGRAPHY_EEA) .addTestDeviceHashedId("TEST-DEVICE-HASHED-ID") .build(); ConsentRequestParameters params = new ConsentRequestParameters .Builder() .setConsentDebugSettings(debugSettings) .build(); consentInformation = UserMessagingPlatform.getConsentInformation(this); consentInformation.requestConsentInfoUpdate(this, params, new ConsentInformation.OnConsentInfoUpdateSuccessListener() { @Override public void onConsentInfoUpdateSuccess() { // The consent information state was updated. // You are now ready to check if a form is available. } }, new ConsentInformation.OnConsentInfoUpdateFailureListener() { @Override public void onConsentInfoUpdateFailure(FormError formError) { // Handle the error. } });
Kotlin
Coming soon.
باستخدام DebugGeography
، لديك خيار فرض
الموقع الجغرافي على أحد هذه الخيارات:
الموقع الجغرافي لتصحيح الأخطاء | الوصف |
---|---|
DEBUG_GEOGRAPHY_DISABLED |
تم إيقاف تصحيح الأخطاء الجغرافي. |
DEBUG_GEOGRAPHY_EEA |
يظهر الموقع الجغرافي كما في المنطقة الاقتصادية الأوروبية لأجهزة تصحيح الأخطاء. |
DEBUG_GEOGRAPHY_NOT_EEA |
يظهر الموقع الجغرافي في المنطقة الاقتصادية الأوروبية لأجهزة تصحيح الأخطاء. |
لاحظ أن إعدادات تصحيح الأخطاء تعمل فقط على أجهزة الاختبار. لا يلزم إضافة المحاكيات إلى قائمة أرقام تعريف الأجهزة نظرًا لأنه تم تمكين الاختبار بها بشكل افتراضي.
إعادة ضبط حالة الموافقة
أثناء اختبار تطبيقك باستخدام حزمة تطوير البرامج (SDK) لمنصّة Google User Messaging Platform، قد يكون من المفيد إعادة ضبط حالة حزمة تطوير البرامج (SDK) بحيث يمكنك محاكاة تجربة التثبيت الأولى للمستخدم.
وتوفّر حزمة تطوير البرامج (SDK) reset()
الطريقة لتنفيذ ذلك.
لغة Java
consentInformation.reset();
Kotlin
consentInformation.reset()
عليك أيضًا الاتصال reset()
إذا قرّرت إزالة حزمة تطوير البرامج (SDK) لمنصّة UMP بالكامل من مشروعك.