Integracja CMP API dla aplikacji
W niektórych przypadkach nie można użyć istniejących zestawów SDK i konieczne są niestandardowe intergacje. W takim przypadku programiści aplikacji mogą korzystać z interfejsu API CMP dla aplikacji, aby ręcznie zintegrować CMP ze swoją aplikacją.
Pamiętaj, że interfejs API zapytań jest przestarzały i zostanie usunięty do połowy 2022 r. Zamiast tego użyj pakietów SDK.
Workflow
Interfejs API CMP dla aplikacji jest używany w następującej kolejności:
- Aplikacja zapyta consentmanager serwer raz dziennie (pierwsze uruchomienie aplikacji w tym dniu). Wyśle informacje o istniejącej zgodzie i poprosi consentmanager serwer, czy użytkownik musi zostać poproszony o zgodę (ponownie).
- W zależności od odpowiedzi od consentmanager serwer, aplikacja wyświetli warstwę zgody w widoku sieciowym. Użytkownik może otrzymywać informacje i dokonywać wyborów.
- Gdy użytkownik skończy, widok sieciowy poinformuje o tym aplikację. Aplikacja zamknie podgląd i przetworzy informacje o zgodzie.
- Aplikacja może następnie wykorzystać informacje o zgodzie do własnego przetwarzania danych.
1. Odpytywanie consentmanager serwer
W pierwszym kroku aplikacja wyśle żądanie HTTP do:
https://[consentmanager-server]/delivery/appjson.php?id=[CMP-ID]&l=[Language]&idfa=[IDFA]&appname=[Appname]&consent=[Consent-Info]
Gdzie następujące makra mają zostać zastąpione przez aplikację przed wysłaniem:
- [consentmanager-server] - Domena serwera (patrz Menu > Pobierz kod > Ustawienia SDK aplikacji)
- [CMP-ID] - identyfikator CMP (patrz Menu > Pobierz kod > Ustawienia SDK aplikacji)
- [Język] - Kod języka do wyświetlania wiadomości (np. EN, FR, DE, ...)
- [IDFA] - opcjonalnie. IDFA aplikacji
- [Nazwa aplikacji] - opcjonalnie. Nazwa aplikacji do celów raportowania
- [Consent-Info] - Informacje o zgodzie otrzymane z widoku internetowego (wersja danych zgody zakodowana w base64)
Przykładowy adres URL:
https://delivery.consentmanager.net/delivery/appjson.php?id=123456&l=FR&appname=my%20App&consent=Qxc2j2J8aN....
Odpowiedzią na to żądanie jest tekst JSON podobny do następującego:
{
"status":1,
"regulation":1,
"message":"",
"url":"https://delivery.consentmanager.net/delivery/appcmp.php?id=123456&consent=&appname=my%20App&l=FR"
}
Pola w odpowiedziach są następujące:
Pole | Opis |
status |
0=Zgoda nie jest wymagana, widok internetowy nie powinien być wyświetlany 1=Wymagana zgoda, adres URL z pola 2=Wystąpił błąd, patrz |
regulation |
0=brak ustawień regulacji, 1=obowiązuje RODO, 2=obowiązuje CCPA, 3=obowiązuje LGPD, ... |
message |
Komunikat o błędzie do wyświetlenia deweloperowi. |
url |
URL do wyświetlenia w podglądzie internetowym |
2. Wyświetlanie widoku internetowego
Jeśli wywołanie /delivery/appjson.php (patrz Krok 1) spowodowało status = 1
, aplikacja powinna używać wartości z pola url
i otwórz go w widoku sieciowym (okno przeglądarki osadzone w aplikacji). Adres URL wyświetli minimalną stronę HTML, która zawiera internetową wersję kodu CMP. Strona zawiera również link „Pomiń”, aby uniknąć problemów z kompatybilnością JavaScript.
Aby wyświetlić CMP ze wszystkimi funkcjami, webview powinien zapewniać następujące minimalne funkcje:
- Obsługa HTML 5
- Obsługa CSS 3
- Obsługa JavaScript 1.2
- Obsługa DOM 3
- Minimalna rozdzielczość 300x300 pikseli (najlepiej pełna szerokość i min 80% wysokości w trybie pionowym)
- Otwórz/przejdź do adresów URL za pomocą protokołu https: (np. polityki prywatności), otwierając nowe okno przeglądarki
- Przechwytuj, gdy webview próbuje przejść do URN zaczynającego się od protokołu „consent://”
Aplikacja nie powinna umożliwiać użytkownikowi pominięcia widoku internetowego w jakikolwiek inny sposób (np. poprzez wyłączenie przycisku „wstecz” lub podobnych funkcji).
3. Przetwarzanie danych zgody
Gdy użytkownik dokona wyboru, CMP wywoła URN z prefiksem protokołu zgody://, po którym nastąpi informacja o zgodzie w zakodowanej formie base64-websafe. Przykład:
consent://Q083NU1KN084QXBEOEFmWlhDREVBOUNzQVBfQUFIX0FBQWlnR2t0Zl9YX2ZiMnZqLV81OTlfdDBlWTFmOV82M3Ytd3pqaGVOcy04TnlkX1hfTDRYdjJNeXZCMzZwcTRLdVI0a3UzYkJBUWR0SE9uY1RRbVJ3SWxWcVRMc2IwMk1yN05LSjdMRW1sc2JlMmRZR0g5dm45WFRfWktaNzBfX19fXzdfM19fX19fXzc3Xy1iXzRHa3RmX1hfZmIydmotXzU5OV90MGVZMWY5XzYzdi13empoZU5zLThOeWRfWF9MNFh2Mk15dkIzNnBxNEt1UjRrdTNiQkFRZHRIT25jVFFtUndJbFZxVExzYjAyTXI3TktKN0xFbWxzYmUyZFlHSDl2bjlYVF9aS1o3MF9fX19fN18zX19fX19fNzdfLWJfNENnS0FZQUNFQVhJQkFBQ2JBR3lBT29BcGdCWFlDLWdHSUFNakFhRURBQWdMYUNRREFBUWdDNUFJQUFUWUEyUUIxQUZNQUs3QVgwQXhBQmtZRFFnb0FFQmJRYUFZQUNFQVhJQkFBQ2JBR3lBT29BcGdCWFlDLWdHSUFNakFhRUhBQWdMYUVRREFBUWdDNUFJQUFUWUEyUUIxQUZNQUs3QVgwQXhBQmtZRFFoSUFFQmJRcUFZQUNFQVhJQkFBQ2JBR3lBT29BcGdCWFlDLWdHSUFNakFhRUxBQWdMYUdRREFBUWdDNUFJQUFUWUEyUUIxQUZNQUs3QVgwQXhBQmtZRFFob0FFQmJRNkFZQUNFQVhJQkFBQ2JBR3lBT29BcGdCWFlDLWdHSUFNakFhRVBBQWdMYUlRREFBUWdDNUFJQUFUWUEyUUIxQUZNQUs3QVgwQXhBQmtZRFFpSUFFQmJSS0FZQUNFQVhJQkFBQ2JBR3lBT29BcGdCWFlDLWdHSUFNakFhRVRBQWdMYUtRREFBUWdDNUFJQUFUWUEyUUIxQUZNQUs3QVgwQXhBQmtZRFFpb0FFQmJRI18xXzE5XyNfczIxOF9jNTk3NV9zMjNfYzUxNDdfczdfYzUxNjNfczFfczI2X3MxMzVfczExMDRfczE0MDlfczkwNV9zMTRfYzQ0OTlfYzUxMzZfYzY5MjVfYzUzMzVfYzUzMzRfYzUxNThfYzUyMjNfYzUxMzVfczM0X3MzMF9VXyMxLS0tIzF-My4yOTUzLjI4NTguMTk4Ni4xMS4yMzYuMTUuMjg2Ni4xMjMyLjI3MTAuMjIuMjg5Mi4xNDk2LjI0NDEuMjE3Ni4zNS4xOTYwLjI0NjcuMTMzNi44MjcuMTUxNC4xNjQyLjI3MDIuMzU5LjI2MzIuMjgwMy44NS4yMjE0LjIyNzYuOTMyLjEyNDguNTcuMjE0MS4yMjcxLjE1MTcuMjY2Mi4xNDA5LjE0NTEuNTg3Ljk5MS4xODM0LjE1NDcuMTg1OC4xNzQxLjExNjcuMTk4Ny4xNzc2LjEwNjMuMjY5OS4yOTU3LjI2NjMuMjk3MS4yMDYyLjI3ODYuMjQ1My45ODcuMjkzNi4yMTYuNTk1LjI5MTAuNjIuMjYyMi4xNTMuMTU0LjIzMjAuMTY1LjE3OC4xMjI1LjI4NDcuMzE3Ljc3Ni4xODguNzk3LjUzNy4xMzI5LjMxNi4xOTUuNDkyLjg5LjIwOS4xMTAwLjI3MjcuMjAxNi45NTUuMjIxLjE3MDUuMTI5OC4yMjkuMjI5LjI1ODYuMjc3OS4yNTA2LjEyNzUuMTczNS4yNzA1LjEyNi4yNjM5LjExNzIuMjU1LjIyNTEuMjU5Ny40OC4yMjk1LjI3MS4xNzYwLjYyMS4yNzQuMjgwOC4xNjc0LjI2NjYuMTg4My4xNTk4LjE1NDIuMTczOS4yNjg5LjYwOS4xNDIzLjEyLjE1MDMuMjk3Mi4xNzMzLjI5NC4xOTA1LjI0MTMuNzIzLjExOTkuMzEzLjcyNS4xMDUyLjU5MC4xNzgwLjMxMC4zMDMuMTM0NC4zMzYuMjQ2NC4yMTIxLjEwNDcuMjI0Ny40MzIuMzQ4LjE4ODIuMTIxMi4yNzA0LjIyOTAuMjQzNy4zNjMuMjI5OS4yNzc4LjEwNjIuMjA3OS4zNzAuMTg5Mi4yODQzLjExNzEuMzg0LjEzNC4yODY4LjI3ODAuMTAyOC4yODMyLjM5OC43ODIuMzQwLjE3OTEuMjQxMC4yMDU5LjE2MS4yMTcwLjE1MjAuMjgxMC4yNjQ5Ljk3Ni4yMzExLjE0MTkuNDM4LjMxNC4yNzA5LjE2NTIuNDQzLjIzODIuMTA3Mi4yODcyLjIwMTIuMjkyOC4yNzA2LjQ1OS4yMjc4LjE4MDEuNjI0LjEzMTMuMjgwMi4yMzQ2Ljg2LjIxOTIuMTk4NS4xODc1LjE2ODQuMTkxMS4yMDc4LjE3OTQuMTI1LjE3MTYuMTIzNi44MTQuMTAyOS40NzkuMTI0MS4xOTU4LjkzMy4xOTQ1LjE2MjYuNTAzLjUxMC4xODMxLjI0ODEuMjc3Ny4yNTkuMjkwNS4yNTEyLjUyOC4xNTA5LjI2MjQuMTg3Mi4xNzIwLjgwLjI3NTguMjQyMi4yODI5
Aplikacja przechwyci zdarzenie nawigacyjne, zamknie widok sieciowy i przetworzy dane w następujący sposób:
- Wykonaj bezpieczne dla sieci dekodowanie base64:
1. wymień wszystko+
z przestrzenią
2. wymień wszystko_
z/
3. wymień wszystko-
z+
4. dodaj=
do końca sznurka, aby długość sznurka można było podzielić przez 4
5. wykonaj dekodowanie base64
Powyższy przykładowy ciąg da w wyniku następujący zdekodowany ciąg:CO75MJ7O8ApD8AfZXCDEA9CsAP_AAH_AAAigGktf_X_fb2vj-_599_t0eY1f9_63v-wzjheNs-8Nyd_X_L4Xv2MyvB36pq4KuR4ku3bBAQdtHOncTQmRwIlVqTLsb02Mr7NKJ7LEmlsbe2dYGH9vn9XT_ZKZ70_____7_3______77_-b_4Gktf_X_fb2vj-_599_t0eY1f9_63v-wzjheNs-8Nyd_X_L4Xv2MyvB36pq4KuR4ku3bBAQdtHOncTQmRwIlVqTLsb02Mr7NKJ7LEmlsbe2dYGH9vn9XT_ZKZ70_____7_3______77_-b_4CgKAYACEAXIBAACbAGyAOoApgBXYC-gGIAMjAaEDAAgLaCQDAAQgC5AIAATYA2QB1AFMAK7AX0AxABkYDQgoAEBbQaAYACEAXIBAACbAGyAOoApgBXYC-gGIAMjAaEHAAgLaEQDAAQgC5AIAATYA2QB1AFMAK7AX0AxABkYDQhIAEBbQqAYACEAXIBAACbAGyAOoApgBXYC-gGIAMjAaELAAgLaGQDAAQgC5AIAATYA2QB1AFMAK7AX0AxABkYDQhoAEBbQ6AYACEAXIBAACbAGyAOoApgBXYC-gGIAMjAaEPAAgLaIQDAAQgC5AIAATYA2QB1AFMAK7AX0AxABkYDQiIAEBbRKAYACEAXIBAACbAGyAOoApgBXYC-gGIAMjAaETAAgLaKQDAAQgC5AIAATYA2QB1AFMAK7AX0AxABkYDQioAEBbQ#_1_19_#_s218_c5975_s23_c5147_s7_c5163_s1_s26_s135_s1104_s1409_s905_s14_c4499_c5136_c6925_c5335_c5334_c5158_c5223_c5135_s34_s30_U_#1---#1~3.2953.2858.1986.11.236.15.2866.1232.2710.22.2892.1496.2441.2176.35.1960.2467.1336.827.1514.1642.2702.359.2632.2803.85.2214.2276.932.1248.57.2141.2271.1517.2662.1409.1451.587.991.1834.1547.1858.1741.1167.1987.1776.1063.2699.2957.2663.2971.2062.2786.2453.987.2936.216.595.2910.62.2622.153.154.2320.165.178.1225.2847.317.776.188.797.537.1329.316.195.492.89.209.1100.2727.2016.955.221.1705.1298.229.229.2586.2779.2506.1275.1735.2705.126.2639.1172.255.2251.2597.48.2295.271.1760.621.274.2808.1674.2666.1883.1598.1542.1739.2689.609.1423.12.1503.2972.1733.294.1905.2413.723.1199.313.725.1052.590.1780.310.303.1344.336.2464.2121.1047.2247.432.348.1882.1212.2704.2290.2437.363.2299.2778.1062.2079.370.1892.2843.1171.384.134.2868.2780.1028.2832.398.782.340.1791.2410.2059.161.2170.1520.2810.2649.976.2311.1419.438.314.2709.1652.443.2382.1072.2872.2012.2928.2706.459.2278.1801.624.1313.2802.2346.86.2192.1985.1875.1684.1911.2078.1794.125.1716.1236.814.1029.479.1241.1958.933.1945.1626.503.510.1831.2481.2777.259.2905.2512.528.1509.2624.1872.1720.80.2758.2422.2829
- Podziel dane według #, otrzymasz 4 lub więcej części:
1. Część: IAB TCF ConsentString (patrz https://iabeurope.eu/transparency-consent-framework/)
2. Część: Identyfikatory celów (Zgoda; Lista identyfikatorów celów oddzielonych_
)
3. Część: Identyfikatory dostawców (Zgoda; Lista identyfikatorów dostawców oddzielonych_
)
4. Część: dodatkowy ciąg zgody Google (patrz https://support.google.com/admanager/answer/9681920)
5. Część: Ciąg prywatności IAB USP (patrz https://iabtechlab.com/standards/ccpa/)
6. Część: Identyfikatory celów (uzasadniony interes; Lista identyfikatorów celów oddzielonych_
)
7. Część: Identyfikatory dostawców (uzasadniony interes; Lista identyfikatorów celów oddzielonych_
)
8. Część: Skompresowany format identyfikatorów niestandardowych (patrz Skompresowany format identyfikatorów niestandardowych)
- Dekoduj każdą część w zależności od formatu danych części.
Uwaga: informacje dotyczące zgody, niektóre lub wszystkie części mogą być puste (np. jeśli użytkownik kliknie link pominięcia lub w zależności od ustawień CMP).
Nie zapomnij zapisać informacji o zgodzie (wersja websafe zakodowana w base64, która została wysłana z webview do aplikacji). Jest to potrzebne w kroku 1 w przy zapytaniu consentmanager serwer.