Informacia
Treść

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:

  1. 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).
  2. 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.
  3. Gdy użytkownik skończy, widok sieciowy poinformuje o tym aplikację. Aplikacja zamknie podgląd i przetworzy informacje o zgodzie.
  4. 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 url powinien być wyświetlany w widoku sieciowym

2=Wystąpił błąd, patrz message

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:

  1. 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
  2. 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)

  3. 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.

Powrót do góry