informatie
Beschrijving

[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

  1. Delegatiepatroon: In plaats van individuele luisteraars gebruikt de nieuwe versie een enkel gedelegeerd protocol (CMPManagerDelegate) voor het afhandelen van gebeurtenissen. Het bevat 4 hoofdgebeurtenissen:
    1. 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.
    2. 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.
    3. 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.
    4. didReceiveError
      Dit wordt geactiveerd wanneer de SDK-bewerking een fout heeft gegenereerd.
  2. Voltooiingshandlers: Veel methoden bevatten nu completion handlers voor asynchrone bewerkingen. Werk uw code bij om deze callbacks op de juiste manier te verwerken.
  3. Toestemmingsstring: Te gebruiken exportCMPInfo() in plaats van getConsentString() om de toestemmingsinformatie op te halen.
  4. 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.
  5. 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.
  6. 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)
  • 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)
  • 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) {

    }
}

 

Terug naar boven