[Android] 0. Migratiegids
Deze gids helpt u bij het migreren van de vorige versie van de CMP SDK naar de huidige versie. We behandelen de wijzigingen in methodenamen, parameters en nieuwe of verouderde functionaliteit. Voor voorbeelden van demo-apps, kijk deze link. Er zijn twee mappen, één met een Demo App die volledig in Java is ontwikkeld, inclusief een wrapper voor Java genaamd JavaCMPManager
een andere volledig ontwikkeld in Kotlin.
Houd er rekening mee dat deze versie van de CMP SDK volledig opnieuw is opgebouwd en daarom een grote ingrijpende verandering, aangezien alle methoden een nieuwe naam kregen, evenals de handtekeningen, en nu callbacks voor bijna alle methoden worden aangeboden. In alle gevallen, moet u uw code aanpassen en uw afhankelijkheden bijwerken om ervoor te zorgen dat uw mobiele app werkt zoals verwacht. We hebben ook Ik raad u ten zeerste aan om uw gebruikers te vragen uw mobiele app te verwijderen en opnieuw te installeren, om problemen met de opgeslagen gegevens op het apparaat te voorkomen.
Vindplaatsen
Houd er rekening mee dat al onze repositories zijn gewijzigd voor de Android SDK. Volg onderstaande instructies om erachter te komen waar u uw dependency manager naartoe moet verwijzen.
Maven
Vervang in uw Gradle-bestand de vorige regel door de onderstaande regel:
implementation("net.consentmanager.sdkv3:cmsdkv3:3.0.0")
Synchroniseer uw project nadat u de wijziging hebt doorgevoerd.
Belangrijkste migratiepunten
-
Delegatiepatroon: In plaats van individuele luisteraars gebruikt de nieuwe versie een enkel gedelegeerd protocol (
CMPManagerDelegate
) voor het afhandelen van gebeurtenissen. Het bevat 4 hoofdgebeurtenissen:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Dit wordt geactiveerd wanneer de toestemmingslaag is gesloten nadat de gebruiker zijn/haar toestemmingen heeft bijgewerkt OF wanneer methoden worden aangeroepen die wijzigingen in de toestemmingen veroorzaken, zoals acceptAll, rejectAll, acceptVendors, rejectVendors, enz. Dit betekent dat de gebruiker een deel van alle toestemmingen heeft geaccepteerd of afgewezen en dat deze correct zijn opgeslagen op het apparaat. -
didShowConsentLayer
Dit wordt geactiveerd wanneer de toestemmingslaag daadwerkelijk is weergegeven. Het betekent dat er geen toestemming geldig was in het apparaat, dus er moet een nieuwe worden verzameld. -
didCloseConsentLayer
Dit wordt geactiveerd wanneer de SDK de noodzaak van een toestemming heeft gecontroleerd, maar deze niet nodig was en de laag niet werd weergegeven. Dit betekent dat er al een geldige in het apparaat is, dus een nieuwe is niet nodig en de toestemmingslaag wordt niet weergegeven. -
didReceiveError
Dit wordt geactiveerd wanneer de SDK-bewerking een fout heeft gegenereerd.
-
- Voltooiingshandlers: Veel methoden bevatten nu completion handlers voor asynchrone bewerkingen. Werk uw code bij om deze callbacks op de juiste manier te verwerken.
-
Toestemmingsstring: Te gebruiken
exportCMPInfo()
in plaats vangetConsentString()
om de toestemmingsinformatie op te halen. - Toestemmingen van leveranciers en doeleinden: De methoden om toestemmingen van leveranciers en doelen te verkrijgen, retourneren nu arrays van ID's. Mogelijk moet u uw logica aanpassen om deze arrays te verwerken.
-
Amerikaanse privacystring: De
getUSPrivacyString()
methode is verouderd. Als u deze gebruikte voor CCPA-naleving, houd er dan rekening mee dat deze methode niet meer beschikbaar is. -
Controle op toestemmingsvereiste: Gebruik de nieuwe
checkIfConsentIsRequired(completion:)
Methode om automatisch te bepalen of toestemming nodig is voordat de toestemmingslaag wordt weergegeven.
Wijzigingen in methoden en handtekeningen
1. Initialisatie
- Oud:
CmpManager.initialize(context: Context, cmpConfig: CmpConfig)
- Nieuw:
CmpManager.createInstance(context: Context, cmpConfig: CmpConfig)
2. UI-configuratie instellen
- Oud:
.withCmpViewControllerConfigurationBlock { ... }
- Nieuw: Deze optie is niet beschikbaar, maar u kunt een wrapperactiviteit maken en de levenscyclus en het uiterlijk aan uw kant van de code bepalen.
3. Toestemming controleren
- Oud:
check({ ... }, isCached: Bool)
, - Nieuw:
checkIfConsentIsRequired(completion: (Error?) -> Void)
3. Controleren en indien nodig de toestemmingslaag openen
- Oud:
checkAndOpenConsentLayer()
- Nieuw:
checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
4. Open toestemmingslaag
- Oud:
openConsentLayer()
- Nieuw:
openConsentLayer(completion: (Result<Unit>) -> Unit)
5. Accepteer alle toestemmingen
- Oud:
acceptAll(callback: ConsentCallback)
- Nieuw:
cceptAll(completion: (Result<Unit>) -> Unit)
6. Alle toestemmingen afwijzen
- Oud:
rejectAll(onFinish: () -> Unit)
- Nieuw:
rejectAll(completion: (Result<Unit>) -> Unit)
7. Doeleinden inschakelen
- Oud:
enablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nieuw:
acceptPurposes(purposes: List<String>, updatePurpose: Boolean, completion: (Result<Unit>) -> Unit)
8. Doeleinden uitschakelen
- Oud:
disablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nieuw:
rejectPurposes(purposes: List<String>, updateVendor: Boolean, completion: (Result<Unit>) -> Unit)
9. Leveranciers inschakelen
- Oud:
enableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nieuw:
acceptVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
10. Leveranciers uitschakelen
- Oud:
disableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nieuw:
rejectVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
11. Krijg alle doeleinden
- Oud:
getAllPurposes(): List<String>
- Nieuw:
getAllPurposesIDs(): List<String>
12. Doeleinden inschakelen
- Oud:
getEnabledPurposes(): List<String>
- Nieuw:
getEnabledPurposesIDs(): List<String>
13. Verzamel alle leveranciers
- Oud:
getAllVendors(): List<String>
- Nieuw:
getAllVendorsIDs(): List<String>
14. Krijg ingeschakelde leveranciers
- Oud:
getEnabledVendors(): List<String>
- Nieuw:
getEnabledVendorsIDs(): List<String>
15. Controleer het doel van de toestemming
- Oud:
hasPurposeConsent(String): Boolean
- Nieuw:
hasPurposeConsent(id: String): Boolean
16. Controleer de toestemming van de leverancier
- Oud:
hasVendorConsent(String): Boolean
- Nieuw:
hasVendorConsent(id: String): Boolean
17. Exporteer CMP-string
- Oud:
exportCmpString() : String
- Nieuw:
exportCMPInfo(): String
18. Importeer CMP-string
- Oud:
importCmpString(consentString: String, completionHandler: ((Error?) -> Unit)?)
- Nieuw:
importCMPInfo(cmpString: String, completion: (Result<Unit>) -> Unit)
19. Toestemmingsgegevens opnieuw instellen
- Oud:
reset()
- Nieuw:
resetConsentManagementData(completion: (Result<Unit>) -> Unit)
Verouderde methoden:
calledThisDay(): Boolean
getConsentstring(): String
getGoogleACString(): String
getUSPrivacyString(): String
initialize(context: Context, cmpConfig: CmpConfig)
setCallbacks(...)
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
Migratievoorbeelden
Kotlin
// ============================================
// Previous versions
// ============================================
class CmpDemoActivity : FragmentActivity() {
private lateinit var cmpManager: CmpManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val config = CmpConfig.apply {
id = "<YOUR-CONSENTMANAGER-APP-ID>" // example: b238acdf1a
domain = "<YOUR-CONSENTMANAGER-APP-DOMAIN>" // example: delivery.consentmanager.net
appName = "<YOUR-CONSENTMANAGER-APP-NAME>" // example: testApp
language = "<YOUR-CONSENTMANAGER-APP-LANGUAGE>" // example: DE
}
cmpManager = CmpManager.createInstance(this, config)
cmpManager.initialize(this)
}
}
// ============================================
// SDK v3 implementation
// ============================================
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
val urlConfig = UrlConfig(
id = "09cb5dca91e6b",
domain = "delivery.consentmanager.net",
language = "EN",
appName = "CMDemoAppKotlin"
)
// This UI Config for Android is limited, but you have the option to create an activity wrapper
// to have full control over the appearance and the position
val webViewConfig = ConsentLayerUIConfig(
position = ConsentLayerUIConfig.Position.FULL_SCREEN, // that's the only position available for Android
backgroundStyle = ConsentLayerUIConfig.BackgroundStyle.dimmed(Color.BLACK, 0.5f),
cornerRadius = 10f,
respectsSafeArea = true,
isCancelable = false
)
cmpManager = CMPManager.getInstance(
context = this,
urlConfig = urlConfig,
webViewConfig = webViewConfig,
delegate = this
)
cmpManager.setActivity(this)
checkAndOpenConsentLayer()
}
private fun checkAndOpenConsentLayer() {
cmpManager.checkWithServerAndOpenIfNecessary { result ->
result.onSuccess {
showCMPDemoScreen()
}.onFailure { error ->
Log.e("DemoApp", "Check and open consent layer failed with error: $error")
}
}
}
private fun showCMPDemoScreen() {
setContent {
MaterialTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
CMPDemoScreen(cmpManager)
}
}
}
}
override fun onConfigurationChanged(newConfig: Configuration) {
Log.d("CMP DemoApp", "Configuration changed")
super.onConfigurationChanged(newConfig)
cmpManager.onApplicationResume()
}
override fun onPause() {
Log.d("CMP DemoApp", "Activity paused")
super.onPause()
cmpManager.onApplicationPause()
}
override fun onDestroy() {
Log.d("CMP DemoApp", "Activity destroyed")
super.onDestroy()
cmpManager.onActivityDestroyed()
}
override fun didReceiveConsent(consent: String, jsonObject: JsonObject) {
Log.d("CMP DemoApp", "Consent Layer successfully received consent message.")
runOnUiThread {
showCMPDemoScreen()
}
}
override fun didShowConsentLayer() {
Log.d("CMP DemoApp", "Consent Layer open message received.")
}
override fun didCloseConsentLayer() {
Log.d("CMP DemoApp", "Consent Layer close message received.")
runOnUiThread {
showCMPDemoScreen()
}
}
override fun didReceiveError(error: String) {
Log.e("CMP DemoApp", "SDK error: $error")
}
}
Java
// ===================================================
// Previuous versions
// ===================================================
public class CmpDemoActivity extends AppCompatActivity {
private CmpManager cmpManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CmpConfig cmpConfig = CmpConfig.INSTANCE;
cmpConfig.setId("<YOUR-CONSENTMANAGER-APP-ID>"); // example: a000aaaa1a
cmpConfig.setDomain("<YOUR-CONSENTMANAGER-APP-DOMAIN>"); // example: delivery.consentmanager.net
cmpConfig.setAppName("<YOUR-CONSENTMANAGER-APP-NAME>"); // example: testApp
cmpConfig.setLanguage("<YOUR-CONSENTMANAGER-APP-LANGUAGE>"); // example: EN
cmpConfig.setTimeout(4000);
cmpManager = CmpManager.createInstance(this, cmpConfig);
cmpManager.initialize(this)
}
}
// ===========================================
// SDK v3 implementation
// ===========================================
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cmp_demo);
UrlConfig urlConfig = new UrlConfig(
"09cb5dca91e6b",
"delivery.consentmanager.net",
"EN",
"CMDemoAppJava"
);
// This UI Config for Android is limited, but you have the option to create an activity wrapper
// to have full control over the appearance and the position
ConsentLayerUIConfig webViewConfig = new ConsentLayerUIConfig(
ConsentLayerUIConfig.Position.FULL_SCREEN,
ConsentLayerUIConfig.BackgroundStyle.dimmed(Color.BLACK, 0.5f),
10f,
true,
false
);
JavaCMPManager cmpManager = JavaCMPManager.getInstance(this, urlConfig, webViewConfig, this);
cmpManager.setActivity(this);
cmpManager.checkWithServerAndOpenIfNecessary(result -> {
if (result.isSuccess()) {
} else {
Log.e("JavaDemoAp", "Initialize method failed with error: " + result.exceptionOrNull());
}
return null;
});
}
private void showCMPDemoScreen() {
Intent intent = new Intent(this, CMPDemoActivity.class);
startActivity(intent);
finish();
}
@Override
public void didShowConsentLayer() {
Log.d("CMP JavaDemoAp", "Consent Layer open message received.");
}
@Override
public void didCloseConsentLayer() {
Log.d("CMP JavaDemoAp", "Consent Layer close message received.");
}
@Override
public void didReceiveError(@NonNull String error) {
Log.e("CMP JavaDemoAp", "SDK error: " + error);
}
@Override
public void didReceiveConsent(@NonNull String consent, @NonNull JsonObject jsonObject) {
Log.d("CMP JavaDemoAp", "Consent received: " + consent);
runOnUiThread(this::showCMPDemoScreen);
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
super.onPointerCaptureChanged(hasCapture);
}
@Override
public void addMenuProvider(@NonNull MenuProvider provider, @NonNull LifecycleOwner owner, @NonNull Lifecycle.State state) {
}
}