GDPR
Zarządzanie zgodami UMP/CMP zgodne z RODO
📖 Przegląd
Moduł GDPR integruje Google User Messaging Platform (UMP) do zarządzania
zgodami użytkowników na przetwarzanie danych i wyświetlanie reklam zgodnie z RODO/GDPR.
⚠️ Wymagane: Skonfiguruj Funding Choices w AdMob Console przed użyciem.
📚 API
requestAndShowIfRequired(activity, isUnderAge, debug?, onFinished)
Pobierz status i pokaż formularz jeśli wymagany.
Parametry:
activity: Activity- Activity do wyświetlenia formularzaisUnderAge: Boolean- Czy użytkownik poniżej wieku zgody (COPPA)debug: DebugConfig?- Opcjonalna konfiguracja debugonFinished: (Result) -> Unit- Callback z wynikiem
showPrivacyOptions(activity, onDismiss)
Pokaż ekran zarządzania zgodami (Privacy Options).
canRequestAds(context): Boolean
Czy można pokazywać reklamy wg UMP.
consentStatus(context): Int
Surowy status z UMP (UNKNOWN, REQUIRED, NOT_REQUIRED, OBTAINED).
isConsentObtained(context): Boolean
Czy zgoda została uzyskana.
isPrivacyOptionsRequired(context): Boolean
Czy UMP wymaga pokazania opcji prywatności.
💡 Użycie
Podstawowe użycie
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Sprawdź i pokaż formularz zgód jeśli wymagany
ADict.GDPR.requestAndShowIfRequired(
activity = this,
isUnderAge = false
) { result ->
if (result.canRequestAds) {
// Można ładować reklamy
loadAds()
} else {
// Brak zgody - pokaż wersję bez reklam
showAdFreeContent()
}
result.error?.let { error ->
Log.e("GDPR", "Error: ${error.message}")
}
}
}
// Przycisk "Zarządzaj prywatnością" w ustawieniach
fun onPrivacySettingsClick() {
ADict.GDPR.showPrivacyOptions(this) { error ->
error?.let {
Toast.makeText(this, "Nie można otworzyć ustawień", Toast.LENGTH_SHORT).show()
}
}
}
}
Debug mode (testowanie)
// Tylko w debug!
if (BuildConfig.DEBUG) {
ADict.GDPR.requestAndShowIfRequired(
activity = this,
isUnderAge = false,
debug = GDPR.DebugConfig(
// Hash urządzenia (z logcat przy pierwszym uruchomieniu)
deviceHashedIds = listOf("ABCDEF0123456789"),
// Wymuś geografię EEA (gdzie GDPR obowiązuje)
forceGeographyEea = true
)
) { result ->
Log.d("GDPR", "Status: ${result.status}, canRequestAds: ${result.canRequestAds}")
}
}
📦 Klasy danych
data class Result
- statusIntStatus consentu (ConsentInformation.ConsentStatus)
- canRequestAdsBooleanCzy można żądać reklam
- errorFormError?Błąd (jeśli wystąpił)
data class DebugConfig
- deviceHashedIdsList<String>Hash ID urządzeń testowych
- forceGeographyEeaBoolean?true=EEA, false=non-EEA, null=auto
🔗 Integracja z reklamami
Pełna integracja
class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 1. Sprawdź GDPR consent
ADict.GDPR.requestAndShowIfRequired(this) { result ->
if (result.canRequestAds) {
// 2. Zainicjalizuj Mobile Ads SDK
MobileAds.initialize(this) {
// 3. Przejdź do głównej aktywności
startMainActivity()
}
} else {
// Przejdź bez reklam
startMainActivity()
}
}
}
}
// W innych miejscach aplikacji
fun shouldShowAds(): Boolean {
return ADict.GDPR.canRequestAds(context) && !isPremiumUser()
}
fun loadBannerAd() {
if (!ADict.GDPR.canRequestAds(context)) {
bannerContainer.visibility = View.GONE
return
}
// Załaduj reklamę...
}