📖 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 formularza
  • isUnderAge: Boolean - Czy użytkownik poniżej wieku zgody (COPPA)
  • debug: DebugConfig? - Opcjonalna konfiguracja debug
  • onFinished: (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ę...
}