Informacia
Treść

ConsentManager SDK RODO/CCPA dla iOS

W ramach projektu ConsentManager SDK dla aplikacji na iOS implementuje i zapewnia funkcjonalność informowania użytkownika o ochronie danych oraz pytania i zbierania zgody od użytkownika. Umożliwia programistom aplikacji łatwą integrację ConsentManager usługi do swojej aplikacji.

Obsługiwane standardy

W ramach projektu ConsentManager SDK RODO/CCPA dla systemu Android obsługuje następujące standardy branżowe:

  • IAB TCF v1
  • IAB TCF v2
  • IAB USPrivacy v1
  • ConsentManager niestandardowi dostawcy/cele
  • Tryb dodatkowej zgody Google (ciąg Google AC)

Cmp-Sdk-Screen-Shot---home.pngCmp-Sdk-Screen-Shot---settings.png

Jak to działa?

  1. Zintegruj SDK z aplikacją i skonfiguruj ustawienia SDK
  2. Gdy SDK zostanie zintegrowany z aplikacją, SDK udostępni funkcje dla programisty aplikacji w celu pobrania danych dotyczących zgody
  3. Gdy tylko aplikacja się uruchomi, SDK automatycznie pobierze informacje z ConsentManager serwery w celu przygotowania SDK do jego użycia.
  4. Zaleca się, aby przy starcie aplikacji tworzyła instancję klasy CMPConsentTool. Po utworzeniu SDK automatycznie wyświetli ekran zgody, jeśli to konieczne.
  5. Gdy aplikacja chce przetwarzać dane osobowe, powinna „zapytać” SDK, czy została wyrażona zgoda na konkretny cel i dostawcę.

Instalacja przez Cocoapod

Dodaj bibliotekę za pomocą Cocoapod

Możesz zainstalować consentmanager SDK przez dodanie consentmanager do twojego pliku Podfile, jak wyjaśniono w poniższym przykładzie:

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

Gdy to zrobisz, musisz biec pod install w katalogu projektu, aby zainstalować consentmanager SDK. Następnie otwórz *.xcworkspace i buduj. 

Po wykonaniu wszystkich kroków Twoja zależność powinna zostać zainstalowana i możesz kontynuować i używać jej w swoim projekcie.

Instalacja przez XCFramework

Zdecydowanie zalecamy instalację i używanie biblioteki z Cocoapod. Bez tego będzie trudniej utrzymać zarówno użytkownika, jak i dewelopera. W ten sposób aktualizacje muszą być integrowane ręcznie i występują pewne problemy z kontrolą wersji. Dlatego planujemy zaprzestać aktywnej obsługi tej biblioteki. 

Pobierz pakiet SDK

Pobierz najnowszą wersję SDK tutaj:

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

SDK jest skonfigurowany dla systemu iOS w wersji 10 i nowszych.

Integracja

Aby zintegrować SDK z istniejącym projektem, wykonaj następujące kroki:

  1. Wyciągnij pliki z folderu ConsentManager.framework do głównego folderu Twojej aplikacji:



  2. Kliknij swój projekt i przejdź do zakładki Ogólne i rozwiń część pod Struktury, biblioteki i treści osadzone:

     

  3. Jeśli moduł nie jest jeszcze osadzony, kliknij + (Plus) > Dodaj inne > Dodaj pliki ...:

  4. Wybierz ConsentManager.framework folder z to projekt i kliknij Otwórz:

  5. Powinieneś teraz zobaczyć Framework jako „Osadź i podpisz” na liście:

  6. Przejdź do głównego kontrolera widoku swojej aplikacji i zaimportuj platformę za pomocą:
    #import <ConsentManager/CmpConsentTool.h>

Zainicjuj SDK

Dzięki aplikacji startowej (zwykle funkcji viewDidAppear) możesz musi utwórz instancję klasy CMPConsentTool. Spowoduje to automatyczne pobranie niezbędnych danych z naszego serwera i określenie, czy ekran akceptacji ma być wyświetlany, czy nie. Jeśli tak, SDK automatycznie wyświetli w tym momencie ekran zgody, zbierze dane i przekaże je do aplikacji. Instancję można następnie wykorzystać w celu uzyskania szczegółów zgody z SDK w celu wykorzystania jej w aplikacji.

#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

Przykład dla Swifta:

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

Pamiętaj, że ważne jest, aby zainicjować SDK w metodzie didAppear. W przeciwnym razie widok może nie być gotowy do użycia, a zestaw SDK może się nie powieść.

Upewnij się, że używasz poprawnych danych konfiguracyjnych. Dane konfiguracyjne można znaleźć w swoim ConsentManager konto na Menu > Pobierz kod.

SwiftUI

Aby zintegrować SDK w środowisku SwiftUI, musisz podać UIViewController który jest owinięty wewnątrz a UIViewControllerReprezentatywny. Więcej informacji znajdziesz na oficjalnej stronie dokumentacja jabłkowa. Przed integracją SDK upewnij się, że zintegrowałeś już moduł w swoim projekcie. 

1. Zaczynamy od stworzenia zwykłego UiViewControllera podobnego do przykładów dla Swift/Objective C

import UIKit
import consentmanager


class CmpViewController: UIViewController {
    struct CmpConfig {
           static let domain = "www.consentmanager.net"
           static let appId = "123456"
           static let appName = "test App"
           static let language = "DE"
       }
    var cmpConsentTool: CMPConsentTool? = nil
    func onClose() -> Void {
        NSLog("closed event");
    }

    func onOpen() -> Void {
        NSLog("opened event");
    }

    func onCMPNotOpened() -> Void {
        NSLog("not opened event");
    }
    
    override func viewDidLoad() {
        cmpConsentTool = CMPConsentTool.init(CmpConfig.domain, addId: CmpConfig.appId, addAppName: CmpConfig.appName, addLanguage: CmpConfig.language, add: self, autoupdate: true, addOpenListener: onOpen, addOnCMPNotOpenedListener: onCMPNotOpened);
        
        // creating a example button to manually open the consent screen
        let button = UIButton.init(frame: CGRect.init(x: 10, y: 100, width: 100, height: 50))
        button.setTitle("Consent", for: .normal)
        button.backgroundColor = .red
        button.addTarget(self, action: #selector(onShowConsentClicked), for: .touchUpInside)
        self.view.addSubview(button)
    }
    
    /**
     * Show consent button was clicked
     */
    @objc func onShowConsentClicked(sender: UIButton!) {
        cmpConsentTool!.openView()
    }
}

2. W celu korzystania z kontrolera w SwiftUI musisz utworzyć UIViewControllerRepresentable, który tworzy instancję CmpViewController:

import SwiftUI

struct CmpViewControllerRepresentable: UIViewControllerRepresentable {
    func makeUIViewController(context: Context) -> UIViewController {
        let cmpViewController = CmpViewController()
        
        return cmpViewController
    }
    
    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
    }
}

3. Teraz możemy użyć Widok kontrolera wewnątrz kontekstu SwiftUI:

import SwiftUI

@main
struct cmpApp: App {
    var body: some Scene {
        WindowGroup {
            CmpViewControllerRepresentable()
        }
        
        
    }
}

Przedstawiono przykładowy projekt tutaj

Korzystanie z SDK

Aby sprawdzić, czy sprzedawca lub cel mają zgodę, możesz skorzystać z dwóch metod:

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

Obie metody hasPurposeConsent i hasVendorConsent wymagają dwóch parametrów:

  • id — ciąg identyfikatora dostawcy lub celu. Należy pamiętać, że identyfikatory dostawców mogą mieć różne formaty („123”, „s123” i „c123”), sprawdź dokładnie za pomocą Menu > Sprzedawcy i Menu > Cele w telefonie ConsentManager konto.
  • isIABVendor / isIABPurpose — jeśli dostawca lub cel jest dostawcą/celem zgodnym ze standardem IAB TCF, należy ustawić wartość prawda, w przeciwnym razie fałsz.

Pamiętaj: wszyscy dostawcy, którzy nie należą do IAB, mają identyfikatory zaczynające się od „s” lub „c” (np. „s123”); dostawcy należący do IAB mają identyfikatory, które nie zaczynają się od „s” lub „c”.

Ponowne otwieranie ekranu zgody

Aby umożliwić użytkownikowi zmianę wyborów, wystarczy zadzwonić openCmpConsentToolView():

consentTool.openCmpConsentToolView();

Szybki:

cmpConsentTool!.openView()

W niektórych przypadkach natywna aplikacja może zawierać widoki internetowe w celu wyświetlania pewnych rzeczy, takich jak reklamy lub treści. W celu przekazania informacji o zgodzie z SDK do webview prosimy o skorzystanie z funkcji:

consentData = CMPStorageConsentManager.exportCMPData(this);

Spowoduje to wyeksportowanie informacji o zgodzie i wszystkich dalszych danych wymaganych przez CMP. Następnie możesz przekazać te informacje do CMP w widoku sieciowym, dodając je do adresu URL wywoływanego w widoku sieciowym:

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

Dynamiczne blokowanie treści za pomocą symbolu zastępczego UIView

Symbol zastępczy viewObject można zaimplementować, aby uzyskać funkcjonalność dynamicznego blokowania treści tutaj.Możesz utworzyć widok za pomocą następującej metody: 

class ViewController: UIViewController, CmpPlaceholderAcceptedDelegate {
//...
  
@objc func createPlaceholderView{
	let params : CmpPlaceholderParams = CmpPlaceholderParams.init(vendorId: "123");
	let placeholder : CmpPlaceholderView = (cmpConsentTool?.createPlaceholder(CGRect.init(x: 0, y: 300, width: view.frame.size.width, height: 				view.frame.size.height), params))!;
	placeholder.vendorDelegate = self;
	view.addSubview(placeholder);	
}



func vendorAccepted(_ placeholderView: CmpPlaceholderView!) {
	//... actions to do when the consent is accepted
  	// Like showing youtube video view
}
// ...
}

Z obiektem opakowującym CMPPlaceholderParams możesz także przekazać parametry opcjonalne, takie jak teksty niestandardowe lub opcjonalny obraz podglądu. możesz dodać własne teksty, jak pokazano poniżej: 

params.buttonText = "Click me";

Wymagana logika biznesowa, gdy chcesz pokazać widok i nie musi być stosowana przez dewelopera. Aby uzyskać informacje, gdy użytkownik wchodzi w interakcję z symbolem zastępczym, możesz użyć przygotowanego pełnomocnika CmpPlaceholderAcceptedDelegate. Za pomocą pełnomocnika będziesz musiał zaimplementować funkcję vendorAccepted, w której możesz kontrolować dodatkową logikę, gdy użytkownik zaakceptuje zgodę. 

Integracja z Apple Tracking Transparency (ATT)

Od czasu iOS 14 firma Apple wprowadziła platformę Apple Tracking Transparency, która wymaga, aby każda aplikacja ujawniała dane śledzenia, z których korzysta. Sama struktura ATT nie jest zgodna z IAB TCF/RODO itp. i jest tylko wersją specyficzną dla firmy Apple, w której można poprosić użytkownika o zgodę na śledzenie danych. Aby umożliwić użytkownikowi lepsze wrażenia, wspieramy rozwiązanie do synchronizacji zgód między CMP SDK a interfejsem ATT. SDK oferuje w tym celu dwa różne rozwiązania. 

1. Deweloper samodzielnie integruje ATT Framework, a następnie przekazuje otrzymane informacje do CMP SDK. Dokumentację jabłek można znaleźć tutaj

Zalecamy tę integrację. Nadal możesz uzyskać pełną kontrolę nad interfejsem ATT i wdrożyć spersonalizowany proces w zależności od użytkownika.  

Integracja mogłaby wyglądać tak. 

       func requestPermission() {
           if #available(iOS 14, *) {
               ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                   switch status {
                   case .authorized:
                       // Tracking authorization dialog was shown and accepted
                       // TODO custom code here:
                   case .denied:
                       // Tracking authorization dialog was shown and permission is denied
                       // TODO custom code here:
                   case .notDetermined:
                       // Tracking authorization dialog has not been shown
                       // TODO custom code here:
                   case .restricted:
                       // Tracking authorization dialog has not been shown app is restricted for tracking
                       // TODO custom code here:
                   }
                   // After determination of the att status, pass the information to the cmp sdk                                                           
                   CmpConfig.setAppleTrackingStatus(status.rawValue);
               })
           }
       }

Prośba o pozwolenie może wyglądać tak. Ważny wiersz kodu to 19, w którym informacje są przekazywane do CMP SDK. W zależności od statusu ATT CMP SDK ustawia wstępnie zdefiniowane informacje o zgodzie. 

 

2. Deweloper aktywuje automatyczne śledzenie jabłek. CMP SDK obsługuje żądanie z domyślnym protokołem. Stan będzie wtedy obsługiwany przez CMP SDK. Później możliwe jest uzyskanie statusu ATT przez programistę, mimo to niestandardowe akcje powinny być obsługiwane na żądanie, jak w opcji 1. Możesz aktywować automatyczne żądanie ATT za pomocą:

CmpConfig.setAutoAppleTracking(true);

Pamiętaj, aby aktywować tę funkcję przed utworzeniem wystąpienia CMP SDK. 

Niestandardowe odbiorniki zdarzeń

Aby dodać dodatkową logikę procesu, możesz skorzystać z detektorów zdarzeń. Dostępne są następujące detektory zdarzeń:

Imię lub Nazwa Firmy

Występuje

 

onCMPOpenedListener

Odbiornik zdarzenia po otwarciu CMP

onCMPClosedListener

Odbiornik zdarzenia, gdy CMP jest zamknięty

onCMPNotOpenedListener

Odbiornik zdarzenia, gdy nie trzeba otwierać CMP

NetworkErrorListener

Odbiornik zdarzenia, gdy CMP ma problemy z siecią

ServerErrorListener

Odbiornik zdarzenia, gdy CMP nie może dotrzeć do Consentmanager serwer

niestandardowy OpenListener

Odbiornik zdarzenia po otwarciu CMP

Zgoda na import/eksport

Aby zaimportować lub wyeksportować zgodę możesz skorzystać z funkcji exportCMPData() i importCMPData (ciąg cmpData). Sprawdź poniższy przykład: 

// Instanstiate CMPConsentTool()
cmpConsentTool = CMPConsentTool.init(...)

// Importing consent data if you like
cmpConsentTool.importCMPData("${your consentString}");

// ... Your code here ...


// Exporting Consent data 
let consentString : String = CMPConsentTool.exportCMPData()

ZgodaString, którą musisz przekazać, powinna być zakodowana w base64.

Kompilowanie / przesyłanie do AppStore

Aby skompilować SDK dla AppStore, możesz użyć następującego skryptu w celu wyczyszczenia katalogu roboczego:

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

Lista zmian

Dziennik zmian można znaleźć tutaj w naszym repozytorium.

Preferencje NSUserDefaults

Zestaw SDK zostanie ustawiony NSUserDefaults wartości dla IAB TCF v1, IAB TCF v2, IAB USPrivacy i Google AC String.

Zdefiniowano następujące klucze:

IAB TCF v1  
IABConsent_CMPPresent Boolean: Ustaw na true, jeśli CMP implementujący tę specyfikację jest obecny w aplikacji. Idealnie ustawione przez Wydawcę tak szybko, jak to możliwe, ale można je również ustawić alternatywnie przez CMP.
IABConsent_SubjectToGDPR String 1 – (podlega RODO), 0 – (nie podlega RODO), zero – nieoznaczony (domyślnie przed inicjalizacją). Zgodność z doradztwem IAB OpenRTB RODO. Zdecydowaliśmy się być String, aby mieć status niezainicjowany.
IABConsent_ConsentString String: Ciąg zgody
IABConsent_ParsedPurposeConsents String (od „0” i „1”), gdzie znak na pozycji N wskazuje status zgody na cel o identyfikatorze N zgodnie z definicją na globalnej liście dostawców. Wyrażono ciąg zgody, aby umożliwić proste sprawdzenie. Pierwszy znak od lewej to Cel 1, ...
IABConsent_ParsedVendorConsents String (od „0” i „1”), gdzie znak na pozycji N wskazuje stan zgody na identyfikator dostawcy N zgodnie z definicją na globalnej liście dostawców. Wyrażono ciąg zgody, aby umożliwić proste sprawdzenie. Pierwsza postać od lewej to Dostawca 1, ... 
IAB TCF v2  
IABTCF_CmpSdkID Number: identyfikator liczby całkowitej bez znaku pakietu CMP SDK
IABTCF_CmpSdkVersion Number: liczba całkowita bez znaku numeru wersji pakietu CMP SDK
IABTCF_PolicyVersion Number: Liczba całkowita bez znaku reprezentująca wersję TCF, której dotyczą te zgody.
IABTCF_gdprApplies Number:

1 RODO obowiązuje w obecnym kontekście

0 - RODO nie nie zastosować w obecnym kontekście

Nieoprawny - nieokreślony (domyślnie przed inicjalizacją)

IABTCF_PublisherCC String: Dwuliterowy kod ISO 3166-1 alfa-2 - Domyślna: AA (nieznany)
IABTCF_PurposeOneTreatment Number:

0 - brak specjalnego traktowania celu pierwszego

1 - cel jeden nie został ujawniony

Usuń ustawienie domyślne - 0

Sprzedawcy mogą używać tej wartości do określenia, czy wymagana jest zgoda na cel jeden.

IABTCF_UseNonStandardStacks Number:

1 - CMP użył niestandardowego stosu

0 - CMP nie używał niestandardowego stosu

IABTCF_TCString String: W pełni zakodowany ciąg TC
IABTCF_VendorConsents Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status zgody na identyfikator dostawcy n + 1; false i true odpowiednio. np. '1' w indeksie 0 jest zgoda true dla identyfikatora dostawcy 1
IABTCF_VendorLegitimateInterests Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status prawnie uzasadnionego interesu dla identyfikatora dostawcy n + 1; false i true odpowiednio. np. '1' w indeksie 0 czy istnieje uzasadniony interes? true dla identyfikatora dostawcy 1
IABTCF_PurposeConsents Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status zgody na identyfikator celu n + 1; false i true odpowiednio. np. '1' w indeksie 0 jest zgoda true dla identyfikatora celu 1
IABTCF_PurposeLegitimateInterests Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status prawnie uzasadnionego interesu dla celu identyfikacji n + 1; false i true odpowiednio. np. '1' w indeksie 0 czy istnieje uzasadniony interes? true dla identyfikatora celu 1
IABTCF_SpecialFeaturesOptIns Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status zgody na specjalny identyfikator funkcji n + 1; false i true odpowiednio. np. '1' w indeksie 0 jest zaakceptowany true dla specjalnego identyfikatora funkcji 1
IABTCF_PublisherRestrictions{ID} String ['0','1', or '2']: Wartość na pozycji n - gdzie nindeksowanie zaczyna się o 0 – wskazuje typ ograniczenia wydawcy (0-2) dla dostawcy n + 1; (zobacz Typy ograniczeń wydawców). np. '2' w indeksie 0 to typ ograniczenia 2 dla identyfikatora dostawcy 1. {ID} odnosi się do identyfikatora celu.
IABTCF_PublisherConsent Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status zgody na cel dla identyfikatora celu n + 1 dla wydawcy, ponieważ odpowiadają one celom globalnej listy dostawców; false i true odpowiednio. np. '1' w indeksie 0 jest zgoda true dla identyfikatora celu 1
IABTCF_PublisherLegitimateInterests Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status uzasadnionego interesu celu dla identyfikatora celu n + 1 dla wydawcy, ponieważ odpowiadają one celom globalnej listy dostawców; false i true odpowiednio. np. '1' w indeksie 0 czy istnieje uzasadniony interes? true dla identyfikatora celu 1
IABTCF_PublisherCustomPurposesConsents Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status zgody na cel dla niestandardowego identyfikatora celu wydawcy n + 1 dla wydawcy; false i true odpowiednio. np. '1' w indeksie 0 jest zgoda true dla niestandardowego identyfikatora celu 1
IABTCF_PublisherCustomPurposesLegitimateInterests Binary String: the '0' or '1' na stanowisku n - gdzie nindeksowanie zaczyna się o 0 – wskazuje status uzasadnionego interesu celu dla niestandardowego identyfikatora celu wydawcy n + 1 dla wydawcy; false i true odpowiednio. np. '1' w indeksie 0 czy istnieje uzasadniony interes? true dla niestandardowego identyfikatora celu 1
IAB USPrywatność  
IABUSPrivacy_String String: jest zgodny z zaleceniem IAB OpenRTB CCPA. String koduje wszystkie wybory i informacje.
Google AC String  
IABTCF_AddtlConsent

String: jest zgodny ze specyfikacją techniczną trybu dodatkowej zgody Google. 

Przegląd API

- (nieważne) otwórzCmpConsentToolView; Wyświetla widok modalny z widokiem internetowym zgody, bez pytania serwera, czy potrzebna jest nowa zgoda. Po otwarciu Webview zostanie wywołany openListener. Jeśli Zgodność zostanie zaakceptowana lub odrzucona, zostanie wywołana funkcja zamknięcia. Możesz ustawić te funkcje samodzielnie i przepuścić je obok lub po inicjalizacji. Jeśli chcesz dodać closeListener tylko dla tego wywołania tej metody, możesz przeciążyć tę funkcję dodatkową funkcją closeListener.
- (void)openCmpConsentToolView: (void(^)(void))closeListener; Wyświetla widok modalny z widokiem internetowym zgody, bez pytania serwera, czy potrzebna jest nowa zgoda. Po otwarciu Webview zostanie wywołany openListener. Jeśli Zgodność zostanie zaakceptowana lub odrzucona, zostanie wywołana funkcja zamknięcia. Możesz ustawić te funkcje samodzielnie i przepuścić je obok lub po inicjalizacji. Jeśli chcesz dodać closeListener tylko dla tego wywołania tej metody, możesz przeciążyć tę funkcję dodatkową funkcją closeListener. CloseListener to funkcja wywoływana bez parametrów i nie zwracająca żadnych wartości. Nazywa się to asynchronicznym.
- (NSString*) getVendorsString;  Jeśli zgoda ekranu jest zamknięta, rozszerzona wersja ConsentString jest zwracana przez logikę consentmanager. Dodatkowy ciąg dostawcy zawiera wszystkich dostawców, którzy nie są wymienieni przez CMPString. Ten ciąg zostanie zwrócony. Każdy Dostawca jest oddzielony znakiem „_” i będzie miał przed sobą „_”. „_c23_” będzie prawidłowym ciągiem dostawcy wygenerowanym przez ConsentManager. Pusty VendorsString będzie miał wartość null, „” lub „__”.
- (NSString*) getPurposesString; Jeśli zgoda ekranu jest zamknięta, rozszerzona wersja ConsentString jest zwracana przez logikę consentmanager. Dodatkowy ciąg celów zawiera wszystkie cele, które nie są wymienione w CMPString. Ten ciąg zostanie zwrócony. Każdy Cel jest oddzielony znakiem „_” i będzie miał przed sobą „_”. „_p23_” będzie prawidłowym ciągiem celu wygenerowanym przez ConsentManager. Pusty PurposeString będzie miał wartość null, „” lub „__”.
- (NSString*) getUSPrivacyString;  Zwraca ciąg US Privacy String, który został zwrócony przez zgodę użytkownika w ConsentScreen CMP.
- (BOOL) hasVendorConsent:(NSString *)vendorId vendorIsV1orV2:(BOOL)isIABVendor; Zwraca, jeśli dany Sprzedawca ma uprawnienia do ustawiania plików cookies. Parametr vendorIsV1orV2 twierdzi, jeśli dostawca jest wymieniony w zwykłym IABString lub jeśli jest zawarty w vendorString generowanym przez consentmanager.
- (BOOL)hasPurposeConsent:(NSString *)purposeIdpurposeIsV1orV2:(BOOL)isIABPurpose; Zwraca, jeśli dany Cel jest zaakceptowany. Parametr objectiveIsV1 lub V2 twierdzi, jeśli cel jest wymieniony w zwykłym IABString lub jest zawarty w objectiveString generowanym przez consentmanager.
- (BOOL) hasPurposeConsent: (int) identyfikator celu dostawcy: (int) identyfikator sprzedawcy;

Zwrotu, jeżeli została wyrażona Zgoda w celu określonego sprzedawcy. Metoda ta da poprawną odpowiedź tylko wtedy, gdy Zgoda została wyrażona w wersji V2.

- (id)init:(NSString *)domain addId:(NSString *)userId addAppName:(NSString *)appName addLanguage:(NSString *)język addViewController:(UIViewController *)viewController;

- (id)init:(NSString *)domain addId:(NSString *)userId addAppName:(NSString *)appName addLanguage:(NSString *)język addViewController:(UIViewController *)viewController addOpenListener:(void(^)(void)) openListener;

- (id)init:(NSString *)domain addId:(NSString *)userId addAppName:(NSString *)appName addLanguage:(NSString *)język addViewController:(UIViewController *)viewController addCloseListener:(void(^)(void)) zamknijOdbiornik;

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

- (id)init:(NSString *)domain addId:(NSString *)userId addAppName:(NSString *)appName addLanguage:(NSString *)język addViewController:(UIViewController *)viewController autoupdate:(BOOL)autoupdate;

- (id)init:(NSString *)domain addId:(NSString *)userId addAppName:(NSString *)appName addLanguage:(NSString *)język addViewController:(UIViewController *)viewController autoupdate:(BOOL)autoupdate addOpenListener:(void( ^)(nieważne)) openListener;

- (id)init:(NSString *)domain addId:(NSString *)userId addAppName:(NSString *)appName addLanguage:(NSString *)język addViewController:(UIViewController *)viewController autoupdate:(BOOL)autoupdate addCloseListener:(void( ^)(nieważne))zamknijListener;

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

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

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

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

- (id)init:(CMPConfig *)config withViewController:(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 withViewController:(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;

Tworzy nowe wystąpienie tego CMPConsentTool.

@param domain = adres URL domeny consentmanager np.: "www.consentmanager. Netto"

@ param userId = identyfikator twojego konta z consentmanagers webste np.: 123

@ param appName = Nazwa Twojej aplikacji, np.: „Moja aplikacja testowa”

@param language = Język, w którym powinna być wyświetlana zgoda, np.: „de”

@param viewController = Główna instancja aplikacji ViewController

@param autoupdate = Jeśli ta opcja jest ustawiona, aplikacja sama sprawdzi, czy potrzebna jest nowa zgoda, czy aplikacja zostanie otwarta w tle.

@param openListener = Ten Listener podany jako funkcja zostanie nazwany asynchronicznym na krótko przed otwarciem ekranu zgody CMP.

@param closeListener = Ten odbiornik zostanie nazwany asynchronicznym, jeśli użytkownik wyraził zgodę, a CMPConsentScreen został zamknięty. Ten Odbiornik NIE jest wywoływany, jeśli Użytkownik zamknie aplikację bez wyrażenia zgody.

@param config = Domena parametrów, identyfikator użytkownika, nazwa aplikacji, język w obiekcie typu CMPConfig.

Możesz przeciążyć funkcję inicjującą, jak widać w następujących konstruktorach:

+(NSString*)eksportCMPData; Eksportuje bieżący ciąg CMPData. Możesz łatwo zaimportować ten ciąg na dowolnym innym urządzeniu za pomocą funkcji importCMPData.
+ (BOOL)importCMPData:(NSString *)cmpData; Importuje podany ciąg CMPData. Możesz łatwo wyeksportować ten ciąg do dowolnego innego urządzenia za pomocą funkcji exportCMPData.
-(BOOL) o nazwieThisDay;  zwraca, czy CMPConsent Manager Serwer został poproszony dzisiaj, lub consentmanager serwer został już zapytany, czy ekran zgody CMP musi zostać ponownie wyświetlony.
-(BOOL) wymaga akceptacji;  zwraca, czy użytkownik musi wyrazić zgodę, ponieważ nie robił tego w przeszłości lub ponieważ serwer zgody zwrócił, że wymagana jest nowa zgoda.
+(unieważnij)reset; resetuje wszystkie dane ustawione przez narzędzie permissionCMPTool we wspólnych preferencjach.

 

Powrót do góry