حزمة تطوير البرامج لمنصّة User Messaging Platform (UMP) من Google هي أداة للخصوصية والمراسلة في إدارة خيارات الخصوصية لمزيد من المعلومات، يُرجى مراجعة حول الخصوصية و المراسلة
إنشاء نوع رسالة
يمكنك إنشاء رسائل المستخدمين باستخدام إحدى أنواع رسائل المستخدمين المتاحة بموجب الخصوصية "المراسلة" في AdMob الحساب. تحاول حزمة تطوير البرامج لمنصّة UMP عرض رسالة خصوصية تم إنشاؤها من AdMob معرّف التطبيق التي تم تعيينها في مشروعك.
لمزيد من التفاصيل، يُرجى مراجعة لمحة عن الخصوصية والمراسلة
إضافة معرّف التطبيق
يمكنك العثور على رقم تعريف طلبك في واجهة مستخدم AdMob: إضافة رقم التعريف إلى باستخدام مقتطف الرمز التالي:
طلب الحصول على معلومات الموافقة
عليك طلب تعديل معلومات موافقة المستخدم في كل تطبيق.
الإطلاق، باستخدام requestConsentInfoUpdate()
. يتحقّق هذا الطلب من
ما يلي:
- ما إذا كانت الموافقة مطلوبة: على سبيل المثال، تلزم الموافقة على للمرة الأولى، أو انتهت صلاحية القرار السابق بالموافقة.
- ما إذا كانت نقطة دخول خيارات الخصوصية مطلوبة بعض رسائل الخصوصية إلزام التطبيقات بالسماح للمستخدمين بتعديل خيارات الخصوصية في أي وقت.
في ما يلي مثال على كيفية التحقّق من الحالة عند بدء تشغيل التطبيق:
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
// TODO: Load and present the privacy message form.
},
(FormError error) {
// Handle the error.
},
);
}
تحميل نموذج رسالة الخصوصية وتقديمه إذا لزم الأمر
بعد تلقّي أحدث حالة الموافقة، اتصل
loadAndShowConsentFormIfRequired()
لتحميل أي نماذج مطلوبة
جمع موافقات المستخدمين بعد التحميل، تظهر النماذج على الفور.
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
ConsentForm.loadAndShowConsentFormIfRequired((loadAndShowError) {
if (loadAndShowError != null) {
// Consent gathering failed.
}
// Consent has been gathered.
});
},
(FormError error) {
// Handle the error.
},
);
}
في حال كنت بحاجة إلى تنفيذ أي إجراءات بعد أن يختار المستخدم اختيارًا أو رفضه النموذج، ضَع هذا المنطق في callback لنموذجك.
خيارات الخصوصية
يتم تقديم بعض نماذج رسائل الخصوصية من نموذج خصوصية يعرضه الناشر للخيارات، مما يتيح للمستخدمين إدارة خيارات الخصوصية في أي وقت. لمعرفة المزيد من المعلومات عن الرسالة التي تظهر للمستخدمين في خيارات الخصوصية نقطة دخول، راجع أنواع رسائل المستخدمين المتاحة.
لتطبيق نقطة دخول لخيارات الخصوصية، أكمِل الخطوات التالية:
- تحقّق من
getPrivacyOptionsRequirementStatus()
. - إذا كانت نقطة إدخال خيارات الخصوصية ، أضف عنصر واجهة مستخدم مرئيًا وتفاعليًا إلى تطبيقك.
- تشغيل نموذج خيارات الخصوصية باستخدام
showPrivacyOptionsForm()
يوضح مثال الرمز التالي هذه الخطوات:
class AppExampleState extends State<AppExample> {
static const _privacySettingsText = 'Privacy Settings';
// Use a bool to initialize the Mobile Ads SDK and load ads once.
var _isMobileAdsInitializeCalled = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'App Example',
home: Scaffold(
appBar: AppBar(
title: const Text('App Example'),
actions: _isMobileAdsSDKInitialized
// Regenerate the options menu to include a privacy setting.
? _privacySettingsAppBarAction()
: null
),
body: // ...
),
);
}
List<Widget> _privacySettingsAppBarAction() {
return <Widget>[
FutureBuilder(
future: ConsentInformation.instance.isPrivacyOptionsRequired(),
builder: (context, snapshot) {
final bool visibility = snapshot.data ?? false;
return Visibility(
visible: visibility,
child: PopupMenuButton<String>(
onSelected: (String result) {
if (result == _privacySettingsText) {
ConsentForm.showPrivacyOptionsForm((formError) {
if (formError != null) {
debugPrint(
"${formError.errorCode}: ${formError.message}");
}
});
}
},
itemBuilder: (BuildContext context) =>
<PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: _privacySettingsText,
child: Text(_privacySettingsText))
],
));
})
];
}
}
طلب إدراج الإعلانات
قبل طلب الإعلانات في تطبيقك، يُرجى التحقّق مما إذا كنت قد حصلت على الموافقة.
من المستخدم باستخدام canRequestAds()
. هناك خياران
الأماكن التي يجب التحقّق منها أثناء جمع الموافقات:
- بعد الحصول على الموافقة في الجلسة الحالية
- فور اتصالك بـ
requestConsentInfoUpdate()
. من المحتمل أن تكون قد حصلت على موافقة في الجلسة السابقة. كوقت استجابة أحد أفضل الممارسات، نوصي بعدم انتظار اكتمال معاودة الاتصال حتى تتمكن ابدأ في تحميل الإعلانات في أقرب وقت ممكن بعد إطلاق تطبيقك.
إذا حدث خطأ أثناء عملية الحصول على الموافقات، يجب عليك محاولة طلب إعلانات. تستخدم حزمة تطوير البرامج لمنصة UMP حالة الموافقة من الحزمة السابقة جلسة المراجعة.
class AppExampleState extends State<AppExample> {
// Use a bool to initialize the Mobile Ads SDK and load ads once.
var _isMobileAdsInitializeCalled = false;
@override
void initState() {
super.initState();
// Create a ConsentRequestParameters object.
final params = ConsentRequestParameters();
// Request an update for the consent information.
ConsentInformation.instance.requestConsentInfoUpdate(
params,
() async {
ConsentForm.loadAndShowConsentFormIfRequired((loadAndShowError) {
if (loadAndShowError != null) {
// Consent gathering failed.
}
// Consent has been gathered.
_initializeMobileAdsSDK();
});
},
(FormError error) {
// Handle the error.
},
);
// Check if you can initialize the Mobile Ads SDK in parallel while
// checking for new consent information. Consent obtained in the
// previous session can be used to request ads.
_initializeMobileAdsSDK();
}
void _initializeMobileAdsSDK() async {
if (_isMobileAdsInitializeCalled) {
return;
}
// Initialize the Mobile Ads SDK if the SDK has gathered consent aligned with
// the app's configured messages.
var canRequestAds = await ConsentInformation.instance.canRequestAds();
if (canRequestAds) {
setState(() {
_isMobileAdsInitializeCalled = true;
});
// Initialize the Mobile Ads SDK.
MobileAds.instance.initialize();
// TODO: Request an ad.
}
}
}
الاختبار
إذا أردت اختبار التكامل في تطبيقك أثناء تطويره، اتّبِع الخطوات التالية: هذه الخطوات لتسجيل جهاز الاختبار برمجيًا. تأكد من إزالة الذي يضبط أرقام تعريف الأجهزة الاختبارية هذه قبل إصدار تطبيقك.
- اتصل على
requestConsentInfoUpdate()
. يمكنك التحقّق من مخرجات السجلّ لرسالة مشابهة للمثال التالي، وهي تعرض رقم تعريف جهازك وكيفية إضافته كجهاز اختبار:
Android
Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.
iOS
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
انسخ رقم تعريف جهاز الاختبار إلى الحافظة.
عدِّل الرمز من أجل
ConsentDebugSettings.testIdentifiers
وتخطّي النقاط قائمة بأرقام تعريف الأجهزة الاختباريةConsentDebugSettings debugSettings = ConsentDebugSettings( testIdentifiers: ["TEST-DEVICE-HASHED-ID"], ); ConsentRequestParameters params = ConsentRequestParameters(consentDebugSettings: debugSettings); ConsentInformation.instance.requestConsentInfoUpdate(params, () async { // ... };
فرض موقع جغرافي
توفِّر حزمة تطوير البرامج (SDK) لمنصّة UMP طريقة لاختبار سلوك تطبيقك كما لو كان الجهاز
في المنطقة الاقتصادية الأوروبية أو المملكة المتحدة باستخدام the DebugGeography
field on ConsentDebugSettings
. لاحظ أن
لا تعمل إعدادات تصحيح الأخطاء إلا على الأجهزة الاختبارية.
ConsentDebugSettings debugSettings = ConsentDebugSettings(
debugGeography: DebugGeography.debugGeographyEea,
testIdentifiers: ["TEST-DEVICE-HASHED-ID"],
);
ConsentRequestParameters params =
ConsentRequestParameters(consentDebugSettings: debugSettings);
ConsentInformation.instance.requestConsentInfoUpdate(params, () async {
// ...
};
إعادة ضبط حالة الموافقة
أثناء اختبار تطبيقك باستخدام حزمة تطوير البرامج لمنصة UMP، قد يكون من المفيد إعادة ضبط
لحالة حزمة SDK لكي تتمكّن من محاكاة أول عملية تثبيت للمستخدم.
وتوفّر حزمة تطوير البرامج (SDK) الطريقة reset()
لإجراء ذلك.
ConsentInformation.instance.reset();