[Androida] 1. ConsentManager Integracja SDK
Połączenia ConsentManager SDK dla aplikacji na Androida 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.
Jak to działa?
- Zintegruj SDK z aplikacją i skonfiguruj ustawienia SDK
- Gdy SDK zostanie zintegrowany z aplikacją, SDK udostępni funkcje dla programisty aplikacji w celu pobrania danych dotyczących zgody
- Gdy tylko aplikacja się uruchomi, SDK automatycznie pobierze informacje z ConsentManager serwery w celu przygotowania SDK do jego użycia.
- Zaleca się, aby przy starcie aplikacji tworzyła instancję klasy
CMPConsentTool
. Po utworzeniu SDK automatycznie wyświetli ekran zgody, jeśli to konieczne. - Gdy aplikacja chce przetwarzać dane osobowe, powinna „zapytać” SDK, czy została wyrażona zgoda na konkretny cel i dostawcę.
Instalacja
Repozytorium na Bitbucket: https://bitbucket.org/consentmanager/android-consentmanager/src/master/
Gradle
Krok 1. Dodaj repozytorium jitpack do głównego pliku build.gradle na końcu repozytoriów:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Krok 2. Dodaj zależność do swoich aplikacji build.gradle. (Aby zawsze uzyskać najnowszą wersję, użyj symbolu +, aby uzyskać najnowsze aktualizacje. Możesz na przykład zawsze pobierać najnowsze wersje dla drobnych aktualizacji do 1.x.+)
dependencies {
implementation 'org.bitbucket.consentmanager:android-consentmanager:1.5.+'
}
Maven
Krok 1. Dodaj repozytorium jitpack do swojego build.gradle na końcu repozytoriów:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Krok 2. Dodaj zależność do swoich aplikacji build.gradle. (Aby zawsze mieć najnowszą wersję w maven, możesz użyć różnych metod, aby odrzucić zakres wersji. Możesz je sprawdzić tutaj )
<dependency>
<groupId>org.bitbucket.consentmanager</groupId>
<artifactId>android-consentmanager</artifactId>
<version>1.5.7</version>
</dependency>
Korzystanie z biblioteki
Uprawnienia
Ten pakiet SDK wymaga następujących uprawnień, upewnij się, że dodałeś je do pliku AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Zainicjuj narzędzie zgody
Za pomocą aplikacji startowej (zazwyczaj funkcji viewDidAppear) musisz utworzyć 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.
Aby zainicjować ConsentTool, przejdź do wybranej klasy i utwórz instancję CMPConsentTool, jak pokazano poniżej:
//...
import net.consentmanager.sdk.CMPConsentTool;
//...
public class MainActivity extends AppCompatActivity {
private CMPConsentTool consentTool;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
//..
consentTool = CMPConsentTool.createInstance(this, 123456, "delivery.consentmanager.net", "MyFavouriteApp", "");
}
//...
}
Aby utworzyć instancję CMPConsentTool, musisz skonfigurować instancję. Musisz podać CMP-ID, domenę serwera , nazwę aplikacji i język. CMP-ID i domenę serwera można znaleźć w swoim ConsentManager konto pod Menu > Pobierz kod. Nazwy aplikacji można użyć do rozróżnienia różnych aplikacji w ConsentManager raportowanie. Jako język możesz użyć pustego ciągu ("") do automatycznego wykrywania lub dwuliterowego kodu języka ("EN", "DE", "FR" itd.).
Wartości konfiguracyjne można wstawiać na różne sposoby:
a) Konfiguracja SDK przez CMPConfig
Dodaj następujące wiersze do swojego kodu:
val config = CMPConfig.apply {
serverDomain = CMP_DOMAIN
appName = CMP_APP_NAME
language = LANG
id = APP_ID
}
val consentTool = CMPConsentTool.createInstance(this, config);
b) Konfiguracja zestawu SDK za pomocą metody createInstance()
Dodaj następujący wiersz do swojego kodu:
consentTool = CMPConsentTool.createInstance(this, 1234567, "delivery.consentmanager.net", "MyFavouriteApp", "EN");
Korzystanie z SDK
Sprawdź zgodę
Aby sprawdzić, czy sprzedawca lub cel mają zgodę, możesz skorzystać z dwóch metod:
if(consentTool.hasPurposeConsent(this,"52",false))
{
if(consentTool.hasVendorConsent(this,"s26", 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(this);
Przekazywanie informacji o Zgodzie do innych źródeł
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:
String consentData = CMPConsentTool.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);
Niestandardowe odbiorniki zdarzeń
Aby dodać dodatkową logikę procesu, możesz skorzystać z detektorów zdarzeń. Dostępne są następujące detektory zdarzeń:
Imię |
Występuje
|
OnOpenCallback |
Odbiornik zdarzenia po otwarciu CMP |
OnCMPZamknijOddzwoń |
Odbiornik zdarzenia, gdy CMP jest zamknięty |
OnCMPNotOpenedOddzwonienie |
Odbiornik zdarzenia, gdy nie trzeba otwierać CMP |
Przy oddzwonieniu po błędzie |
Listener for Event, gdy wystąpi błąd w procesie zarządzania zgodą. |
Zgoda na import/eksport
Aby zaimportować lub wyeksportować zgodę możesz skorzystać z funkcji exportCMPData (kontekst kontekstu) i importCMPData (kontekst kontekstu, ciąg cmpData). Sprawdź poniższy przykład:
// 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);
ZgodaString, którą musisz przekazać, powinna być zakodowana w base64.
Diagram sekwencji CMP SDK
Wspólne preferencje
SDK ustawi wartości wspólnych preferencji dla IAB TCF v1, IAB TCF v2, IAB USPrivacy i Google AC String. Te wartości można odczytać za pomocą następującego kodu:
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);
Zdefiniowano następujące klucze:
Dokument dotyczący przejrzystości i przejrzystości dokumentów IAB w wersji 1 | |
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, ... |
Dokument dotyczący przejrzystości i przejrzystości dokumentów IAB w wersji 2 | |
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 :
Nieoprawny - nieokreślony (domyślnie przed inicjalizacją) |
IABTCF_PublisherCC |
String : Dwuliterowy kod ISO 3166-1 alfa-2 - Domyślna: AA (nieznany) |
IABTCF_PurposeOneTreatment |
Number :
Usuń ustawienie domyślne - Sprzedawcy mogą używać tej wartości do określenia, czy wymagana jest zgoda na cel jeden. |
IABTCF_UseNonStandardStacks |
Number :
|
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. |
Ciąg Google AC | |
IABTCF_AddtlConsent |
|
(Wycofane) Dynamiczne blokowanie treści za pomocą elementu zastępczego webView
Ta funkcja jest przestarzała i zostanie usunięta w przyszłości. Powodem wycofania jest to, że dzięki włączaniu i wyłączaniu interfejsów API dostawcy i celu nie ma już potrzeby tworzenia symbolu zastępczego. Możesz dodać własny interfejs użytkownika i własną logikę biznesową oraz dynamicznie aktywować i dezaktywować dostawców. Zamiast korzystać z tej funkcji, należy użyć metody włączListaDostawców() i wyłączListDostawców() funkcje do zarządzania, którzy dostawcy są włączani lub wyłączani, i tworzyć własny interfejs użytkownika, aby wyświetlać te informacje użytkownikowi.
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:
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
}
});
Z obiektem opakowującym CMPPlaceholderParams
możesz również przekazać parametry opcjonalne, takie jak teksty niestandardowe lub opcjonalny obraz podglądu. Funkcje konstruktora nazywają się setCustomplaceholder(String headline, String mainText, String checkboxText, String buttonText)
i setOptionalImageUrl(String imageUrl)
.
Wymagana logika biznesowa, gdy chcesz pokazać widok i nie musi być stosowana przez dewelopera. Możesz przekazać wymagane warunki i akcje, używając wywołań zwrotnych EvenListener z CMPPlaceholderEventlistener
. Należy wdrożyć następujące wymagane wydarzenie:
Wymagany: vendorAccepted(CMPPlaceholderView view) { // Your logic }
Opcjonalny: errorOccurred(String message) { // Error handling }