[Android] 1. ConsentManager SDK-integration
Du har nu möjlighet ConsentManager SDK för Android-appar implementerar och tillhandahåller funktionalitet för att informera användaren om dataskydd och fråga och samla in samtycke från användaren. Det gör det möjligt för app-utvecklare att enkelt integrera ConsentManager tjänst i deras app.
Hur det fungerar
- Integrera SDK i appen och konfigurera SDK-inställningarna
- När SDK-enheten är sammankopplad i en app kommer SDK att tillhandahålla funktioner för apputvecklaren för att hämta samtyckesdata
- Så snart appen startar hämtar SDK automatiskt information från ConsentManager servrar för att förbereda SDK för dess användning.
- Det rekommenderas att appen skapar en klassinstans vid start av appen
CMPConsentTool
. När detta har skapats kommer SDK automatiskt att visa samtyckeskärmen vid behov. - När appen vill behandla personuppgifter, bör den "fråga" SDK om samtycke gavs för det specifika syftet och leverantören.
Installation
Förvar på Bitbucket: https://bitbucket.org/consentmanager/android-consentmanager/src/master/
Gradle
Steg 1. Lägg till jitpack-arkivet i din root build.gradle i slutet av arkiv:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Steg 2. Lägg till beroendet till dina appar build.gradle. (För att alltid få den senaste versionen använd +-symbolen för att få de senaste uppdateringarna. Du kan till exempel alltid få de senaste versionerna för mindre uppdateringar genom 1.x.+)
dependencies {
implementation 'org.bitbucket.consentmanager:android-consentmanager:1.5.+'
}
Maven
Steg 1. Lägg till jitpack-arkivet i din build.gradle i slutet av arkiv:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Steg 2. Lägg till beroendet till dina appar build.gradle. (För att alltid få den senaste versionen i maven kan du använda olika metoder för att avböja versionsintervallet. du kan slå upp dem här )
<dependency>
<groupId>org.bitbucket.consentmanager</groupId>
<artifactId>android-consentmanager</artifactId>
<version>1.5.7</version>
</dependency>
Använda biblioteket
behörigheter
Denna SDK kräver följande behörigheter, se till att lägga till dem i din AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Initiera ConsentTool
Med app-start (vanligtvis din viewDidAppear-funktion) måste du skapa en instans av klass CMPConsentTool. Detta hämtar automatiskt nödvändiga data från vår server och avgör om samtycksskärmen måste visas eller inte. Om så är fallet kommer SDK automatiskt att visa samtyckskärmen vid denna tidpunkt, samla in data och tillhandahålla informationen till appen. Instansen kan sedan användas för att få samtyckeuppgifter från SDK för att kunna använda den i appen.
För att initiera ConsentTool, gå till din riktade klass och skapa en instans av CMPConsentTool som visas nedan:
//...
import net.consentmanager.sdk.CMPConsentTool;
//...
public class MainActivity extends AppCompatActivity {
private CMPConsentTool consentTool;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
//..
consentTool = CMPConsentTool.createInstance(this, 123456, "consentmanager.mgr.consensu.org", "MyFavouriteApp", "");
}
//...
}
För att skapa förekomsten av CMPConsentTool måste du konfigurera instansen. Du måste ange CMP-ID, serverdomän, ett appnamn och ett språk. CMP-ID och serverdomän finns i din ConsentManager konto under Meny> Hämta kod. Appnamnet kan användas för att distribuera olika appar i ConsentManager rapportering. För språket kan du antingen använda en tom sträng ("") för automatisk upptäckt eller en två-bokstavs språkkod ("EN", "DE", "FR" och så vidare).
Konfigurationsvärdena kan sättas in på olika sätt:
a) SDK-konfiguration via CMPConfig
Lägg till följande rader i din kod:
val config = CMPConfig.apply {
serverDomain = CMP_DOMAIN
appName = CMP_APP_NAME
language = LANG
id = APP_ID
}
val consentTool = CMPConsentTool.createInstance(this, config);
b) SDK-konfiguration via createInstance()
Lägg till följande rad i din kod:
consentTool = CMPConsentTool.createInstance(this, 1234567, "consentmanager.mgr.consensu.org", "MyFavouriteApp", "EN");
Med SDK
Kontrollera för samtycke
För att kontrollera om en leverantör eller syfte har samtycke kan du använda de två metoderna:
if(consentTool.hasPurposeConsent(this,"52",false))
{
if(consentTool.hasVendorConsent(this,"s26", false))
{
//do something with data
}
}
Båda metoderna hasPurposeConsent
och hasVendorConsent
kräver två parametrar:
- id - Sträng av leverantören eller syfte-ID. Observera att leverantörs-ID: n kan ha olika format ("123", "s123" och "c123"), vänligen dubbelkontrollera med Meny> Leverantörer och Meny> Syften i din ConsentManager konto.
- isIABVendor / isIABPurpose - Om leverantören eller syftet är en leverantör / syfte som följer IAB TCF-standarden, måste du ställa in en sann, annars en falsk.
Kom ihåg: Alla leverantörer som inte tillhör IAB har ID som börjar med "s" eller "c" (t.ex. "s123"); leverantörer som tillhör IAB har ID som inte börjar med "s" eller "c".
Öppna åtkomstskärmen igen
För att låta användaren ändra valen kan du helt enkelt ringa openCmpConsentToolView()
:
consentTool.openCmpConsentToolView(this);
Överlåta samtyckeinformation till andra källor
I vissa fall kan en inbyggd app innehålla webbvisningar för att visa vissa saker som reklam eller innehåll. För att överföra samtyckeinformation från SDK till webbvisningen, använd funktionen:
String consentData = CMPConsentTool.exportCMPData(this);
Detta kommer att exportera samtyckeinformationen och all ytterligare information som behövs av CMP. Du kan sedan skicka den här informationen till CMP som finns i din webbvy genom att lägga till den i URL: en som heter i webbvisningen:
myWebView.loadURL("https://mywebsite.com/....#cmpimport=" + consentData);
Anpassade evenemangslyssnare
För att lägga till ytterligare processlogik kan du använda dig av Event Listeners. Följande evenemangslyssnare är tillgängliga:
Namn |
Förekommer
|
OnOpenCallback |
Lyssnare efter händelse när CMP öppnade |
PåCMPCloseCallback |
Lyssnare för händelse när CMP är stängt |
OnCPMNotOpenedCallback |
Lyssnare för Event när CMP inte behöver öppnas |
Vid feluppringning |
Lyssnare för händelse när det finns ett fel i samtyckeshanteringsprocessen. |
Import/Export samtycke
För att importera eller exportera samtycket kan du använda funktionen exportCMPData(kontextkontext) och importCMPData(Kontextkontext, String cmpData). Kontrollera exemplet nedan:
// Importing consent data if you like
CMPConsentTool.importCMPData(this, "${your consentString}");
// Instantiate CMPConsentTool()
consentTool = CMPConsentTool.createInstance(...)
// ... Your code here ...
// Exporting Consent data
String consentString = CMPConsentTool.exportCMPData(this);
ConsentString du behöver skicka bör vara base64-kodad.
CMP SDK-sekvensdiagram
Delade preferenser
SDK kommer att ställa in de delade preferensvärdena för IAB TCF v1, IAB TCF v2, IAB USPrivacy och Google AC String. Dessa värden kan läsas med följande kod:
Context mContext = getApplicationContext();
SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.OnSharedPreferenceChangeListener mListener;
mListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key.equals([Specific Consent Key])) {
// Update Consent settings
}
}
};
mPreferences.registerOnSharedPreferenceChangeListener(mListener);
Följande nycklar definieras:
IAB TCF v1 | |
IABConsent_CMPPresent |
Boolean : Ställ in på true om en CMP som implementerar denna specifikation finns i applikationen. Ställ in idealiskt av Publisher så snart som möjligt men kan också ställas in av CMP alternativt. |
IABConsent_SubjectToGDPR |
String 1 - (med förbehåll för GDPR), 0 - (inte underlagt GDPR), noll - ej fastställt (standard före initialisering). Justerar med IAB OpenRTB GDPR Advisory. Bestämde mig för att vara String, för att ha den uninitialiserade statusen. |
IABConsent_ConsentString |
String : Samtyckesträng |
IABConsent_ParsedPurposeConsents |
String (av "0" och "1") där karaktären i position N indikerar samtyckesstatusen till syfte ID N enligt definitionen i den globala leverantörslistan. Sträng av medgivande ges för att möjliggöra enkel kontroll. Första karaktär från vänster är syfte 1, ... |
IABConsent_ParsedVendorConsents |
String (av "0" och "1") där tecknet i position N indikerar samtyckesstatus till leverantörs-ID N enligt definitionen i den globala leverantörslistan. Sträng av medgivande ges för att möjliggöra enkel kontroll. Första karaktär från vänster är Vendor 1, ... |
IAB TCF v2 | |
IABTCF_CmpSdkID |
Number : Det osignerade heltal-ID för CMP SDK |
IABTCF_CmpSdkVersion |
Number : Det osignerade heltalversionsnumret för CMP SDK |
IABTCF_PolicyVersion |
Number : Det osignerade heltalet som representerar versionen av TCF som dessa samtycke följer. |
IABTCF_gdprApplies |
Number :
unset - obestämd (standard före initialisering) |
IABTCF_PublisherCC |
String : Två bokstäver ISO 3166-1 alpha-2-kod - Standard: AA (okänd) |
IABTCF_PurposeOneTreatment |
Number :
Återställ standard - Säljare kan använda detta värde för att avgöra om samtycke för ett syfte krävs. |
IABTCF_UseNonStandardStacks |
Number :
|
IABTCF_TCString |
String : Full kodad TC-sträng |
IABTCF_VendorConsents |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - anger samtyckestatus för leverantörs-ID n + 1; false och true respektive. t.ex. '1' vid index 0 är samtycke true för leverantörs-ID 1
|
IABTCF_VendorLegitimateInterests |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - anger den legitima intressestatusen för leverantörs-ID n + 1; false och true respektive. t.ex. '1' vid index 0 är legitimt intresse etablerat true för leverantörs-ID 1
|
IABTCF_PurposeConsents |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - indikerar samtyckesstatus för ID-ändamål n + 1; false och true respektive. t.ex. '1' vid index 0 är samtycke true för ID för ändamål 1
|
IABTCF_PurposeLegitimateInterests |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - anger den legitima intressestatusen för ID n + 1; false och true respektive. t.ex. '1' vid index 0 är legitimt intresse etablerat true för ID för ändamål 1
|
IABTCF_SpecialFeaturesOptIns |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - indikerar opt-in-status för special-ID n + 1; false och true respektive. t.ex. '1' vid index 0 är opt-in true för specialfunktions-ID 1
|
IABTCF_PublisherRestrictions{ID} |
String ['0','1', or '2'] : Värdet vid position n - var nindexering börjar kl 0 - anger utgivarens begränsningstyp (0-2) för leverantören n + 1; (se typer av utgivningsbegränsningar). t.ex. '2' vid index 0 är restriktionstyp 2 för leverantörs-ID 1 . {ID} hänvisar till syftet ID. |
IABTCF_PublisherConsent |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - indikerar statusens godkännandestatus för ID-syftet n + 1 för utgivaren när de motsvarar syftena med Global Vendor List; false och true respektive. t.ex. '1' vid index 0 är samtycke true för ID för ändamål 1
|
IABTCF_PublisherLegitimateInterests |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - anger syftet med legitim ränta för syfte-ID n + 1 för utgivaren när de motsvarar syftena med Global Vendor List; false och true respektive. t.ex. '1' vid index 0 är legitimt intresse etablerat true för ID för ändamål 1
|
IABTCF_PublisherCustomPurposesConsents |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - anger statusens godkännandestatus för utgivarens anpassade syfte-ID n + 1 för förläggaren; false och true respektive. t.ex. '1' vid index 0 är samtycke true för ID för anpassat ändamål 1
|
IABTCF_PublisherCustomPurposesLegitimateInterests |
Binary String : Den '0' or '1' vid position n - var nindexering börjar kl 0 - anger statusen för legitimt intresse för utgivaren för ID: s anpassade ändamål n + 1 för förläggaren; false och true respektive. t.ex. '1' vid index 0 är legitimt intresse etablerat true för ID för anpassat ändamål 1
|
IAB USPrivacy | |
IABUSPrivacy_String |
String : Justerar med IAB OpenRTB CCPA-rådgivning. Strängen kodar alla val och information. |
Google AC-sträng | |
IABTCF_AddtlConsent |
|
(Utfasad) Dynamisk innehållsblockering med platshållare webView
Den här funktionen har fasats ut och kommer att tas bort i framtiden. Anledningen till utfasningen är att med aktivera och inaktivera leverantörs- och ändamåls-API:er finns det inget behov av att skapa en platshållare längre. Du kan lägga till ditt eget användargränssnitt och din egen affärslogik och aktivera och inaktivera leverantörer dynamiskt. Istället för att använda den här funktionen bör du använda enableVendorList() och disableVendorList() funktioner för att hantera vilka leverantörer som är aktiverade eller inaktiverade, och skapa ditt eget användargränssnitt för att visa denna information för användaren.
Platshållaren viewObject kan implementeras för att få funktionen för dynamisk innehållsblockering här.Du kan skapa vyn med följande metod:
CMPPlaceholder placeholderView = CMPConsentTool.createPlaceholder(getApplicationContext(),CMPPlaceholderParams
.ofVendor("${vendorId}"), new CMPPlaceholderEventListener() {
@Override
public void vendorAccepted(WebView view) {
//... Actions to trigger if Consent is accepted
// Like showing Youtube Video View
}
});
Med Wrapper Object CMPPlaceholderParams
du kan också skicka valfria parametrar som anpassade texter eller en valfri förhandsvisningsbild. Byggarfunktionerna kallas setCustomplaceholder(String headline, String mainText, String checkboxText, String buttonText)
och setOptionalImageUrl(String imageUrl)
.
Den nödvändiga affärslogiken, när du vill visa vyn och när den inte behöver appliceras av utvecklaren. Du kan skicka erforderliga villkor och åtgärder genom att använda EvenListener Callbacks från CMPPlaceholderEventlistener
. Följande obligatoriska evenemang måste implementeras:
Nödvändig: vendorAccepted(CMPPlaceholderView view) { // Your logic }
Frivillig: errorOccurred(String message) { // Error handling }