Denna guide hjälper dig att migrera från den tidigare versionen av CMP SDK till den aktuella versionen. Vi går igenom ändringarna i metodnamn, parametrar samt nya eller utfasade funktioner. För exempel på demoappar, vänligen klicka på denna länk. Det finns två mappar, en med en demoapp helt utvecklad i Java, inklusive ett Java-wrapper som heter JavaCMPManager en annan helt utvecklad i Kotlin.
Observera att denna version av CMP SDK har byggts om helt från grunden, vilket innebär en betydande förändring, eftersom alla metoder har bytt namn, liksom signaturerna, och nu erbjuder återkopplingar till nästan alla metoder. I alla fall måste du ändra din kod och uppdatera dina beroenden för att säkerställa att din mobilapp fungerar som förväntat. Dessutom är det värt att nämna att alla data som lagrats av den tidigare versionen av vårt SDK på användarnas enheter kommer att raderas, vilket tvingar appen att visa samtyckeslagret igen.
Arkiv
Observera att alla våra arkiv har ändrats för Android SDK. Följ instruktionerna nedan för att ta reda på vart du ska peka din beroendehanterare.
Maven
I din Gradle-fil ersätter du den föregående raden med den nedan:
implementation("net.consentmanager.sdkv3:cmsdkv3:3.2.0")
Synkronisera ditt projekt efter ändringen.
Viktiga punkter vid migrering
-
Delegatmönster: Istället för enskilda lyssnare använder den nya versionen ett enda delegatprotokoll (
CMPManagerDelegate) för hantering av händelser. Den innehåller fyra huvudhändelser:-
didReceiveConsent(consent: String, jsonObject: Map<String, Any>)
Detta utlöses när samtyckeslagret stängdes efter att användaren uppdaterat sina samtycken ELLER när metoder anropas som orsakar ändringar i samtyckena, som acceptAll, rejectAll, acceptVendors, rejectVendors osv. Det innebär att användaren har godkänt eller avvisat vissa eller alla samtycken, och att dessa har sparats korrekt på enheten. -
didShowConsentLayer
Detta utlöses när samtyckeslagret faktiskt visades. Det innebär att det inte fanns något giltigt samtycke i enheten, så ett nytt bör samlas in. -
didCloseConsentLayer
Detta utlöses när SDK kontrollerade behovet av ett samtycke, men det behövdes inte och lagret visades inte. Det betyder att det redan finns ett giltigt samtycke i enheten, så ett nytt är inte nödvändigt och samtyckeslagret kommer inte att visas. -
didReceiveError
Detta utlöses när SDK-operationen har genererat ett fel.
-
- Kompletteringshanterare: Många metoder inkluderar nu kompletteringshanterare för asynkrona operationer. Uppdatera din kod för att hantera dessa återanrop på rätt sätt.
-
Samtyckestexten: Använd
exportCMPInfo()istället förgetConsentString()för att hämta samtyckesinformationen. - Samtycke från leverantör och ändamål: Metoderna för att få samtycke från leverantör och ändamål returnerar nu ID-matriser. Du kan behöva justera din logik för att hantera dessa matriser.
-
US Privacy String:
getUSPrivacyString()metoden har fasats ut. Om du använde den för att uppfylla CCPA-kraven, vänligen notera att den här metoden inte längre är tillgänglig. -
Kontroll av samtyckeskrav: Använd den nya
checkAndOpen(completion:)metoden för att automatiskt avgöra om samtycke krävs innan du visar samtyckeslagret.
Ändringar av metoder och signaturer
Initialisering
- Gammalt:
CmpManager.initialize(context: Context, cmpConfig: CmpConfig) - Nytt:
CmpManager.createInstance(context: Context, cmpConfig: CmpConfig)
Ställ in UI-konfiguration
- Gammalt:
.withCmpViewControllerConfigurationBlock { ... } - Nytt: Alternativet finns inte, men du kan skapa en wrapper-aktivitet och styra livscykeln och utseendet på din sida av koden.
Kontroll av samtycke
- Gammalt:
check({ ... }, isCached: Bool), - Nytt:
checkAndOpen(completion: (Error?) -> Void)
Kontrollera och öppna samtyckeslagret vid behov
- Old:
checkAndOpenConsentLayer() - Nytt:
checkAndOpen(completion: (Error?) -> Void)
Öppet samtyckeslager
- Gammalt:
openConsentLayer() - Nytt:
forceOpen(completion: (Result<Unit>) -> Unit)
Acceptera alla samtycken
- Gammalt:
acceptAll(callback: ConsentCallback) - Nytt:
cceptAll(completion: (Result<Unit>) -> Unit)
Avvisa alla samtycken
- Gammalt:
rejectAll(onFinish: () -> Unit) - Nytt:
rejectAll(completion: (Result<Unit>) -> Unit)
Aktivera syften
- Gammalt:
enablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?) - Nytt:
acceptPurposes(purposes: List<String>, updatePurpose: Boolean, completion: (Result<Unit>) -> Unit)
Inaktivera syften
- Gammalt:
disablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?) - Nytt:
rejectPurposes(purposes: List<String>, updateVendor: Boolean, completion: (Result<Unit>) -> Unit)
Aktivera leverantörer
- Gammalt:
enableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?) - Nytt:
acceptVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
Inaktivera leverantörer
- Gammalt:
disableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?) - Nytt:
rejectVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
Få alla syften
- Gammalt:
getAllPurposes(): List<String> - Nytt:
getAllPurposesIDs(): List<String>
Aktivera syften
- Gammalt:
getEnabledPurposes(): List<String> - Nytt:
getUserStatus(): UserConsentStatus
Hämta alla leverantörer
- Gammalt:
getAllVendors(): List<String> - Nytt:
getUserStatus(): UserConsentStatus
Bli godkänd leverantör
- Gammalt:
getEnabledVendors(): List<String> - Nytt:
getUserStatus(): UserConsentStatus
Kontrollera syfte och samtycke
- Gammalt:
hasPurposeConsent(String): Boolean - Nytt:
getStatusForPurpose(id: String): ConsentStatus
Kontrollera leverantörens samtycke
- Gammalt:
hasVendorConsent(String): Boolean - Nytt:
getStatusForVendor(id: String): ConsentStatus
Exportera CMP-sträng
- Gammalt:
exportCmpString() : String - Nytt:
exportCMPInfo(): String
Importera CMP-sträng
- Gammalt:
importCmpString(consentString: String, completionHandler: ((Error?) -> Unit)?) - Nytt:
importCMPInfo(cmpString: String, completion: (Result<Unit>) -> Unit)
Återställ samtyckesdata
- Gammalt:
reset() - Nytt:
resetConsentManagementData(completion: (Result<Unit>) -> Unit)
Hantera status för Googles samtyckesläge
- Gammalt:
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface) - New:
getGoogleConsentModeStatus
Hantera onLinkClick-callback
- Gammalt: v2 hade tidigare en vitlista-funktion. I den aktuella versionen har processen förenklats och användaren har full kontroll över beteendet som ska följas enligt den URL som returneras från metoden.
cmpConfig.domainWhitelist = ["add your domains to be whitelisted"]
cmpManager.withOnCmpLinkClickListener({ url, decisionHandler in
//check URL and add the nav action
decisionHandler!.pointee = WKNavigationActionPolicy.allow
decisionHandler!.pointee = WKNavigationActionPolicy.cancel
// return shouldCloseWebView (true) or stay open (false)
return true
})
- Nytt: Användaren har full kontroll över vilket beteende som ska följas beroende på URL:en. Därför bör de tidigare vitlistade URL:erna flyttas in i callback-metoden,
cmpManager.setOnClickLinkCallback { url ->
if (url.contains("google.com")) {
// Open Google URLs in external browser
try {
startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
true // Return true to indicate we handled the URL
} catch (e: Exception) {
Log.e("DemoApp", "Error opening URL: $url", e)
false
}
} else {
// Let other URLs load in the WebView
false
}
}
Föråldrade metoder:
checkIfConsentIsRequired(completion: @escaping (Bool) -> Void)-
hasUserChoice() -> Bool -
hasPurposeConsent(id: String) -> Bool -
hasVendorConsent(id: String) -> Bool -
openConsentLayer(completion: @escaping (NSError?) -> Void) -
getAllPurposesIDs() -> [String] -
getEnabledPurposesIDs() -> [String] -
getDisabledPurposesIDs() -> [String] -
getAllVendorsIDs() -> [String] -
getEnabledVendorsIDs() -> [String] -
getDisabledVendorsIDs() -> [String] getUSPrivacyString()calledThisDay(): BooleangetConsentstring(): StringgetGoogleACString(): StringgetUSPrivacyString(): Stringinitialize(context: Context, cmpConfig: CmpConfig)setCallbacks(...)withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
Exempel på migrering
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)
checkAndOpen()
}
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: Map<String, Any>) {
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.checkAndOpen(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 Map<String, Any> 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) {
}
}