Per aggiungere l’SDK di iubenda al tuo progetto, puoi usare CocoaPods con la seguente configurazione:
platform :ios, '10.0'
source "https://github.com/iubenda/cocoapods.git"
target 'MyApp' do
use_frameworks!
pod 'IubendaMobileSDK', '2.6.4'
end
Per aggiornare automaticamente la versione della libreria con l’aggiornamento del pod, puoi impostare la dipendenza come segue:
'IubendaMobileSDK', '~> 2.6.4'
per gli aggiornamenti banali'IubendaMobileSDK', '~> 2.6'
per gli aggiornamenti minori'IubendaMobileSDK'
per tutti gli aggiornamentiPer utilizzare la libreria nel codice:
import iubenda
nei file sorgente per utilizzare la libreria in Swift#import
nei file sorgente per utilizzare la libreria in Objective-CNella classe AppDelegate, all’interno del metodo didFinishLaunchingWithOptions
, crea un oggetto di configurazione con le tue impostazioni e chiama IubendaCMP.initialize()
let config = IubendaCMPConfiguration()
config.gdprEnabled = true
config.googleAds = true
config.siteId = "12341234"
config.cookiePolicyId = "56785678"
config.applyStyles = true
config.cssFile = Bundle.main.path(forResource: "custom_style", ofType: "css")
config.jsonFile = Bundle.main.path(forResource: "config", ofType: "json")
IubendaCMP.initialize(with: config)
Impostazione | Valore predefinito | Descrizione |
---|---|---|
csVersion | current | Consente di definire quale versione di Privacy Controls and Cookie Solution utilizzare. I valori accettati sono “current”, “beta”, “stable” o un numero di versione specifico |
gdprEnabled | false | Proxy per l’impostazione IABConsent_SubjectToGDPR di TCF di IAB. Se false, Mediation SDK può eseguire la mediazione in tutti gli SDK della rete di annunci. In caso contrario, Mediation SDK eseguirà la mediazione solo tra gli SDK della rete di annunci conformi al GDPR |
siteId | ID del sito del cliente su iubenda | |
cookiePolicyId | ID della Cookie policy del cliente su iubenda | |
googleAds | false | Se true, abilita la gestione del consenso per gli annunci personalizzati di Google |
jsonFile | Percorso del file JSON per trasmettere la configurazione personalizzata all’interfaccia utente di consenso | |
jsonContent | Come sopra, ma impostato come stringa | |
forceConsent | true | Se true, la schermata del consenso sarà visibile fino a quando l’utente non accetta, in modo da aumentare al massimo i consensi. Se false, askConsent() non avrà alcun effetto se l’utente ignora la richiesta di consenso dopo il primo lancio |
cssFile | Percorso del file CSS per applicare lo stile personalizzato all’interfaccia utente di consenso in aggiunta al file di stile standard (applyStyles=true) o da solo (applyStyles=false) | |
cssContent | Come sopra, ma impostato come stringa | |
cssUrl | Come sopra, ma impostato come stringa URL | |
applyStyles | true | Se true, all’interfaccia utente di consenso viene applicato lo stile CSS standard |
acceptIfDismissed | false | Se true e il file JS è pronto, quando l’utente ignora il popup, l’informativa viene accettata |
preventDismissWhenLoaded | false | Se true, una volta che il popup è caricato, non è possibile ignorarlo senza esprimere una preferenza |
skipNoticeWhenOffline | true | Se abilitato, askConsent() non mostrerà il popup in assenza di connessione Internet |
dismissColor | Consente di impostare un colore personalizzato per il pulsante di chiusura (×). Se non è impostato, verrà applicato il valore textColor del file JSON. Se anche textColor non è impostato, verrà utilizzato il colore predefinito | |
bannerPosition | center | Consente di impostare la posizione del popup per il banner di consenso in alto (“top”), in basso (“bottom”) o al centro (“center”) | automaticHandlingOfAtt | false |
Se impostato su true , questa funzione SDK gestisce il flusso di lavoro ATT in iOS come segue:
1. L’invocazione della funzione askConsent() attiva prima l’avviso per le autorizzazioni di sistema ATT.
2. Se l’utente autorizza il tracciamento (lo stato è .authorized in base alla documentazione ATT di Apple), viene visualizzato il popup per il consenso.
3. Se l’utente nega il tracciamento, il popup per il consenso non verrà visualizzato. Nota importante: per abilitare questa funzione è necessario aggiungere la chiave NSUserTrackingUsageDescription al file info.plist . Per maggiori dettagli, consulta la documentazione di Apple su NSUserTrackingUsageDescription.
|
let config = IubendaCMPConfiguration()
config.gdprEnabled = true
config.forceConsent = true
config.googleAds = true
config.siteId = "12341234"
config.cookiePolicyId = "56785678"
config.acceptIfDismissed = true
config.applyStyles = false
config.cssFile = Bundle.main.path(forResource: "custom_style", ofType: "css")
config.jsonFile = Bundle.main.path(forResource: "config", ofType: "json")
IubendaCMP.initialize(with: config)
custom_style.css:
/***************************************************************************
// * iubenda Privacy Controls and Cookie Solution *
// * *
// * Sample CSS v2.2.6 *
// * *
// * (c) 2019 iubenda srl <info@iubenda.com> *
// * All Rights Reserved. *
// * *
// *************************************************************************
//
// CHANGELOG
//
// 2.2.7 - 2020-06-18
// - Fix container breaking on mobile.
//
// 2.2.6 - 2020-05-27
// - Hide scroll bar visibility.
// - Fix brand image height on mobile.
//
// 2.2.5 - 2020-05-06
// - Fix IE flex content.
// - Fix text overflow.
//
// 2.2.3 - 2020-04-21
// - Cursor pointer
// - Button text ellipsis
// - Equalize shadows top/bottom modal bar
//
// 2.2.2 - 2020-04-06
// - Add pointer events auto to the overlay
//
// 2.2.1 - 2020-03-06
// - Introduce popover.
//
// 2.2.0 - 2019-11-07
// - Introduce brand customizations
//
// 2.1.5 - 2019-11-22
// - Add class to go fullscreen.
//
// 2.1.4 - 2020-03-25
// - Make the banner shadow darker
//
// 2.1.3 - 2020-01-22
// - Fix banner not appearing on iPhone.
//
// 2.1.2 - 2019-11-07
// - Fix buttons height on IE.
//
// 2.1.1 - 2019-10-30
// - Fix buttons margin and customize-advertising-tracking button width on mobile.
//
// 2.1.0 - 2019-10-24
// - Introduce text overflowing mask and style for reject button.
//
// 2.0.4 - 2019-06-24
// - Convert close button width to min-width
//
// 2.0.3 - 2019-05-24
// - Introduce new positioning options
//
// 2.0.2 - 2019-05-02
// - Fix text spaces when custom content
//
// 2.0.1 - 2019-04-09
// - Add rules for buttons group
//
// 2.0.0 - 2019-02-01
// - Full rewrite to accommodate the new markup
//
// 0.0.1 - 2015-04-01
// - First implementation of the sample CSS
*/
/*
-----------------
IMPORTANT: Changing the following values may prevent the notice from being displayed properly.
-----------------
*/
#iubenda-cs-banner {
font-size: 15px !important;
background: none !important;
line-height: 1.4 !important;
position: fixed !important;
z-index: 99999998 !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
border: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: hidden !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
will-change: opacity, visibility;
opacity: 0 !important;
visibility: hidden !important;
pointer-events: none !important;
-webkit-transition: opacity 0.4s ease, visibility 0.4s ease !important;
-o-transition: opacity 0.4s ease, visibility 0.4s ease !important;
transition: opacity 0.4s ease, visibility 0.4s ease !important;
/* default */
}
#iubenda-cs-banner [class*=" iub"],
#iubenda-cs-banner [class^=iub],
#iubenda-cs-banner .iubenda-banner-content:not(.iubenda-custom-content) * {
font-size: 100% !important;
width: auto !important;
-webkit-appearance: none !important;
-moz-appearance: none !important;
appearance: none !important;
background: none !important;
-webkit-box-sizing: border-box !important;
box-sizing: border-box !important;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
-webkit-backface-visibility: hidden !important;
backface-visibility: hidden !important;
font-family: -apple-system, sans-serif !important;
text-decoration: none !important;
color: currentColor !important;
background-attachment: scroll !important;
background-color: transparent !important;
background-image: none !important;
background-position: 0 0 !important;
background-repeat: repeat !important;
border: 0 !important;
border-color: #000 !important;
border-color: currentColor !important;
border-radius: 0 !important;
border-style: none !important;
border-width: medium !important;
bottom: auto !important;
clear: none !important;
clip: auto !important;
counter-increment: none !important;
counter-reset: none !important;
direction: inherit !important;
float: none !important;
font-style: inherit !important;
font-variant: normal !important;
font-weight: inherit !important;
height: auto !important;
left: auto !important;
letter-spacing: normal !important;
line-height: inherit !important;
list-style-type: inherit !important;
list-style-position: outside !important;
list-style-image: none !important;
margin: 0 !important;
max-height: none !important;
max-width: none !important;
min-height: 0 !important;
min-width: 0 !important;
opacity: 1;
outline: 0 !important;
overflow: visible !important;
padding: 0 !important;
position: static !important;
quotes: "" "" !important;
right: auto !important;
table-layout: auto !important;
text-align: left !important;
text-indent: 0 !important;
text-transform: none !important;
top: auto !important;
unicode-bidi: normal !important;
vertical-align: baseline !important;
visibility: inherit !important;
white-space: normal !important;
width: auto !important;
word-spacing: normal !important;
z-index: auto !important;
background-origin: padding-box !important;
background-origin: padding-box !important;
background-clip: border-box !important;
background-size: auto !important;
-o-border-image: none !important;
border-image: none !important;
border-radius: 0 !important;
border-radius: 0 !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
-webkit-column-count: auto !important;
-moz-column-count: auto !important;
column-count: auto !important;
-webkit-column-gap: normal !important;
-moz-column-gap: normal !important;
column-gap: normal !important;
-webkit-column-rule: medium none #000 !important;
-moz-column-rule: medium none #000 !important;
column-rule: medium none #000 !important;
-webkit-column-span: none !important;
-moz-column-span: none !important;
column-span: none !important;
-webkit-column-width: auto !important;
-moz-column-width: auto !important;
column-width: auto !important;
-webkit-font-feature-settings: normal !important;
font-feature-settings: normal !important;
overflow-x: visible !important;
overflow-y: visible !important;
-webkit-hyphens: manual !important;
-ms-hyphens: manual !important;
hyphens: manual !important;
-webkit-perspective: none !important;
perspective: none !important;
-webkit-perspective-origin: 50% 50% !important;
perspective-origin: 50% 50% !important;
text-shadow: none !important;
-webkit-transition: all 0s ease 0s !important;
-o-transition: all 0s ease 0s !important;
transition: all 0s ease 0s !important;
-webkit-transform: none !important;
-ms-transform: none !important;
transform: none !important;
-webkit-transform-origin: 50% 50% !important;
-ms-transform-origin: 50% 50% !important;
transform-origin: 50% 50% !important;
-webkit-transform-style: flat !important;
transform-style: flat !important;
word-break: normal !important;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
#iubenda-cs-banner .iub-popover-trigger {
display: inline-block !important;
text-decoration: underline !important;
-webkit-text-decoration-style: dashed !important;
text-decoration-style: dashed !important;
position: relative !important;
margin-right: 16px !important;
cursor: pointer !important;
line-height: 1.25 !important;
}
#iubenda-cs-banner .iub-popover-trigger:before, #iubenda-cs-banner .iub-popover-trigger:after {
content: "";
display: inline-block;
width: 14px;
height: 14px;
border-radius: 12px;
vertical-align: middle;
background-size: 4px;
position: absolute;
left: calc(100% + 2px);
top: 3px;
}
#iubenda-cs-banner .iub-popover-trigger:before {
background-color: currentColor;
opacity: 0.35;
}
#iubenda-cs-banner .iub-popover-trigger:after {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='13' viewBox='0 0 7 13'%3E%3Cg fill='%23FFF' fill-rule='evenodd'%3E%3Cpath d='M2.779 1.288a1.287 1.287 0 112.574 0 1.287 1.287 0 01-2.574 0zM5.467 10.422l.903 1.851-.7.341a2.496 2.496 0 01-3.545-2.717l.818-3.252a.42.42 0 00-.178-.382.422.422 0 00-.452-.041l-.844.412-.902-1.852.843-.412a2.491 2.491 0 012.576.233 2.49 2.49 0 01.989 2.389 1.105 1.105 0 01-.02.095l-.817 3.253a.42.42 0 00.178.382c.08.059.244.142.451.041l.7-.341z'/%3E%3C/g%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
#iubenda-cs-banner .iub-popover {
position: absolute !important;
top: 24px !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
border-radius: 4px !important;
background-color: white !important;
color: #222 !important;
z-index: 2 !important;
-webkit-box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
opacity: 0 !important;
visibility: hidden !important;
-webkit-transform: translateY(24px) !important;
-ms-transform: translateY(24px) !important;
transform: translateY(24px) !important;
-webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
-o-transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
z-index: 99 !important;
pointer-events: none !important;
overflow: hidden !important;
}
#iubenda-cs-banner .iub-popover-header {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important;
z-index: 1 !important;
-webkit-box-shadow: 0 16px 16px #FFF !important;
box-shadow: 0 16px 16px #FFF !important;
}
#iubenda-cs-banner .iub-popover-header > * {
padding: 24px !important;
padding-bottom: 0 !important;
}
#iubenda-cs-banner .iub-popover-header-title {
font-size: 18px !important;
font-weight: bold !important;
}
#iubenda-cs-banner .iub-popover-header-close {
font-size: 24px !important;
font-weight: 300 !important;
cursor: pointer !important;
line-height: 1 !important;
position: relative !important;
top: -2px !important;
}
#iubenda-cs-banner .iub-popover-content {
font-size: 14px !important;
-webkit-box-flex: 1 !important;
-ms-flex: 1 !important;
flex: 1 !important;
font-weight: 300 !important;
line-height: 1.5 !important;
position: relative !important;
}
#iubenda-cs-banner .iub-popover-content > div {
padding: 0 24px !important;
overflow-y: auto !important;
height: 100% !important;
}
#iubenda-cs-banner .iub-popover-content > div:before, #iubenda-cs-banner .iub-popover-content > div:after {
content: "";
display: block;
height: 24px;
}
#iubenda-cs-banner .iub-popover-content h3 {
margin-bottom: 16px !important;
font-weight: bold !important;
}
#iubenda-cs-banner .iub-popover-content p:not(:last-of-type) {
margin-bottom: 16px !important;
}
#iubenda-cs-banner .iub-popover-content a {
text-decoration: underline !important;
cursor: pointer !important;
opacity: 0.8 !important;
}
#iubenda-cs-banner .iub-popover-content b, #iubenda-cs-banner .iub-popover-content strong {
font-weight: bold !important;
}
#iubenda-cs-banner .iub-popover-content i, #iubenda-cs-banner .iub-popover-content em {
font-style: italic !important;
}
#iubenda-cs-banner .iub-popover-content:after {
position: absolute;
content: "";
display: block;
height: 24px;
pointer-events: none;
left: 0;
right: 0;
bottom: 0;
background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white));
background: -o-linear-gradient(top, rgba(255, 255, 255, 0) 0%, white 100%);
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, white 100%);
}
#iubenda-cs-banner.iubenda-cs-default-floating .iub-popover {
left: 8px !important;
right: 8px !important;
}
@media (min-width: 640px) {
#iubenda-cs-banner.iubenda-cs-default .iub-popover {
max-width: 992px !important;
margin: 0 auto !important;
}
#iubenda-cs-banner.iubenda-cs-default.iubenda-cs-top .iub-popover {
top: 16px !important;
bottom: -16px !important;
}
#iubenda-cs-banner.iubenda-cs-default.iubenda-cs-bottom .iub-popover {
top: -16px !important;
bottom: 16px !important;
}
}
#iubenda-cs-banner.iub-popover-visible .iub-popover {
opacity: 1 !important;
visibility: visible !important;
-webkit-transform: translateY(0) !important;
-ms-transform: translateY(0) !important;
transform: translateY(0) !important;
pointer-events: auto !important;
}
#iubenda-cs-banner.iubenda-cs-overlay:before {
content: "" !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
background-color: rgba(0, 0, 0, 0.5) !important;
z-index: 1 !important;
pointer-events: auto !important;
}
#iubenda-cs-banner.iubenda-cs-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important;
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important;
}
#iubenda-cs-banner.iubenda-cs-top {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important;
}
#iubenda-cs-banner.iubenda-cs-bottom {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important;
}
#iubenda-cs-banner.iubenda-cs-left {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important;
}
#iubenda-cs-banner.iubenda-cs-right {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important;
}
#iubenda-cs-banner.iubenda-cs-visible {
opacity: 1 !important;
visibility: visible !important;
}
#iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container {
pointer-events: auto !important;
}
#iubenda-cs-banner.iubenda-cs-slidein .iubenda-cs-container {
-webkit-transition: -webkit-transform 0.4s ease !important;
transition: -webkit-transform 0.4s ease !important;
-o-transition: transform 0.4s ease !important;
transition: transform 0.4s ease !important;
transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}
#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-top .iubenda-cs-container {
-webkit-transform: translateY(-48px) !important;
-ms-transform: translateY(-48px) !important;
transform: translateY(-48px) !important;
}
#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-bottom .iubenda-cs-container {
-webkit-transform: translateY(48px) !important;
-ms-transform: translateY(48px) !important;
transform: translateY(48px) !important;
}
#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-visible .iubenda-cs-container {
-webkit-transform: translateY(0) !important;
-ms-transform: translateY(0) !important;
transform: translateY(0) !important;
}
#iubenda-cs-banner .iubenda-cs-container {
position: relative !important;
z-index: 2 !important;
}
#iubenda-cs-banner .iubenda-cs-brand {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
padding: 16px !important;
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important;
}
#iubenda-cs-banner .iubenda-cs-brand > div {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important;
}
#iubenda-cs-banner .iubenda-cs-brand img {
max-width: 192px !important;
max-height: 56px !important;
}
#iubenda-cs-banner .iubenda-cs-content {
position: relative !important;
z-index: 1 !important;
overflow: hidden !important;
-webkit-transition: -webkit-transform 0.4s ease !important;
transition: -webkit-transform 0.4s ease !important;
-o-transition: transform 0.4s ease !important;
transition: transform 0.4s ease !important;
transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}
#iubenda-cs-banner .iubenda-cs-rationale {
position: relative !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
}
#iubenda-cs-banner .iubenda-cs-close-btn {
position: absolute !important;
top: -2px !important;
padding: 16px !important;
right: 0 !important;
min-width: 48px !important;
height: 48px !important;
font-size: 24px !important;
line-height: 0 !important;
font-weight: lighter !important;
cursor: pointer !important;
text-align: center !important;
}
#iubenda-cs-banner .iubenda-cs-close-btn:hover {
opacity: 0.5 !important;
}
#iubenda-cs-banner .iubenda-banner-content {
font-weight: 300 !important;
margin: 16px !important;
margin-bottom: 0 !important;
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important;
overflow-y: auto !important;
mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
padding-bottom: 32px !important;
}
#iubenda-cs-banner .iubenda-banner-content-padded {
padding-right: 32px !important;
}
#iubenda-cs-banner .iubenda-banner-content a {
cursor: pointer !important;
color: currentColor !important;
opacity: 0.7 !important;
text-decoration: underline !important;
}
#iubenda-cs-banner .iubenda-banner-content a:hover {
opacity: 1 !important;
}
#iubenda-cs-banner #iubenda-cs-title {
font-weight: bold !important;
margin-bottom: 16px !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group {
margin: 16px !important;
z-index: 1 !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
margin-top: 0 !important;
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group > div {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
@media (min-width: 640px) {
#iubenda-cs-banner .iubenda-cs-opt-group {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important;
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group-custom {
margin-right: auto !important;
-ms-flex-item-align: start !important;
align-self: start !important;
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group-consent {
margin-left: auto !important;
-ms-flex-item-align: end !important;
align-self: end !important;
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important;
}
}
@media (max-width: 639px) {
#iubenda-cs-banner .iubenda-cs-opt-group {
margin: 12px !important;
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group-custom {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2;
}
#iubenda-cs-banner .iubenda-cs-opt-group-consent {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1;
}
}
#iubenda-cs-banner .iubenda-cs-opt-group button {
-webkit-appearance: none !important;
-moz-appearance: none !important;
appearance: none !important;
padding: 8px 32px !important;
border-radius: 64px !important;
cursor: pointer !important;
font-weight: bold !important;
font-size: 100% !important;
margin-top: 4px !important;
margin-bottom: 4px !important;
text-align: center !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button:focus {
opacity: 0.8 !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button:hover {
opacity: 0.5 !important;
}
@media (min-width: 640px) {
#iubenda-cs-banner .iubenda-cs-opt-group button:not(:last-of-type) {
margin-right: 8px !important;
}
}
@media (max-width: 639px) {
#iubenda-cs-banner .iubenda-cs-opt-group button {
padding: 8px 24px !important;
width: 100% !important;
display: block;
text-align: center !important;
margin: 6px 3px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
margin: 0 -8px 0 !important;
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
margin: -8px -8px 0 !important;
}
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
margin: 0 auto !important;
width: calc(992px - 32px) !important;
}
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
margin: 0 8px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-container {
width: 100% !important;
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
width: 992px !important;
margin: 16px auto !important;
}
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-content {
padding: 8px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand {
margin: -8px -8px 0 !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand div {
margin: 8px !important;
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-container {
width: 992px !important;
}
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-top .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-bottom .iubenda-cs-container {
width: 100% !important;
}
}
@media (min-width: 640px) {
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-container {
width: 480px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group > div {
width: 100% !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group button {
display: block !important;
width: 100% !important;
text-align: center !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-custom {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-consent {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1;
}
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
-webkit-box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
padding: 8px !important;
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
border-radius: 4px !important;
margin: 16px !important;
}
}
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-container,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-content,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-rationale {
height: 100% !important;
}
#iubenda-cs-banner.iubenda-cs-fix-height.iubenda-cs-default-floating .iubenda-cs-content {
height: calc(100% - 32px) !important;
}
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-brand img {
max-width: 75% !important;
}
#iubenda-cs-banner .iubenda-cs-content {
background-color: #000000 !important;
color: #FFFFFF !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group {
color: #000000 !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button {
background-color: rgba(255, 255, 255, 0.1) !important;
color: #FFFFFF !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-btn-primary {
background-color: #0073CE !important;
color: #FFFFFF !important;
}
/*
-----------------
MOBILE SDK
-----------------
*/
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible {
justify-content: center!important;
align-items: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container {
max-height: 100%!important;
display: flex!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content {
height: auto!important;
border-radius: 0!important;
margin: 0!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
text-align: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-close-btn {
display: none!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
display: flex!important;
flex-direction: column!important;
height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content {
flex: 1;
overflow-y: auto!important;
margin: 0!important;
padding: 16px 16px 48px!important;
max-height: inherit!important;
mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
}
@media (min-width: 992px) {
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
margin: 24px!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
width: 100% !important;
margin: 0 !important;
}
}
.no-banner #iubenda-cs-banner {
display: none!important;
}
/** fix scrolling in iOS 10 **/
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-top-container {
position: relative!important;
}
.iubenda-mobile-sdk #iubenda-iframe #iab-container {
position: absolute!important;
top: 0!important;
bottom: 0!important;
left: 0!important;
right: 0!important;
}
/** iframe **/
.iubenda-mobile-sdk #iubenda-iframe #iubenda-iframe-popup {
height: 100%!important;
width: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-close-btn {
display: none!important;
}
.iubenda-mobile-sdk #iubenda-iframe {
background-color: transparent!important;
}
/* Fix cookie policy trimming on older Android devices */
.iubenda-mobile-sdk #iubenda-iframe iframe {
background-color: transparent!important;
position:absolute!important;
bottom:0!important;
top:0!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-spinner {
top: 50px !important;
}
/* Fix TCF widget overlapping footer in older Android devices */
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-footer {
z-index: 9999!important;
}
config.json:
{
"banner": {
"acceptButtonDisplay": "true",
"customizeButtonDisplay": "true",
"backgroundColor": "#000000",
"textColor": "#FFFFFF",
"acceptButtonColor": "#FD1D1D",
"acceptButtonCaptionColor": "white",
"customizeButtonColor": "transparent",
"customizeButtonCaptionColor": "#FFF"
}
}
A differenza della versione standard della Cookie Solution, l’opzione TCF è abilitata per impostazione predefinita nell’SDK. Se non esegui annunci personalizzati di terze parti e desideri disabilitare il supporto TCF, imposta enableTcf: false
nel file config.json.
Esempio:
{
…
enableTcf: false,
"banner": {
…
}
}
invalidateConsentBefore
Accetta una data e, se valida, controlla se è già stata espressa una preferenza. Quando il timestamp è precedente al giorno della data configurata, la preferenza non verrà più considerata. Formati accettati: gg/MM/aaaa – aaaa/MM/gg – gg-MM-aaaa – aaa-MM-gg – gg.MM.aaaa – aaaaa.MM.gg
expireAfter
Se valido, il numero di giorni del timestamp del consenso verrà confrontato con il valore intero del parametro expireAfter
. Se la data del consenso è passata, i dati sul dispositivo verranno cancellati (valore predefinito: 360 giorni)
Esempio:
{
…
"invalidateConsentBefore": "08/11/2022",
"expireAfter": 100,
…
}
}
Metodo | Descrizione |
---|---|
askConsent() | Presenta l’interfaccia utente di consenso all’avvio dell’app |
openPreferences() | (già editConsent, ora obsoleto) Consente agli utenti di modificare le preferenze relative al consenso quando è già stato dato. Se non è stato espresso, viene visualizzata la richiesta per indicare le preferenze di consenso. |
Per presentare l’interfaccia utente di consenso all’avvio dell’app, chiama IubendaCMP.askConsent(from: self)
dal metodo di viewDidLoad
del ViewController principale:
skipNoticeWhenOffline
non sia impostato su false); IubendaCMP.askConsent(from: self)
mostrerà la richiesta per indicare le preferenze di consenso.Tieni presente che se hai impostato forceConsent
su false, IubendaCMP.askConsent(from: self)
non avrà effetto se l’utente ignora la richiesta di consenso dopo il primo lancio. Per mostrare di nuovo l’interfaccia utente di consenso, dovrai chiamare IubendaCMP.openPreferences(from: self)
.
Quindi, se vuoi aumentare al massimo i consensi:
forceConsent
su true e IubendaCMP.askConsent(from: self)
Invece, se preferisci dare agli utenti la possibilità di ignorare la richiesta di consenso senza mostrarla di nuovo ogni volta che viene richiamato IubendaCMP.askConsent(from: self)
:
forceConsent
su falseIubendaCMP.askConsent(from: self)
, tenendo presente che non avrà effetto dopo il primo lancioIubendaCMP.openPreferences(from: self)
Note su IubendaCMP.openPreferences()
:
IubendaCMP.openPreferences()
aprirà la richiesta di consenso.IubendaCMP.openPreferences()
consentirà agli utenti di modificare le preferenze relative al consenso:
"perPurposeConsent": true
, mostrerà le preferenze per categoria."perPurposeConsent": false
, mostrerà le preferenze relative al consenso TCF."perPurposeConsent": false
e "enableTcf": false
, mostrerà la Cookie policy.Per controllare quando mostrare la richiesta di consenso, puoi utilizzare semplicemente IubendaCMP.openPreferences(from: self)
, ma dovrai comunque verificare se il consenso è stato dato.
Per chiedere il consenso agli utenti senza mostrare il popup, puoi utilizzare un’interfaccia utente personalizzata. In questo caso, puoi sfruttare i seguenti metodi di IubendaCMP
:
Metodo | Descrizione |
---|---|
accept() | (già acceptDefaultConsent, ora obsoleto) Imposta il consenso predefinito in background |
reject() | Rifiuta il consenso predefinito in background |
openTcfPreferences() | (già showConsentPreferences, ora obsoleto) Apre un popup per impostare le preferenze relative al consenso TCF |
openTcfVendorsPreferences() | (già showVendorsPreferences, ora obsoleto) Apre un popup per impostare le preferenze relative ai vendor |
openCookiePolicy() | (già showCookiePolicy, ora obsoleto) Apre un popup che mostra la Cookie policy |
shouldGetConsent() | Chiama questa funzione per verificare se devi chiedere il consenso dell’utente o se è già stata espressa una preferenza |
isPurposeEnabled(id) | Se perPurposeConsent è true, a sua volta restituisce true in caso di consenso dato per la finalità specificata nel parametro numerico id . |
isConsentGiven() | Se perPurposeConsent è false , restituisce true in caso di consenso accettato, altrimenti restituisce false |
clearData() | Cancella i segnali di consenso CMP raccolti nella precedente interazione utente |
config | Recupera la configurazione inizializzata nella classe AppDelegate |
shouldGetConsentForInvalidateConsentBefore() | Chiama questa funzione per verificare se devi chiedere il consenso dell’utente quando il timestamp è precedente al giorno del parametro di data invalidateConsentBefore configurato |
getVendorList(version: , callback:) | Restituisce l’elenco dei vendor. Se il parametro facoltativo version non è impostato, restituirà l’ultimo elenco dei vendor. Considera il parametro callback per i risultati di successo ed errore |
getUserPreferences() | Restituisce le preferenze utente salvate, comprese quelle relative la consenso |
setUserPreferences() | Imposta le preferenze utente con aggiunte relative a consenso e dati TCF dal servizio web |
canOpenPreferences() | Restituisce true in caso di preferenze salvate |
requestAttConsent() | Apre l’avviso per le autorizzazioni di sistema ATT. Se l’utente rifiuta il tracciamento, cancella le preferenze sul dispositivo |
getATTStatus() | Restituisce lo stato ATT del consenso utente, che può essere “Accepted” o “Denied”. Nota: in base alla documentazione ATT di Apple, gli stati .denied , .notDetermined e .restricted sono classificati come “Denied”. |
Note su IubendaCMP.accept()
:
Quando si applica un metodo open*
, puoi utilizzare una funzione di monitoraggio delle notifiche (vedi più avanti) per rilevare quando l’utente ha dato il consenso.
Esempio:
import UIKit
import iubenda
class ConsentViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(consentDidChange),
name: NSNotification.Name.ConsentChanged,
object: nil
)
}
@IBAction func acceptClick(_ sender: Any) {
IubendaCMP.accept()
dismiss(animated: true)
}
@IBAction func optionsClick(_ sender: Any) {
IubendaCMP.openTcfPreferences(from: self)
}
@objc func consentDidChange() {
if IubendaCMP.isConsentGiven() {
dismiss(animated: true)
}
}
}
Se necessario, è possibile rilevare le modifiche al consenso utente tramite NotificationCenter
aggiungendo una funzione di monitoraggio per NSNotification.Name.ConsentChanged
:
private func observeConsentNotification() {
NotificationCenter.default.addObserver(
self,
selector: #selector(consentDidChange),
name: NSNotification.Name.ConsentChanged,
object: nil
)
}
@objc func consentDidChange() {
// ...
}
Puoi accedere alle impostazioni TCF di IAB, come la stringa di consenso codificata, direttamente dalle specifiche IAB o tramite i metodi offerti da IubendaCMP.storage
.
Metodo | Descrizione |
---|---|
consentString | Stringa di consenso |
googlePersonalized | true se l’utente ha accettato l’opzione per gli annunci personalizzati di Google |
subjectToGDPR | Impostazione SubjectToGdpr |
cmpPresent | true se è presente una CMP |
VendorConsents | Stringa binaria relativa ai vendor |
PurposeConsents | Stringa binaria relativa alle finalità |
isPurposeConsentGivenFor(id) | Restituisce se il consenso è stato dato per l’ID di finalità trasmesso |
isVendorConsentGivenFor(id) | Restituisce se il consenso è stato dato per l’ID di vendor trasmesso |
consentTimestamp | Restituisce il timestamp del consenso (a partire da v1.3.2) |
isPreferenceExpressed() | Restituisce true se l’SDK rileva una preferenza valida già memorizzata. “valid” indica che se la preferenza viene invalidata da invalidateConsentBefore , allora il metodo dovrebbe restituire false |
Per ulteriori informazioni sul TCF e sulle relative impostazioni avanzate, come la possibilità di limitare le finalità e determinare la base giuridica applicabile (consenso e/o legittimo interesse), leggi la nostra guida al TCF.
Come spiegato nella documentazione di Google alla sezione “Requisiti per pubblicare annunci non personalizzati”, Google non supporta i casi in cui il consenso è stato negato, neanche per gli annunci non personalizzati. Di conseguenza, non viene pubblicato nessun tipo di annuncio.
Per le librerie di terze parti che non aderiscono direttamente al Transparency and Consent Framework di IAB, è possibile che debbano essere inizializzate separatamente a seconda dello stato e delle preferenze di consenso.
A tale scopo, puoi implementare un listener per il rilevamento delle modifiche in AppDelegate e chiamare IubendaCMP.isConsentGiven()
e altri metodi per valutare lo stato del consenso.
Esempio:
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let config = IubendaCMPConfiguration() config.gdprEnabled = true config.googleAds = true config.siteId = "12345" config.cookiePolicyId = "252372" IubendaCMP.initialize(with: config) observeConsentNotification() initializeLibraries() return true } private func observeConsentNotification() { NotificationCenter.default.addObserver( self, selector: #selector(consentDidChange), name: NSNotification.Name.ConsentChanged, object: nil ) } @objc func consentDidChange() { initializeLibraries() } private func initializeLibraries() { if (IubendaCMP.isConsentGiven()) { if (IubendaCMP.isGooglePersonalized()) { // enable Google personalized ADs } else { // disable Google personalized ADs } // setup other libraries } } }
A partire da iOS 14.5 (aprile 2021), Apple richiede la massima trasparenza in merito ai dati utilizzati e alle aziende terze che tracceranno l’attività utente nelle app.
Se vuoi richiedere l’autorizzazione a tracciare l’attività utente e accedere all’identificativo per gli inserzionisti del dispositivo, devi pertanto applicare la funzione AppTrackingTransparency (ATT). Puoi anche aggiungere altre richieste di autorizzazione ai fini della compliance normativa, ad esempio per la direttiva ePrivacy o il GDPR. L’importante è che l’app rispetti sempre la risposta dell’utente alla richiesta di AppTrackingTransparency, anche se in conflitto con altre richieste.
In base al punto 5.1.1 (iv) delle linee guida di Apple: “Le app devono rispettare le impostazioni di autorizzazione dell’utente e non tentare di manipolare, aggirare o obbligare a prestare il consenso all’accesso ai dati non necessari”.
Rientra in questi casi l’alterazione della risposta AppTrackingTransparency di un utente per attenersi all’autorizzazione concessa ad altre richieste. Per aggiungere queste richieste di autorizzazione puoi usare piattaforme di gestione del consenso di terze parti, purché non venga effettuato alcun tracciamento da tale utilizzo.
Per la massima conformità alle norme di Apple per la trasparenza sul tracciamento delle app (evitando così il rifiuto dall’App Store), nonché ai requisiti previsti dalla direttiva ePrivacy o dal GDPR, devi chiedere l’autorizzazione utente tramite ATT e il consenso utente tramite la nostra CMP.
Per combinare la CMP di iubenda con la funzione ATT di Apple, puoi chiedere l’autorizzazione utente manualmente tramite ATT o impostare automaticHandlingOfAtt
su true e poi raccogliere il consenso dalla CMP solo e soltanto se l’utente ha concesso l’autorizzazione tramite ATT.
Se vuoi gestire l’avviso per le autorizzazioni di sistema tramite l’SDK di iubenda, imposta NSUserTrackingUsageDescription
. Per ulteriori informazioni su questa operazione, consulta la documentazione di Apple. Dopo di che, imposta il parametro automaticHandlingOfAtt
dell’oggetto IubendaCMPConfiguration
su true
nella classe AppDelegate
.
Tieni presente che l’app deve sempre rispettare la risposta dell’utente alla richiesta AppTrackingTransparency, anche in caso di conflitto con la risposta ricevuta tramite la nostra CMP.
Ad esempio, se l’utente non fornisce l’autorizzazione tramite l’avviso ATT, è molto probabile che non presti il consenso neanche tramite la CMP.
In questo caso, puoi evitare di chiamare il metodo askConsent
per non visualizzare la CMP e considerare il consenso rifiutato per tutte le finalità dichiarate. Se utilizzi automaticHandlingOfAtt = true
, il metodo askConsent
mostrerà prima l’avviso per le autorizzazioni di sistema ATT di Apple e poi, a seconda della scelta dell’utente, l’SDK mostrerà il popup per la richiesta di consenso.
Inoltre, se l’utente modifica le preferenze espresse negando le autorizzazioni concesse in precedenza tramite le impostazioni dell’applicazione, puoi invocare il metodo clearData()
, che cancella i segnali di consenso CMP raccolti nell’interazione utente precedente. Se usi automaticHandlingOfAtt = true
, allora l’SDK di iubenda invocherà il metodo clearData()
.
La CMP non si attiverà fino a quando l’utente non cambierà di nuovo le preferenze e fornirà il permesso tramite le impostazioni dell’applicazione.
È necessaria una connessione Internet per mostrare il popup di consenso e generare o aggiornare di conseguenza la stringa di consenso nella libreria, mentre l’ultima stringa di consenso è sempre disponibile nell’archiviazione locale tramite IubendaCMP.storage
.
Per impostazione predefinita, il metodo askConsent
controlla se è presente una connessione Internet prima di lanciare il popup. Se non c’è connessione, il popup non viene mostrato, ma verrà presentato al lancio successivo.
Se si verifica un errore durante il flusso di consenso, invece, viene mostrato un messaggio di errore con l’opzione per riprovare o chiudere il popup. In questo caso, l’impostazione forceConsent=true
permette di mostrare di nuovo il popup se non è stato dato alcun consenso.
Leggi questa guida per scoprire come implementare l’API di Consent Database per sincronizzare le preferenze relative al consenso tra siti e app per ogni utente autenticato.
automaticHandlingOfAtt
, canOpenPreferences()
, requestAttConsent()
, getATTStatus()
aggiunti a iubendaCMP
reject()
aggiunto alla classe IubendaCMP
landscapeWidth
, landscapeHeight
, portraitWidth
, portraitHeight
aggiunti a IubendaCMPConfiguration
getPreferencesJson
aggiunto alla classe IubendaCMP
dismissColor
aggiunto alla classe IubendaCMPConfig
per la personalizzazione del pulsante di chiusuraisGooglePersonalized()
diventato obsoletoproxyUrl(baseUrl)
aggiunto per riscrivere l’URL utilizzato per incorporare la Cookie SolutionsaveConsent(preferencesJson,timestamp)
correttaisPreferenceExpressed()
aggiuntoisConsentGiven()
correttoexpireAfter
aggiunta a config.json
per eseguire il confronto con la data di consenso salvata e cancellare i dati se necessarioinvalidateConsentBefore
aggiunto alla classe IubendaCMP per eseguire il confronto con la data di consenso salvata e mostrare nuovamente la richiesta di consenso se necessarioshouldGetConsentForInvalidateConsentBefore
() aggiunta alla classe IubendaCMP per chiamare l’interfaccia utente personalizzataIubendaCMP.storage
BannerPosition
aggiunto alla classe IubendaCMPConfiguration per personalizzare la posizione del banner di consenso (valore predefinito: CENTER)forceConsent=true
con enableTcf=false
enableTcf=false
e forceConsent=false
IubendaCMP.clearData()
aggiunto per cancellare i segnali di consenso CMP raccolti ogni volta che un utente cambia le preferenze espresse negando le autorizzazioni concesse in precedenza tramite ATT.acceptDefaultConsent
, editConsent
, showConsentPreferences
, showVendorsPreferences
e showCookiePolicy
rinominati rispettivamente in accept
, openPreferences
, openTcfPreferences
, openTcfVendorsPreferences
e openCookiePolicy
isVendorConsentGivenFor(id)
e isPurposeConsentGivenFor(id)
aggiuntipreventDismissWhenLoaded
aggiuntahasConsent
diventato obsoleto e sostituito con isConsentGiven
shouldGetConsent
introdotta per implementazioni più personalizzatecsVersion
aggiuntasaveConsent()
e CMPStorage
cssContent
e jsonContent
introdottedismissColor
introdotta per impostare un colore personalizzato per il pulsante di chiusura (mostrato solo nel primo livello)skipNoticeWhenOffline
forceConsent
acceptIfDismissed
introdottaAggiungi il repository e la dipendenza seguenti al file build.gradle
:
repositories {
maven { url "https://libraries.iubenda.com/android" }
}
dependencies {
implementation "com.iubenda:mobile-sdk:2.6.4"
}
Per aggiornare automaticamente la versione della libreria in via di sviluppo, puoi impostare la dipendenza come segue:
"com.iubenda:mobile-sdk:2.6.+"
per gli aggiornamenti banali"com.iubenda:mobile-sdk:2.+"
per gli aggiornamenti minori"com.iubenda:mobile-sdk:+"
per tutti gli aggiornamentiCrea una nuova classe che estende android.app.Application
e impostala nel manifesto dell’app se non è già presente nel tuo progetto.
<application
android:name=".App"
...>
...
</application>
Nella classe Application, all’interno del metodo onCreate
, crea un oggetto di configurazione con le tue impostazioni e chiama IubendaCMP.initialize()
@Override
public void onCreate() {
super.onCreate();
IubendaCMPConfig config = IubendaCMPConfig.builder()
.gdprEnabled(true)
.siteId("12341234")
.cookiePolicyId("56785678")
.googleAds(true)
.cssResource(R.raw.custom_style)
.jsonResource(R.raw.config_json)
.applyStyles(true)
.build();
IubendaCMP.initialize(this, config);
}
Impostazione | Valore predefinito | Descrizione |
---|---|---|
csVersion | current | Consente di definire quale versione di Privacy Controls and Cookie Solution utilizzare. I valori accettati sono “current”, “beta”, “stable” o un numero di versione specifico |
gdprEnabled | false | Proxy per l’impostazione IABConsent_SubjectToGDPR di TCF di IAB. Se false, Mediation SDK può eseguire la mediazione in tutti gli SDK della rete di annunci. In caso contrario, Mediation SDK eseguirà la mediazione solo tra gli SDK della rete di annunci conformi al GDPR |
siteId | ID del sito del cliente su iubenda | |
cookiePolicyId | ID della Cookie policy del cliente su iubenda | |
forceConsent | true | Se true, la schermata del consenso sarà visibile fino a quando l’utente non accetta, in modo da aumentare al massimo i consensi. Se false, askConsent() non avrà alcun effetto se l’utente ignora la richiesta di consenso dopo il primo lancio |
googleAds | false | Se true, abilita la gestione del consenso per gli annunci personalizzati di Google |
jsonResource | Risorsa non elaborata (src/main/res/raw) per trasmettere la configurazione personalizzata all’interfaccia utente di consenso | |
jsonContent | Come sopra, ma impostato come stringa | |
jsonFile | Come sopra, ma impostato come file | |
cssResource | Risorsa non elaborata (src/main/res/raw) per applicare lo stile CSS personalizzato all’interfaccia utente di consenso in aggiunta al file di stile standard (applyStyles=true) o da solo (applyStyles=false) | |
cssContent | Come sopra, ma impostato come stringa | |
cssFile | Come sopra, ma impostato come file | |
cssUrl | Come sopra, ma impostato come stringa URL | |
applyStyles | true | Se true, all’interfaccia utente di consenso viene applicato lo stile CSS standard |
acceptIfDismissed | false | Se true e il file JS è pronto, quando l’utente ignora il popup, l’informativa viene accettata |
preventDismissWhenLoaded | false | Se true, una volta che il popup è caricato, non è possibile ignorarlo senza esprimere una preferenza |
skipNoticeWhenOffline | false | Se abilitato, askConsent() non mostrerà il popup in assenza di connessione Internet |
bannerPosition | center | Consente di impostare la posizione del popup per il banner di consenso in alto (“top”), in basso (“bottom”) o al centro (“center”) |
dismissColor | Consente di impostare un colore personalizzato per il pulsante di chiusura (×). Se non è impostato, verrà utilizzato il colore predefinito | |
landscapeHeight | Imposta l’altezza personalizzata per il primo livello in modalità orizzontale | |
landscapeWidth | Imposta la larghezza personalizzata per il primo livello in modalità orizzontale | |
portraitHeight | Imposta l’altezza personalizzata per il primo livello in modalità verticale | |
portraitWidth | Imposta la larghezza personalizzata per il primo livello in modalità verticale |
IubendaCMPConfig config = IubendaCMPConfig.builder()
.gdprEnabled(true)
.siteId("12341234")
.cookiePolicyId("56785678")
.forceConsent(true)
.googleAds(true)
.applyStyles(false)
.cssResource(R.raw.custom_style)
.jsonResource(R.raw.config)
.acceptIfDismissed(true)
.build();
custom_style.css:
/***************************************************************************
// * iubenda Privacy Controls and Cookie Solution *
// * *
// * Sample CSS v2.2.6 *
// * *
// * (c) 2019 iubenda srl <info@iubenda.com> *
// * All Rights Reserved. *
// * *
// *************************************************************************
//
// CHANGELOG
//
// 2.2.7 - 2020-06-18
// - Fix container breaking on mobile.
//
// 2.2.6 - 2020-05-27
// - Hide scroll bar visibility.
// - Fix brand image height on mobile.
//
// 2.2.5 - 2020-05-06
// - Fix IE flex content.
// - Fix text overflow.
//
// 2.2.3 - 2020-04-21
// - Cursor pointer
// - Button text ellipsis
// - Equalize shadows top/bottom modal bar
//
// 2.2.2 - 2020-04-06
// - Add pointer events auto to the overlay
//
// 2.2.1 - 2020-03-06
// - Introduce popover.
//
// 2.2.0 - 2019-11-07
// - Introduce brand customizations
//
// 2.1.5 - 2019-11-22
// - Add class to go fullscreen.
//
// 2.1.4 - 2020-03-25
// - Make the banner shadow darker
//
// 2.1.3 - 2020-01-22
// - Fix banner not appearing on iPhone.
//
// 2.1.2 - 2019-11-07
// - Fix buttons height on IE.
//
// 2.1.1 - 2019-10-30
// - Fix buttons margin and customize-advertising-tracking button width on mobile.
//
// 2.1.0 - 2019-10-24
// - Introduce text overflowing mask and style for reject button.
//
// 2.0.4 - 2019-06-24
// - Convert close button width to min-width
//
// 2.0.3 - 2019-05-24
// - Introduce new positioning options
//
// 2.0.2 - 2019-05-02
// - Fix text spaces when custom content
//
// 2.0.1 - 2019-04-09
// - Add rules for buttons group
//
// 2.0.0 - 2019-02-01
// - Full rewrite to accommodate the new markup
//
// 0.0.1 - 2015-04-01
// - First implementation of the sample CSS
*/
/*
-----------------
IMPORTANT: Changing the following values may prevent the notice from being displayed properly.
-----------------
*/
#iubenda-cs-banner {
font-size: 15px !important;
background: none !important;
line-height: 1.4 !important;
position: fixed !important;
z-index: 99999998 !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
border: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: hidden !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
will-change: opacity, visibility;
opacity: 0 !important;
visibility: hidden !important;
pointer-events: none !important;
-webkit-transition: opacity 0.4s ease, visibility 0.4s ease !important;
-o-transition: opacity 0.4s ease, visibility 0.4s ease !important;
transition: opacity 0.4s ease, visibility 0.4s ease !important;
/* default */
}
#iubenda-cs-banner [class*=" iub"],
#iubenda-cs-banner [class^=iub],
#iubenda-cs-banner .iubenda-banner-content:not(.iubenda-custom-content) * {
font-size: 100% !important;
width: auto !important;
-webkit-appearance: none !important;
-moz-appearance: none !important;
appearance: none !important;
background: none !important;
-webkit-box-sizing: border-box !important;
box-sizing: border-box !important;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
-webkit-backface-visibility: hidden !important;
backface-visibility: hidden !important;
font-family: -apple-system, sans-serif !important;
text-decoration: none !important;
color: currentColor !important;
background-attachment: scroll !important;
background-color: transparent !important;
background-image: none !important;
background-position: 0 0 !important;
background-repeat: repeat !important;
border: 0 !important;
border-color: #000 !important;
border-color: currentColor !important;
border-radius: 0 !important;
border-style: none !important;
border-width: medium !important;
bottom: auto !important;
clear: none !important;
clip: auto !important;
counter-increment: none !important;
counter-reset: none !important;
direction: inherit !important;
float: none !important;
font-style: inherit !important;
font-variant: normal !important;
font-weight: inherit !important;
height: auto !important;
left: auto !important;
letter-spacing: normal !important;
line-height: inherit !important;
list-style-type: inherit !important;
list-style-position: outside !important;
list-style-image: none !important;
margin: 0 !important;
max-height: none !important;
max-width: none !important;
min-height: 0 !important;
min-width: 0 !important;
opacity: 1;
outline: 0 !important;
overflow: visible !important;
padding: 0 !important;
position: static !important;
quotes: "" "" !important;
right: auto !important;
table-layout: auto !important;
text-align: left !important;
text-indent: 0 !important;
text-transform: none !important;
top: auto !important;
unicode-bidi: normal !important;
vertical-align: baseline !important;
visibility: inherit !important;
white-space: normal !important;
width: auto !important;
word-spacing: normal !important;
z-index: auto !important;
background-origin: padding-box !important;
background-origin: padding-box !important;
background-clip: border-box !important;
background-size: auto !important;
-o-border-image: none !important;
border-image: none !important;
border-radius: 0 !important;
border-radius: 0 !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
-webkit-column-count: auto !important;
-moz-column-count: auto !important;
column-count: auto !important;
-webkit-column-gap: normal !important;
-moz-column-gap: normal !important;
column-gap: normal !important;
-webkit-column-rule: medium none #000 !important;
-moz-column-rule: medium none #000 !important;
column-rule: medium none #000 !important;
-webkit-column-span: none !important;
-moz-column-span: none !important;
column-span: none !important;
-webkit-column-width: auto !important;
-moz-column-width: auto !important;
column-width: auto !important;
-webkit-font-feature-settings: normal !important;
font-feature-settings: normal !important;
overflow-x: visible !important;
overflow-y: visible !important;
-webkit-hyphens: manual !important;
-ms-hyphens: manual !important;
hyphens: manual !important;
-webkit-perspective: none !important;
perspective: none !important;
-webkit-perspective-origin: 50% 50% !important;
perspective-origin: 50% 50% !important;
text-shadow: none !important;
-webkit-transition: all 0s ease 0s !important;
-o-transition: all 0s ease 0s !important;
transition: all 0s ease 0s !important;
-webkit-transform: none !important;
-ms-transform: none !important;
transform: none !important;
-webkit-transform-origin: 50% 50% !important;
-ms-transform-origin: 50% 50% !important;
transform-origin: 50% 50% !important;
-webkit-transform-style: flat !important;
transform-style: flat !important;
word-break: normal !important;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
#iubenda-cs-banner .iub-popover-trigger {
display: inline-block !important;
text-decoration: underline !important;
-webkit-text-decoration-style: dashed !important;
text-decoration-style: dashed !important;
position: relative !important;
margin-right: 16px !important;
cursor: pointer !important;
line-height: 1.25 !important;
}
#iubenda-cs-banner .iub-popover-trigger:before, #iubenda-cs-banner .iub-popover-trigger:after {
content: "";
display: inline-block;
width: 14px;
height: 14px;
border-radius: 12px;
vertical-align: middle;
background-size: 4px;
position: absolute;
left: calc(100% + 2px);
top: 3px;
}
#iubenda-cs-banner .iub-popover-trigger:before {
background-color: currentColor;
opacity: 0.35;
}
#iubenda-cs-banner .iub-popover-trigger:after {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='13' viewBox='0 0 7 13'%3E%3Cg fill='%23FFF' fill-rule='evenodd'%3E%3Cpath d='M2.779 1.288a1.287 1.287 0 112.574 0 1.287 1.287 0 01-2.574 0zM5.467 10.422l.903 1.851-.7.341a2.496 2.496 0 01-3.545-2.717l.818-3.252a.42.42 0 00-.178-.382.422.422 0 00-.452-.041l-.844.412-.902-1.852.843-.412a2.491 2.491 0 012.576.233 2.49 2.49 0 01.989 2.389 1.105 1.105 0 01-.02.095l-.817 3.253a.42.42 0 00.178.382c.08.059.244.142.451.041l.7-.341z'/%3E%3C/g%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
#iubenda-cs-banner .iub-popover {
position: absolute !important;
top: 24px !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
border-radius: 4px !important;
background-color: white !important;
color: #222 !important;
z-index: 2 !important;
-webkit-box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
opacity: 0 !important;
visibility: hidden !important;
-webkit-transform: translateY(24px) !important;
-ms-transform: translateY(24px) !important;
transform: translateY(24px) !important;
-webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
-o-transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
z-index: 99 !important;
pointer-events: none !important;
overflow: hidden !important;
}
#iubenda-cs-banner .iub-popover-header {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important;
z-index: 1 !important;
-webkit-box-shadow: 0 16px 16px #FFF !important;
box-shadow: 0 16px 16px #FFF !important;
}
#iubenda-cs-banner .iub-popover-header > * {
padding: 24px !important;
padding-bottom: 0 !important;
}
#iubenda-cs-banner .iub-popover-header-title {
font-size: 18px !important;
font-weight: bold !important;
}
#iubenda-cs-banner .iub-popover-header-close {
font-size: 24px !important;
font-weight: 300 !important;
cursor: pointer !important;
line-height: 1 !important;
position: relative !important;
top: -2px !important;
}
#iubenda-cs-banner .iub-popover-content {
font-size: 14px !important;
-webkit-box-flex: 1 !important;
-ms-flex: 1 !important;
flex: 1 !important;
font-weight: 300 !important;
line-height: 1.5 !important;
position: relative !important;
}
#iubenda-cs-banner .iub-popover-content > div {
padding: 0 24px !important;
overflow-y: auto !important;
height: 100% !important;
}
#iubenda-cs-banner .iub-popover-content > div:before, #iubenda-cs-banner .iub-popover-content > div:after {
content: "";
display: block;
height: 24px;
}
#iubenda-cs-banner .iub-popover-content h3 {
margin-bottom: 16px !important;
font-weight: bold !important;
}
#iubenda-cs-banner .iub-popover-content p:not(:last-of-type) {
margin-bottom: 16px !important;
}
#iubenda-cs-banner .iub-popover-content a {
text-decoration: underline !important;
cursor: pointer !important;
opacity: 0.8 !important;
}
#iubenda-cs-banner .iub-popover-content b, #iubenda-cs-banner .iub-popover-content strong {
font-weight: bold !important;
}
#iubenda-cs-banner .iub-popover-content i, #iubenda-cs-banner .iub-popover-content em {
font-style: italic !important;
}
#iubenda-cs-banner .iub-popover-content:after {
position: absolute;
content: "";
display: block;
height: 24px;
pointer-events: none;
left: 0;
right: 0;
bottom: 0;
background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white));
background: -o-linear-gradient(top, rgba(255, 255, 255, 0) 0%, white 100%);
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, white 100%);
}
#iubenda-cs-banner.iubenda-cs-default-floating .iub-popover {
left: 8px !important;
right: 8px !important;
}
@media (min-width: 640px) {
#iubenda-cs-banner.iubenda-cs-default .iub-popover {
max-width: 992px !important;
margin: 0 auto !important;
}
#iubenda-cs-banner.iubenda-cs-default.iubenda-cs-top .iub-popover {
top: 16px !important;
bottom: -16px !important;
}
#iubenda-cs-banner.iubenda-cs-default.iubenda-cs-bottom .iub-popover {
top: -16px !important;
bottom: 16px !important;
}
}
#iubenda-cs-banner.iub-popover-visible .iub-popover {
opacity: 1 !important;
visibility: visible !important;
-webkit-transform: translateY(0) !important;
-ms-transform: translateY(0) !important;
transform: translateY(0) !important;
pointer-events: auto !important;
}
#iubenda-cs-banner.iubenda-cs-overlay:before {
content: "" !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
background-color: rgba(0, 0, 0, 0.5) !important;
z-index: 1 !important;
pointer-events: auto !important;
}
#iubenda-cs-banner.iubenda-cs-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important;
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important;
}
#iubenda-cs-banner.iubenda-cs-top {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important;
}
#iubenda-cs-banner.iubenda-cs-bottom {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important;
}
#iubenda-cs-banner.iubenda-cs-left {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important;
}
#iubenda-cs-banner.iubenda-cs-right {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important;
}
#iubenda-cs-banner.iubenda-cs-visible {
opacity: 1 !important;
visibility: visible !important;
}
#iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container {
pointer-events: auto !important;
}
#iubenda-cs-banner.iubenda-cs-slidein .iubenda-cs-container {
-webkit-transition: -webkit-transform 0.4s ease !important;
transition: -webkit-transform 0.4s ease !important;
-o-transition: transform 0.4s ease !important;
transition: transform 0.4s ease !important;
transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}
#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-top .iubenda-cs-container {
-webkit-transform: translateY(-48px) !important;
-ms-transform: translateY(-48px) !important;
transform: translateY(-48px) !important;
}
#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-bottom .iubenda-cs-container {
-webkit-transform: translateY(48px) !important;
-ms-transform: translateY(48px) !important;
transform: translateY(48px) !important;
}
#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-visible .iubenda-cs-container {
-webkit-transform: translateY(0) !important;
-ms-transform: translateY(0) !important;
transform: translateY(0) !important;
}
#iubenda-cs-banner .iubenda-cs-container {
position: relative !important;
z-index: 2 !important;
}
#iubenda-cs-banner .iubenda-cs-brand {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
padding: 16px !important;
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important;
}
#iubenda-cs-banner .iubenda-cs-brand > div {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important;
}
#iubenda-cs-banner .iubenda-cs-brand img {
max-width: 192px !important;
max-height: 56px !important;
}
#iubenda-cs-banner .iubenda-cs-content {
position: relative !important;
z-index: 1 !important;
overflow: hidden !important;
-webkit-transition: -webkit-transform 0.4s ease !important;
transition: -webkit-transform 0.4s ease !important;
-o-transition: transform 0.4s ease !important;
transition: transform 0.4s ease !important;
transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}
#iubenda-cs-banner .iubenda-cs-rationale {
position: relative !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
}
#iubenda-cs-banner .iubenda-cs-close-btn {
position: absolute !important;
top: -2px !important;
padding: 16px !important;
right: 0 !important;
min-width: 48px !important;
height: 48px !important;
font-size: 24px !important;
line-height: 0 !important;
font-weight: lighter !important;
cursor: pointer !important;
text-align: center !important;
}
#iubenda-cs-banner .iubenda-cs-close-btn:hover {
opacity: 0.5 !important;
}
#iubenda-cs-banner .iubenda-banner-content {
font-weight: 300 !important;
margin: 16px !important;
margin-bottom: 0 !important;
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important;
overflow-y: auto !important;
mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
padding-bottom: 32px !important;
}
#iubenda-cs-banner .iubenda-banner-content-padded {
padding-right: 32px !important;
}
#iubenda-cs-banner .iubenda-banner-content a {
cursor: pointer !important;
color: currentColor !important;
opacity: 0.7 !important;
text-decoration: underline !important;
}
#iubenda-cs-banner .iubenda-banner-content a:hover {
opacity: 1 !important;
}
#iubenda-cs-banner #iubenda-cs-title {
font-weight: bold !important;
margin-bottom: 16px !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group {
margin: 16px !important;
z-index: 1 !important;
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
margin-top: 0 !important;
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group > div {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
}
@media (min-width: 640px) {
#iubenda-cs-banner .iubenda-cs-opt-group {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important;
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group-custom {
margin-right: auto !important;
-ms-flex-item-align: start !important;
align-self: start !important;
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group-consent {
margin-left: auto !important;
-ms-flex-item-align: end !important;
align-self: end !important;
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important;
}
}
@media (max-width: 639px) {
#iubenda-cs-banner .iubenda-cs-opt-group {
margin: 12px !important;
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group-custom {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2;
}
#iubenda-cs-banner .iubenda-cs-opt-group-consent {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1;
}
}
#iubenda-cs-banner .iubenda-cs-opt-group button {
-webkit-appearance: none !important;
-moz-appearance: none !important;
appearance: none !important;
padding: 8px 32px !important;
border-radius: 64px !important;
cursor: pointer !important;
font-weight: bold !important;
font-size: 100% !important;
margin-top: 4px !important;
margin-bottom: 4px !important;
text-align: center !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button:focus {
opacity: 0.8 !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button:hover {
opacity: 0.5 !important;
}
@media (min-width: 640px) {
#iubenda-cs-banner .iubenda-cs-opt-group button:not(:last-of-type) {
margin-right: 8px !important;
}
}
@media (max-width: 639px) {
#iubenda-cs-banner .iubenda-cs-opt-group button {
padding: 8px 24px !important;
width: 100% !important;
display: block;
text-align: center !important;
margin: 6px 3px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
margin: 0 -8px 0 !important;
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
margin: -8px -8px 0 !important;
}
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
margin: 0 auto !important;
width: calc(992px - 32px) !important;
}
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
margin: 0 8px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-container {
width: 100% !important;
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
width: 992px !important;
margin: 16px auto !important;
}
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-content {
padding: 8px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand {
margin: -8px -8px 0 !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand div {
margin: 8px !important;
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-container {
width: 992px !important;
}
}
@media (max-width: 991px) {
#iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-top .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-bottom .iubenda-cs-container {
width: 100% !important;
}
}
@media (min-width: 640px) {
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-container {
width: 480px !important;
}
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group > div {
width: 100% !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group button {
display: block !important;
width: 100% !important;
text-align: center !important;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-custom {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2;
}
#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-consent {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1;
}
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
-webkit-box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
padding: 8px !important;
}
@media (min-width: 992px) {
#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
border-radius: 4px !important;
margin: 16px !important;
}
}
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-container,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-content,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-rationale {
height: 100% !important;
}
#iubenda-cs-banner.iubenda-cs-fix-height.iubenda-cs-default-floating .iubenda-cs-content {
height: calc(100% - 32px) !important;
}
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-brand img {
max-width: 75% !important;
}
#iubenda-cs-banner .iubenda-cs-content {
background-color: #000000 !important;
color: #FFFFFF !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group {
color: #000000 !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button {
background-color: rgba(255, 255, 255, 0.1) !important;
color: #FFFFFF !important;
}
#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-btn-primary {
background-color: #0073CE !important;
color: #FFFFFF !important;
}
/*
-----------------
MOBILE SDK
-----------------
*/
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible {
justify-content: center!important;
align-items: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container {
max-height: 100%!important;
display: flex!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content {
height: auto!important;
border-radius: 0!important;
margin: 0!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
text-align: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-close-btn {
display: none!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
display: flex!important;
flex-direction: column!important;
height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content {
flex: 1;
overflow-y: auto!important;
margin: 0!important;
padding: 16px 16px 48px!important;
max-height: inherit!important;
mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
}
@media (min-width: 992px) {
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
margin: 24px!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
width: 100% !important;
margin: 0 !important;
}
}
.no-banner #iubenda-cs-banner {
display: none!important;
}
/** fix scrolling in iOS 10 **/
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-top-container {
position: relative!important;
}
.iubenda-mobile-sdk #iubenda-iframe #iab-container {
position: absolute!important;
top: 0!important;
bottom: 0!important;
left: 0!important;
right: 0!important;
}
/** iframe **/
.iubenda-mobile-sdk #iubenda-iframe #iubenda-iframe-popup {
height: 100%!important;
width: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-close-btn {
display: none!important;
}
.iubenda-mobile-sdk #iubenda-iframe {
background-color: transparent!important;
}
/* Fix cookie policy trimming on older Android devices */
.iubenda-mobile-sdk #iubenda-iframe iframe {
background-color: transparent!important;
position:absolute!important;
bottom:0!important;
top:0!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-spinner {
top: 50px !important;
}
/* Fix TCF widget overlapping footer in older Android devices */
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-footer {
z-index: 9999!important;
}
config.json:
{
"banner": {
"acceptButtonDisplay": "true",
"customizeButtonDisplay": "true",
"backgroundColor": "#000000",
"textColor": "#FFFFFF",
"acceptButtonColor": "#FD1D1D",
"acceptButtonCaptionColor": "white",
"customizeButtonColor": "transparent",
"customizeButtonCaptionColor": "#FFF"
}
}
A differenza della versione standard della Cookie Solution, l’opzione TCF è abilitata per impostazione predefinita nell’SDK. Se non esegui annunci personalizzati di terze parti e desideri disabilitare il supporto TCF, imposta enableTcf: false
nel file config.json.
Esempio:
{
…
enableTcf: false,
"banner": {
…
}
}
invalidateConsentBefore
Accetta una data e, se valida, controlla se è già stata espressa una preferenza. Quando il timestamp è precedente al giorno della data configurata, la preferenza non verrà più considerata. Formati accettati: gg/MM/aaaa – aaaa/MM/gg – gg-MM-aaaa – aaa-MM-gg – gg.MM.aaaa – aaaaa.MM.gg
expireAfter
Se valido, il numero di giorni del timestamp del consenso verrà confrontato con il valore intero del parametro expireAfter
. Se la data del consenso è passata, i dati sul dispositivo verranno cancellati (valore predefinito: 360 giorni)
Esempio:
{
…
"invalidateConsentBefore": "08/11/2022",
"expireAfter": 100,
…
}
}
Metodo | Descrizione |
---|---|
askConsent() | Presenta l’interfaccia utente di consenso all’avvio dell’app |
openPreferences() | (già editConsent, ora obsoleto) Consente agli utenti di modificare le preferenze relative al consenso quando è già stato dato. Se non è stato espresso, viene visualizzata la richiesta per indicare le preferenze di consenso. |
Per presentare l’interfaccia utente di consenso all’avvio dell’app, chiama IubendaCMP.askConsent()
nel metodo onCreate
dell’attività principale:
skipNoticeWhenOffline
non sia impostato su false); IubendaCMP.askConsent()
mostrerà la richiesta per indicare le preferenze di consenso.Tieni presente che se hai impostato forceConsent
su false, IubendaCMP.askConsent()
non avrà effetto se l’utente ignora la richiesta di consenso dopo il primo lancio. Per mostrare di nuovo l’interfaccia utente di consenso, dovrai chiamare IubendaCMP.openPreferences()
.
Esempio:
public class DemoActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// automatically show the consent popup when needed
IubendaCMP.askConsent(this);
}
}
Quindi, se vuoi aumentare al massimo i consensi:
forceConsent
su true e IubendaCMP.askConsent()
Invece, se preferisci dare agli utenti la possibilità di ignorare la richiesta di consenso senza mostrarla di nuovo ogni volta che viene richiamato IubendaCMP.askConsent()
:
forceConsent
su falseIubendaCMP.askConsent()
, tenendo presente che non avrà effetto dopo il primo lancioIubendaCMP.openPreferences()
Note su IubendaCMP.openPreferences()
:
IubendaCMP.openPreferences()
aprirà la richiesta di consenso.IubendaCMP.openPreferences()
consentirà agli utenti di modificare le preferenze relative al consenso:
"perPurposeConsent": true
, mostrerà le preferenze per categoria."perPurposeConsent": false
, mostrerà le preferenze relative al consenso TCF."perPurposeConsent": false
e "enableTcf": false
, mostrerà la Cookie policy.Per controllare quando mostrare la richiesta di consenso, puoi utilizzare semplicemente IubendaCMP.openPreferences()
, ma dovrai comunque verificare se il consenso è stato dato.
Per chiedere il consenso agli utenti senza mostrare il popup puoi utilizzare un’attività personalizzata. In questo caso, puoi sfruttare i seguenti metodi di IubendaCMP
:
Metodo | Descrizione |
---|---|
accept() | (già acceptDefaultConsent, ora obsoleto) Imposta il consenso predefinito in background |
reject() | Rifiuta il consenso predefinito in background |
openTcfPreferences() | (già showConsentPreferences, ora obsoleto) Apre un popup per impostare le preferenze relative al consenso TCF |
openTcfVendorsPreferences() | (già showVendorsPreferences, ora obsoleto) Apre un popup per impostare le preferenze relative ai vendor |
openCookiePolicy() | (già showCookiePolicy, ora obsoleto) Apre un popup che mostra la Cookie policy |
shouldGetConsent() | Chiama questa funzione per verificare se devi chiedere il consenso dell’utente o se è già stata espressa una preferenza |
getConfig() | Recupera la configurazione inizializzata nella classe Application |
isInitialized() | Se true, l’SDK di iubenda viene inizializzato correttamente |
isPurposeEnabled(id) | Se perPurposeConsent è true, a sua volta restituisce true in caso di consenso dato per la finalità specificata nel parametro numerico id . |
isConsentGiven() | Se perPurposeConsent è false , restituisce true in caso di consenso accettato, altrimenti restituisce false |
clearData() | Cancella i segnali di consenso CMP raccolti nella precedente interazione utente |
shouldGetConsentForInvalidateConsentBefore() | Chiama questa funzione per verificare se devi chiedere il consenso dell’utente quando il timestamp è precedente al giorno del parametro di data invalidateConsentBefore configurato |
getVendorList() | Restituisce l’elenco dei vendor. Se il parametro facoltativo version non è impostato, restituirà l’ultimo elenco dei vendor. Considera il parametro CustomUIListener per i risultati di successo ed errore |
getUserPreferences() | Restituisce le preferenze utente salvate, comprese quelle relative la consenso |
setUserPreferences() | Imposta le preferenze utente con aggiunte relative a consenso e dati TCF dal servizio web |
Note su IubendaCMP.accept()
:
Inoltre, si consiglia di aggiungere un listener per rilevare quando l’utente ha dato il consenso durante la chiamata dei metodi open*
.
Esempio:
public class ConsentActivity extends Activity implements IubendaCMPChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_consent);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
IubendaCMP.registerChangeListener(this);
}
@Override
protected void onDestroy() {
IubendaCMP.unregisterChangeListener(this);
super.onDestroy();
}
public void onAcceptClick(View view) {
IubendaCMP.accept();
finish();
}
public void onOptionsClick(View view) {
IubendaCMP.openTcfPreferences(this);
}
@Override
public void onConsentChanged() {
if (IubendaCMP.isConsentGiven())
finish();
}
}
Se necessario, puoi registrare un listener per rilevare le modifiche del consenso utente chiamando IubendaCMP.registerChangeListener()
, ad esempio all’interno del metodo onCreate
della propria applicazione o attività.
Per rimuovere il listener, puoi chiamare IubendaCMP.unregisterChangeListener()
, ad esempio all’interno di onDestroy()
.
I listener vengono acquisiti come un riferimento debole.
Puoi accedere alle impostazioni TCF di IAB, come la stringa di consenso codificata, direttamente dalle specifiche IAB o tramite i metodi offerti da un oggetto CMPStorage
. Per ottenere un’istanza di archiviazione, chiama IubendaCMP.getStorage()
.
Metodo | Descrizione |
---|---|
getConsentString() | Restituisce la stringa di consenso |
getSubjectToGdpr() | Restituisce l’impostazione SubjectToGdpr |
getCmpPresentValue() | Restituisce true se è presente una CMP |
getVendorsString() | Restituisce la stringa binaria relativa ai vendor |
getPurposesString() | Restituisce la stringa binaria relativa alle finalità |
isPurposeConsentGivenForPurposeId(purposeId) | Restituisce se il consenso è stato dato per l’ID di finalità trasmesso |
isVendorConsentGivenForVendorId(vendorId) | Restituisce se il consenso è stato dato per l’ID di vendor trasmesso |
getConsentTimestamp | Restituisce il timestamp del consenso (a partire da v1.3.2) |
isPreferenceExpressed() | Restituisce true se l’SDK rileva una preferenza valida già memorizzata. “valid” indica che se la preferenza viene invalidata da invalidateConsentBefore , allora il metodo dovrebbe restituire false |
Per ulteriori informazioni sul TCF e sulle relative impostazioni avanzate, come la possibilità di limitare le finalità e determinare la base giuridica applicabile (consenso e/o legittimo interesse), leggi la nostra guida al TCF.
Come spiegato nella documentazione di Google alla sezione “Requisiti per pubblicare annunci non personalizzati”, Google non supporta i casi in cui il consenso è stato negato, neanche per gli annunci non personalizzati. Di conseguenza, non viene pubblicato nessun tipo di annuncio.
Per le librerie di terze parti che non aderiscono direttamente al Transparency and Consent Framework di IAB, è possibile che debbano essere inizializzate separatamente a seconda dello stato e delle preferenze di consenso.
A tale scopo, puoi implementare un listener per il rilevamento delle modifiche nella classe Application e chiamare IubendaCMP.isConsentGiven()
e altri metodi per valutare lo stato del consenso.
Esempio:
public class MyApplication extends Application implements IubendaCMPChangeListener { @Override public void onCreate() { super.onCreate(); IubendaCMPConfig config = IubendaCMPConfig.builder() .gdprEnabled(true) .siteId("12345678") .cookiePolicyId("ABCDE") .googleAds(true) .build(); IubendaCMP.initialize(this, config); IubendaCMP.registerChangeListener(this); initializeLibraries(); } private void initializeLibraries() { if (IubendaCMP.isConsentGiven()) { if (IubendaCMP.isGooglePersonalized()) { // enable Google personalized ADs } else { // disable Google personalized ADs } // setup other libraries } } @Override public void onConsentChanged() { initializeLibraries(); } }
È necessaria una connessione Internet per mostrare il popup di consenso e generare o aggiornare di conseguenza la stringa di consenso nella libreria, mentre l’ultima stringa di consenso è sempre disponibile nell’archiviazione locale tramite CMPStorage
.
Per impostazione predefinita, il metodo askConsent
controlla se è presente una connessione Internet prima di lanciare il popup. Se non c’è connessione, il popup non viene mostrato, ma verrà presentato al lancio successivo.
Se si verifica un errore durante il flusso di consenso, invece, viene mostrato un messaggio di errore con l’opzione per riprovare o chiudere il popup. In questo caso, l’impostazione forceConsent(true)
permette di mostrare di nuovo il popup se non è stato dato alcun consenso.
Leggi questa guida per scoprire come implementare l’API di Consent Database per sincronizzare le preferenze relative al consenso tra siti e app per ogni utente autenticato.
reject()
aggiunto alla classe IubendaCMPlandscapeWidth
, landscapeHeight
, portraitWidth
, portraitHeight
aggiunti a IubendaCMPConfiguration
getPreferencesJson
aggiunto alla classe IubendaCMP
dismissColor
aggiunto alla classe IubendaCMPConfig
per la personalizzazione del pulsante di chiusuragetVendorList()
, getUserPreferences()
e setUserPreferences()
aggiunte per l’interfaccia utente personalizzataisGooglePersonalized()
diventato obsoletoproxyUrl(baseUrl)
aggiunto per riscrivere l’URL utilizzato per incorporare la Cookie SolutionsaveConsent(preferencesJson,timestamp)
correttaisPreferenceExpressed()
aggiuntoisConsentGiven()
correttoexpireAfter
aggiunta a config.json
per eseguire il confronto con la data di consenso salvata e cancellare i dati se necessarioinvalidateConsentBefore
aggiunto alla classe IubendaCMP per eseguire il confronto con la data di consenso salvata e mostrare nuovamente la richiesta di consenso se necessarioshouldGetConsentForInvalidateConsentBefore
() aggiunta alla classe IubendaCMP per chiamare l’interfaccia utente personalizzataIubendaCMP.storage
BannerPosition
aggiunto alla classe IubendaCMPConfiguration per personalizzare la posizione del banner di consenso (valore predefinito: CENTER)forceConsent=true
con enableTcf=false
enableTcf=false
e forceConsent=false
IubendaCMP.clearData()
aggiuntoacceptDefaultConsent
, editConsent
, showConsentPreferences
, showVendorsPreferences
, showCookiePolicy
rinominati rispettivamente in accept
, openPreferences
, openTcfPreferences
, openTcfVendorsPreferences
, openCookiePolicy
isPurposeConsentGivenForPurposeId(purposeId)
e isVendorConsentGivenForVendorId(vendorId)
aggiuntipreventDismissWhenLoaded
aggiuntaConsentActivity
viene ripristinato prima dell’inizializzazione dell’SDK)hasConsent
diventato obsoleto e sostituito con isConsentGiven
shouldGetConsent
introdotta per implementazioni più personalizzatecsVersion
aggiuntasaveConsent()
e CMPStorage
cssFile
e jsonFile
introdottecssContent
e jsonContent
introdotteskipNoticeWhenOffline
forceConsent
acceptIfDismissed
introdotta