[Android] 0. Migrationsguide
Den här guiden hjälper dig att migrera från den tidigare versionen av CMP SDK till den nuvarande versionen. Vi kommer att täcka ändringar i metodnamn, parametrar och ny eller föråldrad funktionalitet. För exempel på demoappar, kolla denna länk. Det finns två mappar, en med en demo-app helt utvecklad i Java, inklusive ett omslag för Java som heter JavaCMPManager
en annan helt utvecklad i Kotlin.
Var medveten om att den här versionen av CMP SDK byggdes om helt från grunden, och därför representerar den en stor brytande förändring, eftersom alla metoder döptes om, liksom signaturerna, och erbjuder nu återuppringningar till nästan alla metoder. I samtliga fallmåste du ändra din kod och uppdatera dina beroenden för att säkerställa att din mobilapp fungerar som förväntat. Vi också råder dig starkt för att be dina användare att avinstallera och installera om din mobilapp, för att undvika problem med data som finns kvar på enheten.
arkiv
Observera att alla våra arkiv har ändrats för Android SDK. Följ instruktionerna nedan för att ta reda på var du ska peka din beroendehanterare.
Maven
På din Gradle-fil, ersätt den föregående raden med den nedan:
implementation("net.consentmanager.sdkv3:cmsdkv3:3.0.0")
Synkronisera ditt projekt när du har ändrat.
Viktiga migrationspunkter
-
Delegatmönster: Istället för enskilda lyssnare använder den nya versionen ett enda delegatprotokoll (
CMPManagerDelegate
) för att hantera händelser. Den innehåller 4 huvudhändelser:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Detta utlöses när samtyckeslagret stängdes efter att användaren uppdaterat sina samtycken ELLER när man åberopar metoder som orsakar ändringar i samtyckena, som acceptAll, rejectAll, acceptVendors, rejectVendors, etc. Det betyder att användaren accepterade eller avvisade några av alla. av samtyckena och att dessa sparades korrekt i enheten. -
didShowConsentLayer
Detta utlöses när samtyckeslagret faktiskt visades. Det betyder att det inte fanns ett giltigt samtycke i enheten, så ett nytt bör hämtas. -
didCloseConsentLayer
Detta utlöses när SDK:n kontrollerade behovet av ett samtycke, men det behövdes inte och lagret visades inte. Det betyder att det redan finns en giltig i enheten, så en ny är inte nödvändig och tue samtyckeslager kommer inte att visas. -
didReceiveError
Detta utlöses när SDK-operationen har orsakat något fel.
-
- Kompletteringshanterare: Många metoder inkluderar nu kompletteringshanterare för asynkrona operationer. Uppdatera din kod för att hantera dessa återuppringningar på rätt sätt.
-
Samtyckessträng: Använda
exportCMPInfo()
istället förgetConsentString()
för att hämta samtyckesinformationen. - Säljarens samtycke: Metoderna för att få tillstånd från leverantörer och ändamål returnerar nu arrayer av ID:n. Du kan behöva justera din logik för att hantera dessa arrayer.
-
USA:s sekretesssträng: Smakämnen
getUSPrivacyString()
metoden har fasats ut. Om du använde detta för CCPA-efterlevnad, observera att den här metoden inte är tillgänglig längre. -
Kontroll av samtyckeskrav: Använd det nya
checkIfConsentIsRequired(completion:)
metod för att automatiskt avgöra om samtycke behövs innan samtyckesskiktet visas.
Metoder och signaturer ändras
1. initiering
- Old:
CmpManager.initialize(context: Context, cmpConfig: CmpConfig)
- Ny:
CmpManager.createInstance(context: Context, cmpConfig: CmpConfig)
2. Ställ in UI-konfiguration
- Old:
.withCmpViewControllerConfigurationBlock { ... }
- Nytt: Alternativet tillhandahålls inte, men du kan skapa en omslagsaktivitet och kontrollera livscykeln och utseendet i slutet av koden.
3. Kontrollera samtycke
- Old:
check({ ... }, isCached: Bool)
, - Ny:
checkIfConsentIsRequired(completion: (Error?) -> Void)
3. Kontrollera och öppna samtyckeslager vid behov
- Old:
checkAndOpenConsentLayer()
- Ny:
checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
4. Öppna samtyckeslager
- Old:
openConsentLayer()
- Ny:
openConsentLayer(completion: (Result<Unit>) -> Unit)
5. Acceptera alla samtycken
- Old:
acceptAll(callback: ConsentCallback)
- Ny:
cceptAll(completion: (Result<Unit>) -> Unit)
6. Avvisa alla samtycken
- Old:
rejectAll(onFinish: () -> Unit)
- Ny:
rejectAll(completion: (Result<Unit>) -> Unit)
7. Aktivera syften
- Old:
enablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Ny:
acceptPurposes(purposes: List<String>, updatePurpose: Boolean, completion: (Result<Unit>) -> Unit)
8. Inaktivera syften
- Old:
disablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Ny:
rejectPurposes(purposes: List<String>, updateVendor: Boolean, completion: (Result<Unit>) -> Unit)
9. Aktivera leverantörer
- Old:
enableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Ny:
acceptVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
10. Inaktivera leverantörer
- Old:
disableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Ny:
rejectVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
11. Få alla ändamål
- Old:
getAllPurposes(): List<String>
- Ny:
getAllPurposesIDs(): List<String>
12. Aktivera syften
- Old:
getEnabledPurposes(): List<String>
- Ny:
getEnabledPurposesIDs(): List<String>
13. Skaffa alla leverantörer
- Old:
getAllVendors(): List<String>
- Ny:
getAllVendorsIDs(): List<String>
14. Skaffa aktiverade leverantörer
- Old:
getEnabledVendors(): List<String>
- Ny:
getEnabledVendorsIDs(): List<String>
15. Markera syftessamtycke
- Old:
hasPurposeConsent(String): Boolean
- Ny:
hasPurposeConsent(id: String): Boolean
16. Markera leverantörens samtycke
- Old:
hasVendorConsent(String): Boolean
- Ny:
hasVendorConsent(id: String): Boolean
17. Exportera CMP-sträng
- Old:
exportCmpString() : String
- Ny:
exportCMPInfo(): String
18. Importera CMP-sträng
- Old:
importCmpString(consentString: String, completionHandler: ((Error?) -> Unit)?)
- Ny:
importCMPInfo(cmpString: String, completion: (Result<Unit>) -> Unit)
19. Återställ samtyckesdata
- Old:
reset()
- Ny:
resetConsentManagementData(completion: (Result<Unit>) -> Unit)
Föråldrade metoder:
calledThisDay(): Boolean
getConsentstring(): String
getGoogleACString(): String
getUSPrivacyString(): String
initialize(context: Context, cmpConfig: CmpConfig)
setCallbacks(...)
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
Migrationsexempel
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) {
}
}