Google AB Kullanıcı Rızası Politikası uyarınca, Birleşik Krallık ile birlikte Avrupa Ekonomik Alanı'ndaki (AEA) kullanıcılarınıza belirli açıklamalar yapmanız ve yasal olarak gerekli olduğu durumlarda çerez veya başka yerel depolama bilgilerinin kullanımının yanı sıra reklam yayınlamak amacıyla kişisel verileri (AdID gibi) kullanmak için kullanıcıların iznini almanız gerekir. Bu politika AB eGizlilik Yönergesi ve Genel Veri Koruma Yönetmeliği (GDPR) gereksinimlerini yansıtmaktadır.
Google, yayıncıları bu politika kapsamındaki gereksinimleri yerine getirmeleri konusunda desteklemek için Kullanıcı Mesajlaşma Platformu (UMP) SDK'sını sunmaktadır. UMP SDK'sı, en son IAB standartlarını destekleyecek şekilde güncellenmiştir. Artık tüm bu yapılandırmalar Ad Manager gizlilik ve mesajlaşma bölümünden kolayca yönetilebilir.
Ön koşullar
- Başlangıç kılavuzunu tamamlayın
- GDPR ile ilgili şartlar üzerinde çalışıyorsanızIAB şartları AB kullanıcı rızası alma mesajlarını nasıl etkiler?
Mesaj türü oluşturma
Kullanıcı mesajlarını, Ad Manager hesabınızın Gizlilik ve mesajlaşma sekmesindeki kullanılabilir kullanıcı mesajı türlerinden birini kullanarak oluşturun. UMP SDK'sı, projenizde ayarlanan uygulama kimliğinden oluşturulan Ad Manager kullanıcı mesajı göstermeye çalışır. Uygulamanız için herhangi bir mesaj yapılandırılmazsa SDK bir hata döndürür.
Daha fazla bilgi için Gizlilik ve mesajlaşma hakkında.
Rıza bilgileri isteği
Her uygulama lansmanında requestConsentInfoUpdate()
kullanarak kullanıcının izin bilgilerinin güncellenmesini istemeniz gerekir. Bu durum, kullanıcınızın henüz yapmadıysa izin vermesi gerekip gerekmediğini veya izin süresinin dolup dolmadığını belirler.
Uygulama başlangıcında durumu nasıl kontrol edeceğinizle ilgili bir örneği aşağıda bulabilirsiniz:
@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 consent form.
},
(FormError error) {
// Handle the error.
},
);
}
İzin formunu yükleme ve gerekirse gösterme
En güncel izin durumunu aldıktan sonra izin formu yüklemek içinConsentForm
sınıftanloadAndShowConsentFormIfRequired()
numaralı telefonu arayın. İzin durumu gerekiyorsa SDK bir form yükler ve sağlanan aracından hemen sunar. Form kapatıldıktan sonra callback
çağrı yapılır. İzin gerekli değilse callback
çağrılır.
@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.
},
);
}
Kullanıcı bir seçim yaptıktan veya formu kapattıktan sonra herhangi bir işlem gerçekleştirmeniz gerekirse bu mantığı formunuzun callbackiçine yerleştirin.
Reklam isteğinde bulun
Uygulamanızda reklam isteğinde bulunmadan önce, canRequestAds()
özelliğini kullanarak kullanıcıdan izin alıp almadığınızı kontrol edin. İzin alırken kontrol edilecek
iki yer vardır:
- Geçerli oturumda izin alındıktan sonra.
-
requestConsentInfoUpdate()
numaralı telefonu aradıktan hemen sonra. Önceki oturumda izin alınmış olabilir. Gecikmeye yönelik en iyi uygulama olarak, geri çağırmanın tamamlanmasını beklememenizi öneririz. Böylece uygulamanız kullanıma sunulduktan sonra mümkün olan en kısa sürede reklam yüklemeye başlayabilirsiniz.
İzin toplama sürecinde bir hata oluşursa yine de reklam istemeyi denemeniz gerekir. UMP SDK'sı, önceki oturumdaki izin durumunu kullanır.
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.
}
}
}
Gizlilik seçenekleri
Bazı izin formları, kullanıcının dilediği zaman iznini değiştirmesini gerektirir. Gerekirse gizlilik seçenekleri düğmesi uygulamak için aşağıdaki adımları uygulayın.
Bunu yapabilmek için:
- Uygulamanızın ayarlar sayfasındaki bir düğme gibi gizlilik seçenekleri formunu tetikleyebilecek bir kullanıcı arayüzü öğesi uygulayın.
- İşlem tamamlandığında, gizlilik seçenekleri formunu sunabilecek kullanıcı arayüzü öğesinin gösterilip gösterilmeyeceğini belirlemek için
getPrivacyOptionsRequirementStatus()
işaretini işaretleyin.loadAndShowConsentFormIfRequired()
- Kullanıcı arayüzü öğenizle etkileşimde bulunan bir kullanıcı, gizlilik seçeneklerini dilediği zaman güncelleyebilmesi için formu göstermek üzere
showPrivacyOptionsForm()
numaralı telefonu arayın.
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))
],
));
})
];
}
}
Test
Uygulamanız geliştirme aşamasındayken entegrasyonu test etmek isterseniz test cihazınızı programatik olarak kaydetmek için bu adımları uygulayın. Uygulamanızı yayınlamadan önce bu test cihazı kimliklerini ayarlayan kodu kaldırdığınızdan emin olun.
-
requestConsentInfoUpdate()
numaralı telefonu arayın. Günlük çıktısında, cihaz kimliğinizi ve test cihazı olarak nasıl ekleyeceğinizi gösteren aşağıdaki örneğe benzer bir mesaj olup olmadığını kontrol edin:
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]
Test cihazı kimliğinizi panonuza kopyalayın.
Kodunuzu, test cihazı kimliklerinizin listesini ayarlayacak
ConsentDebugSettings.testIdentifiers
şekilde değiştirin.ConsentDebugSettings debugSettings = ConsentDebugSettings( testIdentifiers: ["TEST-DEVICE-HASHED-ID"], ); ConsentRequestParameters params = ConsentRequestParameters(consentDebugSettings: debugSettings); ConsentInformation.instance.requestConsentInfoUpdate(params, () async { // ... };
Coğrafi konumu zorunlu kılın
UMP SDK'sı, the DebugGeography
field on ConsentDebugSettings
kullanılarak cihaz AEA veya Birleşik Krallık'ta bulunuyormuş gibi uygulamanızın davranışını test edebileceğiniz bir yöntem sunar. Hata ayıklama ayarlarının yalnızca test cihazlarında çalıştığını unutmayın.
ConsentDebugSettings debugSettings = ConsentDebugSettings(
debugGeography: DebugGeography.debugGeographyEea,
testIdentifiers: ["TEST-DEVICE-HASHED-ID"],
);
ConsentRequestParameters params =
ConsentRequestParameters(consentDebugSettings: debugSettings);
ConsentInformation.instance.requestConsentInfoUpdate(params, () async {
// ...
};
İzin durumunu sıfırla
Uygulamanızı UMP SDK ile test ederken bir kullanıcının ilk yükleme deneyimini simüle edebilmek için SDK'nın durumunu sıfırlamayı yararlı bulabilirsiniz.
SDK, bunun için reset()
yöntemini sunar.
ConsentInformation.instance.reset();