Info
Content

ConsentManager GDPR / CCPA SDK voor iOS

Het ConsentManager SDK voor iOS-apps implementeert en biedt functionaliteit om de gebruiker te informeren over gegevensbescherming en om toestemming van de gebruiker te vragen en te verzamelen. Het stelt app-ontwikkelaars in staat de ConsentManager service in hun app.

Ondersteunde standaarden

Het ConsentManager GDPR / CCPA SDK voor Android ondersteunt de volgende industriestandaarden:

  • IAB TCF v1
  • IAB TCF v2
  • IAB USPrivacy v1
  • ConsentManager aangepaste leveranciers / doeleinden
  • Aanvullende toestemmingsmodus van Google (Google AC-reeks)

Hoe het werkt

  1. Integreer de SDK in de app en configureer de SDK-instellingen
  2. Zodra de SDK is geïntegreerd in een app, biedt de SDK functies voor de app-ontwikkelaar om toestemmingsgegevens op te halen
  3. Zodra de app start, haalt de SDK automatisch informatie op van de ConsentManager servers om de SDK voor te bereiden op het gebruik ervan.
  4. Het wordt aanbevolen dat de app bij het opstarten van de app een klasse-instantie maakt CMPConsentTool. Zodra dit is gemaakt, toont de SDK indien nodig automatisch het toestemmingsscherm.
  5. Wanneer de app persoonlijke gegevens wil verwerken, moet deze de SDK "vragen" of toestemming is gegeven voor het specifieke doel en de leverancier.

Installatie via Cocoapod

Voeg bibliotheek toe met Cocoapod

U kunt de consentmanager SDK door toe te voegen consentmanager naar uw Podfile zoals uitgelegd in het onderstaande voorbeeld:

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

Zodra dit is gebeurd, moet u rennen pod install in uw projectmap om het consentmanager SDK. Open hierna het *.xcworkspace en bouwen. 

Nadat u alle stappen hebt gevolgd, moet uw afhankelijkheid zijn geïnstalleerd en kunt u doorgaan en deze in uw project gebruiken.

Handmatige installatie

We raden sterk aan om de bibliotheek met Cocoapod te installeren en te gebruiken. Zonder dit zal het zowel voor de gebruiker als voor de ontwikkelaar moeilijker te onderhouden zijn. Op deze manier moeten updates handmatig worden geïntegreerd en zijn er enkele problemen met versiebeheer. Daarom zijn we van plan de actieve service voor deze bibliotheek stop te zetten. 

Download de SDK

Download hier de nieuwste versie van de SDK:

XCKader: https://bitbucket.org/consentmanager/consentmanager-xcframework/src/master/

De SDK is geconfigureerd voor iOS versie 10 en hoger.

Integratie

Volg deze stappen om de SDK in uw bestaande project te integreren:

  1. Haal de bestanden uit de map ConsentManager.framework in de hoofdmap van uw app:



  2. Klik op uw project en ga naar het tabblad Algemene en breid het onderdeel eronder uit Frameworks, bibliotheken en embedded content:

     

  3. Klik op als de module nog niet is ingesloten + (Plus)> Andere toevoegen> Bestanden toevoegen ...:

  4. Selecteer het ConsentManager.framework map van dit project en klik op Open:

  5. U zou nu het Framework moeten zien als "Embed & Sign" in de lijst:

  6. Navigeer naar uw Main View Controller van uw app en importeer het framework met behulp van:
    #import <ConsentManager/CmpConsentTool.h>

Start de SDK

Met de app-start (meestal je viewDidAppear-functie) heb je moeten maak een instantie van klasse CMPConsentTool. Dit haalt automatisch de benodigde gegevens van onze server op en bepaalt of het toestemmingsscherm moet worden weergegeven of niet. Als dat het geval is, toont de SDK op dit punt automatisch het toestemmingsscherm, verzamelt de gegevens en verstrekt de gegevens aan de app. De instantie kan vervolgens worden gebruikt om toestemmingsgegevens van de SDK op te halen om deze in de app te gebruiken.

#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

Voorbeeld voor Swift:

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

Houd er rekening mee dat het belangrijk is om de SDK te initialiseren in de didAppear-methode. Anders is de weergave mogelijk niet klaar voor gebruik en mislukt de SDK.

Zorg ervoor dat u de juiste configuratiegegevens gebruikt. De configuratiegegevens vindt u in uw ConsentManager account bij Menu> Code ophalen.

De SDK gebruiken

Om te controleren of een leverancier of doel toestemming heeft, kunt u de twee methoden gebruiken:

if(consentTool!.hasPurposeConsent("52", purposeIsV1orV2: false))
{
    if(consentTool!.hasVendorConsent("s26", purposeIsV1orV2: false))
    {
        //do something with data
    }
}

Beide methoden hasPurposeConsent als hasVendorConsent vereisen twee parameters:

  • id - String van de leverancier of het doel-ID. Houd er rekening mee dat leveranciers-ID's verschillende formaten kunnen hebben ("123", "s123" en "c123"), controleer dit nogmaals met Menu> Leveranciers als Menu> Doeleinden in ConsentManager account.
  • isIABVendor / isIABPurpose - Als de leverancier of het doel een leverancier / doel is die de IAB TCF-standaard volgt, moet u een true instellen, anders een false.

Onthoud: alle leveranciers die niet tot de IAB behoren, hebben ID's die beginnen met een "s" of "c" (bijv. "S123"); leveranciers die tot de IAB behoren, hebben ID's die niet beginnen met een "s" of "c".

Het toestemmingsscherm opnieuw openen

Om de gebruiker in staat te stellen de keuzes te wijzigen, kunt u gewoon bellen openCmpConsentToolView():

consentTool.openCmpConsentToolView();

Snel:

cmpConsentTool!.openView()

In sommige gevallen kan een systeemeigen app webviews bevatten om bepaalde zaken, zoals advertenties of inhoud van advertenties, weer te geven. Gebruik de functie om de toestemmingsinformatie van de SDK naar de webview te verzenden:

consentData = CMPStorageConsentManager.exportCMPData(this);

Dit exporteert de toestemmingsinformatie en alle verdere gegevens die de CMP nodig heeft. Vervolgens kunt u deze informatie doorgeven aan de CMP in uw webview door deze toe te voegen aan de URL die wordt opgeroepen in de webview:

myWebView.loadURL("https://mywebsite.com/....#cmpimport=" + consentData);

Compileren / uploaden naar AppStore

Om de SDK voor de AppStore te compileren, wil je misschien het volgende script gebruiken om de werkdirectory op te schonen:

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-voorkeuren

De SDK wordt ingesteld NSUserDefaults waarden voor IAB TCF v1, IAB TCF v2, IAB USPrivacy en Google AC String.

De volgende sleutels zijn gedefinieerd:

IAB TCF v1  
IABConsent_CMPPresent Boolean: Ingesteld op true als een CMP die deze specificatie implementeert, aanwezig is in de toepassing. Idealiter zo snel mogelijk ingesteld door de uitgever, maar kan ook alternatief worden ingesteld door de CMP.
IABConsent_SubjectToGDPR String 1 - (onderworpen aan GDPR), 0 - (niet onderworpen aan GDPR), Nihil - onbepaald (standaard vóór initialisatie). Komt overeen met IAB OpenRTB GDPR Advisory. Besloten om String te zijn, om de niet-geïnitialiseerde status te hebben.
IABConsent_ConsentString String: Toestemmingsreeks
IABConsent_ParsedPurposeConsents String (van "0" en "1") waarbij het teken op positie N de toestemmingsstatus aangeeft voor doel-ID N zoals gedefinieerd in de Global Vendor List. Toestemming gegeven om eenvoudige controle mogelijk te maken. Eerste karakter van links is Doel 1, ...
IABConsent_ParsedVendorConsents String (van "0" en "1") waarbij het teken op positie N de toestemmingsstatus voor leverancier-ID N aangeeft, zoals gedefinieerd in de algemene leverancierslijst. Toestemming gegeven om eenvoudige controle mogelijk te maken. Eerste karakter van links zijnde Vendor 1, ... 
IAB TCF v2  
IABTCF_CmpSdkID Number: De niet-ondertekende integer-ID van CMP SDK
IABTCF_CmpSdkVersion Number: Het ongetekende versienummer van de CMP SDK
IABTCF_PolicyVersion Number: Het geheel getal zonder teken dat de versie van de TCF vertegenwoordigt waaraan deze toestemmingen voldoen.
IABTCF_gdprApplies Number:

1 GDPR is van toepassing in de huidige context

0 - GDPR doet geen toepassen in de huidige context

ongezet - onbepaald (standaard voor initialisatie)

IABTCF_PublisherCC String: Tweeletterige ISO 3166-1 alfa-2-code - Standaard: AA (onbekend)
IABTCF_PurposeOneTreatment Number:

0 - geen speciale behandeling van doel één

1 - doel één niet bekendgemaakt

Standaard uitschakelen - 0

Leveranciers kunnen deze waarde gebruiken om te bepalen of toestemming voor doel één vereist is.

IABTCF_UseNonStandardStacks Number:

1 - CMP gebruikte een niet-standaard stapel

0 - CMP heeft geen niet-standaard stack gebruikt

IABTCF_TCString String: Volledig gecodeerde TC-string
IABTCF_VendorConsents Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de toestemmingsstatus aan voor Vendor ID n + 1; false als true respectievelijk. bijv. '1' bij index 0 is toestemming true voor leveranciers-ID 1
IABTCF_VendorLegitimateInterests Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de legitieme belangstatus aan voor Vendor ID n + 1; false als true respectievelijk. bijv. '1' bij index 0 is gerechtvaardigd belang gevestigd true voor leveranciers-ID 1
IABTCF_PurposeConsents Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de toestemmingsstatus aan voor doel-ID n + 1; false als true respectievelijk. bijv. '1' bij index 0 is toestemming true voor doel-ID 1
IABTCF_PurposeLegitimateInterests Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de legitieme belangstatus aan voor doel-ID n + 1; false als true respectievelijk. bijv. '1' bij index 0 is gerechtvaardigd belang gevestigd true voor doel-ID 1
IABTCF_SpecialFeaturesOptIns Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de aanmeldingsstatus aan voor speciale functie-ID n + 1; false als true respectievelijk. bijv. '1' bij index 0 is opt-in true voor speciale functie-ID 1
IABTCF_PublisherRestrictions{ID} String ['0','1', or '2']: De waarde op positie n - waar n's indexering begint om 0 - geeft het uitgeversbeperkingstype (0-2) voor leverancier aan n + 1; (zie Typen uitgeversbeperkingen). bijv. '2' bij index 0 is restrictieType 2 voor leveranciers-ID 1. {ID} verwijst naar de doel-ID.
IABTCF_PublisherConsent Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de toestemmingsstatus voor het doel-ID aan n + 1 voor de uitgever, aangezien deze overeenkomen met de doeleinden van de lijst met wereldwijde leveranciers; false als true respectievelijk. bijv. '1' bij index 0 is toestemming true voor doel-ID 1
IABTCF_PublisherLegitimateInterests Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft het doel aan van de legitieme belangstatus voor het doel-ID n + 1 voor de uitgever, aangezien deze overeenkomen met de doeleinden van de lijst met wereldwijde leveranciers; false als true respectievelijk. bijv. '1' bij index 0 is gerechtvaardigd belang gevestigd true voor doel-ID 1
IABTCF_PublisherCustomPurposesConsents Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de toestemmingsstatus van het doel van de aangepaste ID van de uitgever aan n + 1 voor de uitgever; false als true respectievelijk. bijv. '1' bij index 0 is toestemming true voor aangepaste doel-ID 1
IABTCF_PublisherCustomPurposesLegitimateInterests Binary StringDe '0' or '1' op positie n - waar n's indexering begint om 0 - geeft de legitieme belangstatus van het doel aan voor de aangepaste doel-ID van de uitgever n + 1 voor de uitgever; false als true respectievelijk. bijv. '1' bij index 0 is gerechtvaardigd belang gevestigd true voor aangepaste doel-ID 1
IAB US Privacy  
IABUSPrivacy_String String: Komt overeen met IAB OpenRTB CCPA Advisory. De String codeert alle keuzes en informatie.
Google AC-tekenreeks  
IABTCF_AddtlConsent

String: Komt overeen met de technische specificatie Aanvullende toestemmingsmodus van Google. 

API-overzicht

- (ongeldig) openCmpConsentToolView; Toont een modale weergave met de toestemmingswebweergave, zonder de server te vragen of een nieuwe toestemming nodig is. Wanneer de Webview wordt geopend, wordt openListener aangeroepen. Als de Compliance wordt geaccepteerd of afgewezen, wordt een sluitfunctie aangeroepen. U kunt deze functies zelf instellen en ze door of na de initialisatie doorgeven. Als u alleen voor deze aanroep van deze methode een closeListener wilt toevoegen, kunt u deze functie overbelasten met een extra closeListener-functie.
- (void) openCmpConsentToolView: (void (^) (void)) closeListener; Toont een modale weergave met de toestemmingswebweergave, zonder de server te vragen of een nieuwe toestemming nodig is. Wanneer de Webview wordt geopend, wordt openListener aangeroepen. Als de Compliance wordt geaccepteerd of afgewezen, wordt een sluitfunctie aangeroepen. U kunt deze functies zelf instellen en ze door of na de initialisatie doorgeven. Als u alleen voor deze aanroep van deze methode een closeListener wilt toevoegen, kunt u deze functie overbelasten met een extra closeListener-functie. De closeListener is een functie die zonder parameter wordt aangeroepen en geen waarden retourneert. Het wordt asynchroon genoemd.
- (NSString *) getVendorsString;  Als het consentScreen is gesloten, wordt een uitgebreide versie van ConsentString geretourneerd door de logica van consentmanager. De aanvullende Vendor String bevat alle leveranciers die niet door de CMPString worden genoemd. Deze string wordt geretourneerd. Elke leverancier wordt gescheiden door een "_" en heeft een "_" voor zichzelf. "_C23_" zou een geldige VendorsString zijn gegenereerd door ConsentManager. Een lege VendorsString is ofwel null, "" of "__".
- (NSString *) getPurposesString; Als het consentScreen is gesloten, wordt een uitgebreide versie van ConsentString geretourneerd door de logica van consentmanager. De aanvullende Purpose String bevat alle doeleinden die niet door de CMPString worden genoemd. Deze string wordt geretourneerd. Elk doel wordt gescheiden door een "_" en heeft een "_" voor zichzelf. "_P23_" zou een geldige PurposeString zijn gegenereerd door ConsentManager. Een lege PurposeString is ofwel null, "" of "__".
- (NSString *) getUSPrivacyString;  Retourneert de Amerikaanse privacytekenreeks die is geretourneerd door de toestemming van de gebruiker in het CMP ConsentScreen.
- (BOOL) hasVendorConsent: (NSString *) vendorId vendorIsV1orV2: (BOOL) isIABVendor; Retourneert als een bepaalde leverancier de rechten heeft om cookies in te stellen. De parameter vendorIsV1orV2 claimt of de leverancier wordt genoemd door de reguliere IABString, of dat deze is opgenomen in de vendorString gegenereerd door consentmanager.
- (BOOL) hasPurposeConsent: (NSString *) purposeId purposeIsV1ofV2: (BOOL) isIABPurpose; Retourneert als een bepaald doel wordt geaccepteerd. De parameter purposeIsV1orV2 claimt, als het doel wordt genoemd door de reguliere IABString, of als het is opgenomen in de purposeString gegenereerd door consentmanager.
- (BOOL) hasPurposeConsent: (int) purposeId forVendor: (int) vendorId;

Retourneert, als de toestemming voor een doel voor een specifieke leverancier is gegeven. Deze methode geeft alleen een geldig antwoord als de toestemming is gegeven in versie V2.

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController addCloseListener: (void (^) (void)) closeListener;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController addOpenListener: (void (^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: ( ^) (void)) openListener;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addCloseListener: ( ^) (void)) closeListener;

- (id) init: (NSString *) domein addId: (NSString *) userId addAppName: (NSString *) appName addLanguage: (NSString *) taal addViewController: (UIViewController *) viewController autoupdate: (BOOL) autoupdate addOpenListener: ( ^) (void)) openListener addCloseListener: (void (^) (void)) closeListener;

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

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

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

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

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

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

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

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

Maakt een nieuw exemplaar van deze CMPConsentTool.

@ param domain = De domein-URL van consentmanager bijv .: "www.consentmanager.net"

@ param userId = De ID van uw account van consentmanagers webste bijv .: 123

@ param appName = De naam van uw app, bijv .: "Mijn test-app"

@param language = De taal waarin de toestemming moet worden weergegeven, bijvoorbeeld: "de"

@param viewController = De App Main ViewController-instantie

@param autoupdate = Indien ingesteld, zal de app zelf controleren of er nieuwe toestemming nodig is, of de app vanaf de achtergrond wordt geopend.

@param openListener = Deze luisteraar, opgegeven als een functie, wordt asynchroon genoemd kort voordat het CMP-toestemmingsscherm wordt geopend.

@param closeListener = Deze luisteraar zal asynchroon worden genoemd als er toestemming is gegeven door de gebruiker en het CMPConsentScreen is gesloten. Deze luisteraar wordt NIET gebeld als de gebruiker de app sluit zonder toestemming te geven.

@param config = Het Parameters domein, userId, appName, taal in een object van het type CMPConfig.

U kunt de initialisatiefunctie overbelasten, zoals u kunt zien in de volgende constructors:

+ (NSString *) exportCMPData; Exporteert de huidige CMPData String. U kunt deze String eenvoudig op elk ander apparaat importeren met de functie importCMPData.
+ (BOOL) importCMPData: (NSString *) cmpData; Importeert de opgegeven CMPData-tekenreeks. U kunt deze String eenvoudig op elk ander apparaat exporteren met de functie exportCMPData.
- (BOOL) genaamdThisDay;  geeft terug, ongeacht of de CMPConsent Manager Server vandaag is aangevraagd, of het consentmanager server is al gevraagd of het CMP-toestemmingsscherm opnieuw moet worden weergegeven.
- (BOOL) heeft acceptatie nodig;  geeft terug, of de gebruiker toestemming moet geven, omdat hij dit in het verleden niet heeft gedaan, of omdat de toestemmingsserver heeft geretourneerd, dat een nieuwe toestemming vereist is.
+ (ongeldig) reset; reset alle gegevens die zijn ingesteld door de consentCMPTool in de gedeelde voorkeuren.

 

Terug naar boven