Info
Innehåll

ConsentManager GDPR / CCPA SDK för iOS

Du har nu möjlighet ConsentManager SDK för iOS-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.

Stödda standarder

Du har nu möjlighet ConsentManager GDPR / CCPA SDK för Android stöder följande branschstandarder:

  • IAB TCF v1
  • IAB TCF v2
  • IAB USPrivacy v1
  • ConsentManager anpassade leverantörer / ändamål
  • Googles ytterligare samtyckesläge (Google AC String)

Hur det fungerar

  1. Integrera SDK i appen och konfigurera SDK-inställningarna
  2. När SDK-enheten är sammankopplad i en app kommer SDK att tillhandahålla funktioner för apputvecklaren för att hämta samtyckesdata
  3. Så snart appen startar hämtar SDK automatiskt information från ConsentManager servrar för att förbereda SDK för dess användning.
  4. 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.
  5. När appen vill behandla personuppgifter, bör den "fråga" SDK om samtycke gavs för det specifika syftet och leverantören.

Installation via Cocoapod

Lägg till bibliotek med Cocoapod

Du kan installera consentmanager SDK genom att lägga till consentmanager till din Podfile som förklaras i exemplet nedan:

target 'YourProject' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  pod 'consentmanager'

  target 'YourProjectTests' do
    inherit! :search_paths
     # Pods for testing
  end
  
...
      
end

När detta är klart måste du köra pod install i din projektkatalog för att installera consentmanager SDK. Efter detta, vänligen öppna *.xcworkspace och bygga. 

När du har följt alla steg bör ditt beroende installeras och du kan fortsätta och använda det i ditt projekt.

Manuell installation

Vi rekommenderar starkt att du installerar och använder biblioteket med Cocoapod. Utan det blir det svårare att underhålla för både användaren och utvecklaren. På detta sätt måste uppdateringar integreras manuellt och det finns vissa versionskontrollproblem. Därför planerar vi att stoppa den aktiva tjänsten för detta bibliotek. 

Ladda ner SDK

Ladda ner den senaste versionen av SDK här:

XC -ramverk: https://bitbucket.org/consentmanager/consentmanager-xcframework/src/master/

SDK är konfigurerad för iOS version 10 och högre.

Integration

Följ dessa steg för att integrera SDK: n i ditt befintliga projekt:

  1. Dra filerna från mappen ConsentManager.framework i huvudmappen i din app:



  2. Klicka på ditt projekt och gå till fliken Allmänt och utöka delen under Ramverk, bibliotek och inbäddat innehåll:

     

  3. Om modulen inte är inbäddad ännu, klicka på + (Plus)> Lägg till annat> Lägg till filer ...:

  4. Välj ConsentManager.framework mapp från detta projekt och klicka på Öppen:

  5. Du bör nu se ramverket som "Bädda in & underteckna" i listan:

  6. Navigera till din huvudvykontroller för din app och importera ramverket med hjälp av:
    #import <ConsentManager/CmpConsentTool.h>

Initiera SDK

Med app-start (vanligtvis din viewDidAppear-funktion) du måste skapa en instans av klass CMPConsentTool. Detta hämtar automatiskt nödvändig data från vår server och avgör om samtycksskärmen måste visas eller inte. I så fall 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.

#import "ViewController.h"
#import <ConsentManager/CMPConsentTool.h>

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *GDPRConsentStringLabel;
@end

@implementation ViewController
static CMPConsentTool *cmpConsentTool = nil;

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewDidAppear:(BOOL)animated {
    cmpConsentTool = [[CMPConsentTool alloc] init:@"consentmanager.mgr.consensu.org" addId:@"123456" addAppName:@"my%20Test%20App" addLanguage:@"DE" addViewController:self];
}

- (IBAction)showGDPRConsentTool:(id)sender {
    [cmpConsentTool openCmpConsentToolView];
}
@end

Exempel för Swift:

cmpConsentTool = CMPConsentTool.init("consentmanager.mgr.consensu.org", addId: "123456", addAppName: "my%20test%20app", addLanguage: "DE", add: self)

Observera att det är viktigt att initialisera SDK i metoden didAppear. Annars kanske vyn inte är klar att använda och SDK kan misslyckas.

Se till att använda rätt konfigurationsdata. Konfigurationsdata kan hittas i din ConsentManager konto på Meny> Hämta kod.

Med SDK

För att kontrollera om en leverantör eller syfte har samtycke kan du använda de två metoderna:

if(consentTool!.hasPurposeConsent("52", purposeIsV1orV2: false))
{
    if(consentTool!.hasVendorConsent("s26", purposeIsV1orV2: 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();

Snabb:

cmpConsentTool!.openView()

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:

consentData = CMPStorageConsentManager.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);

Kompilering / uppladdning till AppStore

För att kompilera SDK för AppStore kanske du vill använda följande skript för att rengöra arbetskatalogen:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
FRAMEWORK_NAME="ConsentManager.framework"
# Check if Framework is present.
FRAMEWORK_LOCATION=$(find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d)
if [ -z $FRAMEWORK_LOCATION ]; then
echo "Couldn't find ConsentManager.framework in $APP_PATH. Make sure 'Embed Frameworks' build phase is listed before the 'Strip Unused Architectures' build phase."
exit 1
fi
# This script strips unused architectures
find "$APP_PATH" -name "$FRAMEWORK_NAME" -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done

NSUserDefaults-inställningar

SDK kommer att ställas in NSUserDefaults värden för IAB TCF v1, IAB TCF v2, IAB USPrivacy och Google AC String.

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:

1 GDPR gäller i nuvarande sammanhang

0 - GDPR gör det inte tillämpas i nuvarande sammanhang

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:

0 - ingen speciell behandling av ett syfte

1 - ett syfte som inte avslöjas

Återställ standard - 0

Säljare kan använda detta värde för att avgöra om samtycke för ett syfte krävs.

IABTCF_UseNonStandardStacks Number:

1 - CMP använde en icke-standard stack

0 - CMP använde inte en icke-standard stack

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

String: Stämmer överens med Googles tekniska specifikation för ytterligare godkännande. 

API-översikt

- (ogiltigt) openCmpConsentToolView; Visar en modalvy med webbsidan för samtycke, utan att fråga servern, om ett nytt samtycke behövs. När Webview öppnas kommer openListener att ringas. Om överensstämmelsen accepteras eller avvisas kommer en nära funktion att kallas. Du kan ställa in dessa funktioner på egen hand och antingen gå vidare efter eller efter initaliseringen. Om du vill lägga till en closeListener bara för detta samtal med den här metoden, kan du överbelasta denna funktion med en extra closeListener-funktion.
- (void) openCmpConsentToolView: (void (^) (void)) closeListener; Visar en modalvy med webbsidan för samtycke, utan att fråga servern, om ett nytt samtycke behövs. När Webview öppnas kommer openListener att ringas. Om överensstämmelsen accepteras eller avvisas kommer en nära funktion att kallas. Du kan ställa in dessa funktioner på egen hand och antingen gå vidare efter eller efter initaliseringen. Om du vill lägga till en closeListener bara för detta samtal med den här metoden, kan du överbelasta denna funktion med en extra closeListener-funktion. CloseListener är en funktion som kallas utan parameter och returnerar inga värden. Det kommer att kallas asynkron.
- (NSString *) getVendorsString;  Om samtyckeSkärmen är stängd returneras en utökad version av ConsentString med logiken till consentmanager. Den extra leverantörssträngen innehåller alla leverantörer som inte nämns av CMPString. Den här strängen kommer att returneras. Varje leverantör är åtskild med en "_" och kommer att ha en "_" före sig själv. “_C23_” skulle vara en giltig VendorsString genererad av ConsentManager. En tom VendorsString är antingen null, “” eller “__”.
- (NSString *) getPurposesString; Om samtyckeSkärmen är stängd returneras en utökad version av ConsentString med logiken till consentmanager. Den extra strängen för syften innehåller alla syften som inte nämns av CMPString. Den här strängen kommer att returneras. Varje syfte separeras av en "_" och kommer att ha en "_" före sig själv. "_P23_" skulle vara en giltig PurposeString genererad av ConsentManager. En tom PurposeString är antingen null, “” eller “__”.
- (NSString *) getUSPrivacyString;  Returnerar USA: s sekretesssträng, som returnerades av användarens samtycke i CMP ConsentScreen.
- (BOOL) hasVendorConsent: (NSString *) vendorId vendorIsV1orV2: (BOOL) isIABVendor; Returnerar om en viss leverantör har rätten att ställa in cookies. Parametern vendorIsV1orV2 påstår, om leverantören nämns av den vanliga IABString, eller om den finns i vendorString genererad av consentmanager.
- (BOOL) hasPurposeConsent: (NSString *) purposeId purposeIsV1orV2: (BOOL) isIAB Purpose; Returnerar om en given Purposeis accepteras. Parametern purposeIsV1orV2 påstår, om syftet nämns av den vanliga IABString, eller om det finns i purposeString som genereras av consentmanager.
- (BOOL) hasPurposeConsent: (int) purposeId forVendor: (int) vendorId;

Returnerar om samtycke för ett syfte för en specifik leverantör gavs. Denna metod ger endast ett giltigt svar om samtycket gavs i versionen V2.

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController addOpenListener: (void (^) (void) openListener;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController addCloseListener: (void (^) (void) closeListener;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController addOpenListener: (void (^) (void) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListen: ^) (void)) openListener;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addCloseLister: ^) (void)) closeListener;

- (id) init: (NSString *) domain addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) språk addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListen: ^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: (void (^) (void)) openListener;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addCloseListener: (void (^) (void)) closeListener;

- (id) init: (CMPConfig *) config medViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: (void (^) (void)) openListener addCloseListener: (void (^) (void)) closeListen;

Skapar en ny instans av denna CMPConsentTool.

@ param domain = Domänens URL till consentmanager t.ex.: "www.consentmanager. Net"

@ param userId = ID för ditt konto från consentmanagers webste t.ex., 123

@ param appName = Namnet på din app t.ex.: "Min testapp"

@param language = Det språk som godkännandet ska visas i t.ex.: "de"

@param viewController = Appens huvud ViewController-instans

@param autoupdate = Om inställningen kommer appen att kontrollera av sig själv, om ett nytt godkännande behövs, om appen kommer att öppnas från bakgrunden.

@param openListener = Den här lyssnaren som ges som en funktion kommer att kallas asynkron kort innan CMP-samtyckeskärmen öppnas.

@param closeListener = Den här lyssnaren kommer att kallas asynkron, om ett godkännande gavs av användaren och CMPConsentScreen stängdes. Den här lyssnaren kallas INTE om användaren stänger appen utan att ge ett samtycke.

@param config = Parametersdomänen, userId, appName, språk i ett objekt av typ CMPConfig.

Du kan överbelasta initialiseringsfunktionen, som du kan se i följande konstruktörer:

+ (NSString *) exportCMPData; Exporterar den aktuella CMPData-strängen. Du kan enkelt importera den här strängen på vilken annan enhet som helst med funktionen importCMPData.
+ (BOOL) importCMPData: (NSString *) cmpData; Importerar den givna CMPData-strängen. Du kan enkelt exportera den här strängen på vilken annan enhet som helst med funktionen exportCMPData.
- (BOOL) calledThisDay;  returnerar, oavsett om CMPConsent Manager Server begärdes idag eller consentmanager servern frågades redan om CMP-godkännandeskärmen måste visas igen.
- (BOOL) needsAcceptance;  returnerar, oavsett om användaren måste ge ett samtycke, orsaka att han inte gjorde det tidigare eller för att samtycksservern returnerade, att ett nytt samtycke krävs.
+ (Void) återställning; återställer alla uppgifter som inställts av godkännandetCMPTool i de delade inställningarna.

 

Tillbaka till toppen