بموجب سياسة موافقة المستخدم في الاتحاد الأوروبي من Google، يجب الإفصاح عن معلومات معينة للمستخدمين في المنطقة الاقتصادية الأوروبية (EEA) والمملكة المتحدة والحصول على موافقتهم لاستخدام ملفات تعريف الارتباط أو غير ذلك من البيانات المحفوظة على أجهزتهم المحلية حيثما كان ذلك مطلوبًا قانونًا، وكذلك استخدام البيانات الشخصية (مثل AdID) لعرض الإعلانات. تعكس هذه السياسة متطلبات توجيه الاتحاد الأوروبي بشأن الخصوصية الإلكترونية واللائحة العامة لحماية البيانات (GDPR).
لدعم الناشرين في الوفاء بالتزاماتهم بموجب هذه السياسة، تقدّم Google حزمة تطوير البرامج (SDK) لمنصة رسائل المستخدم (UMP). تم تحديث حزمة تطوير البرامج (SDK) في UMP لدعم أحدث معايير مكتب الإعلانات التفاعلية (IAB). يمكن الآن التعامل بكل سهولة مع هذه التهيئات في AdMob الخصوصية والمراسلة.
المتطلبات الأساسية
- أكمل دليل البدء.
- اضبط رسائلك ضمن علامة التبويب الخصوصية والمراسلة في حسابك علىAdMob . لمزيد من التفاصيل، يمكنك الاطّلاع على لمحة عن الخصوصية والمراسلة،
- إذا كنت تعمل على متطلبات متعلّقة باللائحة العامة لحماية البيانات، يمكنك قراءة كيفية تأثير متطلبات IAB في رسائل طلب موافقة المستخدمين في الاتحاد الأوروبي.
أنواع رسائل المستخدم
يمكنك الاطّلاع على أنواع رسائل المستخدم للحصول على قائمة كاملة بالرسائل المسموح بها. للحصول على إرشادات محددة حول تنفيذ كل نوع من أنواع الرسائل، راجع شريط التنقل الأيمن.
استيراد SDK
CocoaPods (الخيار المفضّل)
يتم تضمين حزمة تطوير البرامج (SDK) في Google User Messaging Platform كملحق لحزمة SDK لإعلانات Google على الأجهزة الجوّالة التي تبدأ بالإصدار 7.64.0 من "SDK لإعلانات Google على الأجهزة الجوّالة".
أسهل طريقة لاستيراد حزمة تطوير البرامج (SDK) إلى مشروع iOS هي استخدام CocoaPods. افتح Podfile لمشروعك وأضف هذا السطر إلى هدف تطبيقك:
pod 'Google-Mobile-Ads-SDK'
بعد ذلك، شغِّل الأمر التالي:
pod install --repo-update
إذا كنت مستخدمًا جديدًا لتطبيق CocoaPods، يمكنك الاطّلاع على استخدام CocoaPods للحصول على تفاصيل حول طريقة إنشاء ملفات Podfiles واستخدامها.
التنزيل اليدوي
تتمثل الطريقة الأخرى لاستيراد SDK في إجراء ذلك يدويًا.
تنزيل حزمة تطوير البرامج (SDK)
ثم اسحب إطار العمل إلى مشروع Xcode وتأكّد من اختيار نسخ العناصر إذا لزم الأمر.
يمكنك بعد ذلك تضمين إطار العمل في أي ملف تحتاج إليه باستخدام:
Swift
import UserMessagingPlatform
Objective-C
#include <UserMessagingPlatform/UserMessagingPlatform.h>
تحديث Info.plist
البحث عن رقم تعريف التطبيق وإضافته إلىInfo.plist
:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
تحديد ما إذا كانت الرسالة بحاجة إلى العرض أم لا
يجب أن تطلب تحديثًا لمعلومات موافقة المستخدم في كل مرة يتم فيها تشغيل تطبيق، وذلك باستخدام requestConsentInfoUpdateWithParameters:completionHandler:
قبل تحميل نموذج.
يمكن أن يحدد هذا ما إذا كان المستخدم بحاجة إلى تقديم موافقة إذا لم يكن قد فعل ذلك من قبل أو ما إذا كانت موافقته قد انتهت.
في ما يلي مثال على كيفية التحقق من الحالة عند بدء تشغيل التطبيق:
Swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Create a UMPRequestParameters object. let parameters = UMPRequestParameters() // Set tag for under age of consent. Here false means users are not under age. parameters.tagForUnderAgeOfConsent = false // Request an update to the consent information. UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( with: parameters, completionHandler: { error in if error != nil { // Handle the error. } else { // The consent information state was updated. // You are now ready to check if a form is // available. } }) }
Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Create a UMPRequestParameters object. UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init]; // Set tag for under age of consent. Here NO means users are not under age. parameters.tagForUnderAgeOfConsent = NO; // Request an update to the consent information. [UMPConsentInformation.sharedInstance requestConsentInfoUpdateWithParameters:parameters completionHandler:^(NSError *_Nullable error) { if (error) { // Handle the error. } else { // The consent information state was updated. // You are now ready to check if a form is // available. } }]; }
تحميل نموذج إذا كان متاحًا
قبل عرض نموذج، عليك أولاً تحديد ما إذا كان متاحًا. يمكن أن تكون النماذج غير المتاحة بسبب تفعيل المستخدم لميزة تتبُّع الإعلانات المحدودة أو إذا وضعت علامة عليها على أنها تحت سن الرشد.
للتحقق من توفّر نموذج، استخدِم
the formStatus
property on the UMPConsentInformation
instance الذي أنشأته سابقًا.
بعد ذلك، أضف طريقة برنامج تضمين لتحميل النموذج:
Swift
// Request an update to the consent information. UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( withParameters: parameters, completionHandler: { [self] error in // The consent information has updated. if error != nil { // Handle the error. } else { // The consent information state was updated. // You are now ready to see if a form is available. let formStatus = UMPConsentInformation.sharedInstance.formStatus if formStatus == UMPFormStatus.available { loadForm() } } }) ... func loadForm() { }
Objective-C
// Request an update to the consent information. [UMPConsentInformation.sharedInstance requestConsentInfoUpdateWithParameters:parameters completionHandler:^(NSError* _Nullable error) { // The consent information has updated. if (error) { // Handle the error. } else { // The consent information state was updated. // You are now ready to see if a form is available. UMPFormStatus formStatus = UMPConsentInformation.sharedInstance .formStatus; if (formStatus == UMPFormStatusAvailable) { [self loadForm]; } } }]; ... - (void) loadForm { }
لتحميل النموذج، استخدِم the static loadWithCompletionHandler:
method on the UMPConsentForm
class.
Swift
func loadForm() { // Loads a consent form. Must be called on the main thread. UMPConsentForm.load( withCompletionHandler: { form, loadError in if loadError != nil { // Handle the error } else { // Present the form } }) }
Objective-C
- (void)loadForm { [UMPConsentForm loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) { if (loadError) { // Handle the error } else { // Present the form } }]; }
مشاركة عرض النموذج إذا لزم الأمر
بعد تحديد مدى توفّر النموذج وتحميله، يمكنك استخدام
presentFromViewController:completionHandler:
الطريقة في
UMPConsentForm
المثيل لتقديم النموذج.
يمكنك استخدام
UMPConsentInformation
كائن من وقت سابق للتحقق من
consent status تحديث
طريقةloadForm
:
Swift
func loadForm() { UMPConsentForm.load(withCompletionHandler: { form, loadError in if loadError != nil { // Handle the error. } else { // Present the form. You can also hold on to the reference to present // later. if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.required { form?.present( from: self, completionHandler: { dismissError in if UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatus.obtained { // App can start requesting ads. } // Handle dismissal by reloading form. loadForm(); }) } else { // Keep the form available for changes to user consent. } } }) }
Objective-C
- (void)loadForm { [UMPConsentForm loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) { if (loadError) { // Handle the error. } else { // Present the form. You can also hold on to the reference to present // later. if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusRequired) { [form presentFromViewController:self completionHandler:^(NSError *_Nullable dismissError) { if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusObtained) { // App can start requesting ads. } // Handle dismissal by reloading form. [self loadForm]; }]; } else { // Keep the form available for changes to user consent. } } }]; }
إذا كنت بحاجة إلى تنفيذ أي إجراءات بعد أن اختار المستخدم النموذج أو تجاهله، فضع هذا المنطق في معالج الإكمال أو معاودة الاتصال بالنموذج.
الاختبار
فرض منطقة جغرافية
توفر حزمة تطوير البرامج (SDK) لمنصّة Google User Messaging Platform (UMP) طريقة لاختبار سلوك تطبيقك كما لو كان الجهاز يقع في المنطقة الاقتصادية الأوروبية أو المملكة المتحدة باستخدام the debugGeography
property of type UMPDebugGeography
on UMPDebugSettings
.
يجب تقديم المعرّف المجزأ لجهازك الاختباري في إعدادات تصحيح أخطاء التطبيق لاستخدام وظيفة تصحيح الأخطاء. في حال استدعاء
requestConsentInfoUpdateWithParameters:completionHandler:
بدون ضبط هذه القيمة، سيسجِّل تطبيقك تجزئة رقم التعريف المطلوبة عند التشغيل.
Swift
let parameters = UMPRequestParameters() let debugSettings = UMPDebugSettings() debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"] debugSettings.geography = UMPDebugGeography.EEA parameters.debugSettings = debugSettings UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( with: parameters, completionHandler: { error in ... })
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init]; UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ]; debugSettings.geography = UMPDebugGeographyEEA; parameters.debugSettings = debugSettings; [UMPConsentInformation.sharedInstance requestConsentInfoUpdateWithParameters:parameters completionHandler:^(NSError *_Nullable error){ ... }];
باستخدام UMPDebugGeography
، لديك خيار فرض
الموقع الجغرافي على أحد هذه الخيارات:
الموقع الجغرافي لتصحيح الأخطاء | الوصف |
---|---|
UMPDebugGeographyDisabled |
تم إيقاف تصحيح الأخطاء الجغرافي. |
UMPDebugGeographyEEA |
يظهر الموقع الجغرافي كما في المنطقة الاقتصادية الأوروبية لأجهزة تصحيح الأخطاء. |
UMPDebugGeographyNotEEA |
يظهر الموقع الجغرافي في المنطقة الاقتصادية الأوروبية لأجهزة تصحيح الأخطاء. |
لاحظ أن إعدادات تصحيح الأخطاء تعمل فقط على أجهزة الاختبار. لا يلزم إضافة المحاكيات إلى قائمة أرقام تعريف الأجهزة نظرًا لأنه تم تمكين الاختبار بها بشكل افتراضي.
إعادة ضبط حالة الموافقة
أثناء اختبار تطبيقك باستخدام حزمة تطوير البرامج (SDK) لمنصّة Google User Messaging Platform، قد يكون من المفيد إعادة ضبط حالة حزمة تطوير البرامج (SDK) بحيث يمكنك محاكاة تجربة التثبيت الأولى للمستخدم.
وتوفّر حزمة تطوير البرامج (SDK) reset
الطريقة لتنفيذ ذلك.
Swift
UMPConsentInformation.sharedInstance.reset()
Objective-C
[UMPConsentInformation.sharedInstance reset];
عليك أيضًا الاتصال reset
إذا قرّرت إزالة حزمة تطوير البرامج (SDK) لمنصّة UMP بالكامل من مشروعك.