This article will walk you through setting up Cookie Information SDKs (software development kits) for Android. This is an out-of-the-box solution to help make your Android app GDPR-compliant.
Before you start
Here are a few things to know before you start:
Cookie Information offers two SDKs, core and UI. To set up both, you need Kotlin support.
You need a Cookie Information account to set up the SDKs. For details, see the Cookie Information website.
The SDK includes a pre-built component that displays the consent banner to users, which is required before collecting their data. Cookie Information manages all the data.
The UI SDK provides built-in screens for managing consents, offering an easy way to customize banners with your app’s colors and fonts to match its design. It also allows you to track which consents have been given and collect data accordingly.
This is what the component would look like:
You can change the content of each consent type in Cookie Information Consent Management Platform (CMP), you’ll find more details later in the article. With the SDK, different texts and labels can be overridden with custom values.
Your users can consent to different purposes. In Cookie Information, these are called consent items. They can include different categories such as necessary, functional, statistical, and marketing. Each item is unique and can only be used once in the consent solution.
You must set up the same languages for each consent item. Otherwise, the consent banner won’t display correctly.
Make sure you have set up the necessary consent on the CMP.
Create a mobile consent solution
Before you install our library for Android, you need to create a mobile consent solution, here’s how to do it:
1. Login to Cookie Information.
2. Navigate to Mobile consent solutions. This will take you to the platform’s old UI.
3. Click +Create mobile consent solution.
4. In Solution details, name your mobile consent solution and choose the operating systems.
5. (Optional) You can write a short description of what your mobile application is about.
6. Click CREATE.
7. You’ll be directed to the created Mobile Consent Solution Cookie Information. In Consent Items, find the consent item you want to set up the language for and click Edit.
8. Select the languages of the consent item from the drop-down list.
Note: The mobile consent solution you create comes by default with five content items: necessary, functional, statistical and marketing and privacy policy. You must set up the same language for each consent item. Otherwise, the consent banner won’t display correctly.
9. You can edit or remove the short and long texts that describe a given consent item.
Install the UI SDK for Android
To install the UI SDK for Android, you need to create a mobile consent solution (see a dedicated section above). Ensure the necessary consents are set up in the platform.
Tech requirements:
Kotlin support
Min SDK 24
You’ll need the following identifiers: clientID
, solutionId
, and clientSecret
, to initialize the SDK and activate the functionality. You can find the authentication keys for those in the Cookie Information Mobile consent solution > Installation and later copy the following: Solution ID, Client_ID and Client secret.
Initialization
We recommend to set up either in the application's onCreate method or in the onCreate method of the launching activity.
This sample contains the minimum info needed to initialize the SDK.
ConsentsUISDK.init(
clientID: String //credential found on management platform,
clientSecret: String //credential found on management platform,
solutionId: String //credential found on management platform,
languageCode: String = "FR"//language code,
context: Context)
You can add custom stylings such as fonts, colors, etc. Find a sample here. To get all the language codes, see this article.
Parameters
Here are the parameters you are passing to the initialization function:
clientID (string, required)
The string is provided as part of the credentials.
clientSecret (string, required)
The string is provided as part of the credentials.
solutionId (string, required)
The string is provided as part of the credentials.
languageCode (string, required)
The language you want the consent banner to be displayed in.
Note: We don’t recommend using the device's language. The consent may not be available in the selected language. Ensure that any language you pass has all languages set up in the Consent Management Platform.
context
The context is needed to install the SDK.
Main SDK functions
Here’s how you can use the SDK.
Display the consent banner when the user has never given consent, or the solution version has changed
You can choose to show the consent banner only if the user hasn't previously accepted or rejected it.
suspend fun showPrivacyPopupIfNeeded(callingActivity: ComponentActivity, userId: String? = null): Flow<Result<List<UIConsentItem>>>
Parameters
callingActivity
This is the activity that launches the banner displaying the consent.
userId
The ID of the user is being checked to see if consent has already been given on this device.
In this case, the banner will appear whenever it’s needed, either when the user hasn't given consent or when a version update requires renewed consent.
Always display the consent banner
This will display the consent banner whenever the function is called. This way, you’ll allow the user to update or change their mind about a given consent.
suspend fun showPrivacyPopup(callingActivity: ComponentActivity, userId: String?): Flow<Result<List<UIConsentItem>>>
Parameters
callingActivity
The activity that launches the banner displaying the consent
userId
The unique ID of the user who needs to provide consent. This SDK supports multiple users per device locally.
Handling consent data after displaying the banner
On return from the banner, the flow will contain a list of UIConsentItem
, this will include data about the consent, and if the user has accepted the consent or not. Only then may the app owner collect data, based on what has been granted.
It will return what consent decision the user made, and you can use that data later.
lifecycleScope.launch{
ConsentsUISDK.showPrivacyPopup(this@MainActivity, "userId").collect { result ->
result.fold(
onSuccess = { consentItems ->
//Here you have access to the users consent
},
onFailure = { throwable ->
//if anything failed, here is where it could be handled
}
)
}
}
Fetch the consent data the current user has accepted or rejected
This will retrieve the consent data the current user has accepted or rejected.
fun getSavedItemsAsFlow():MutableSharedFlow<Result<List<UIConsentItem>>>
lifecycleScope.launch{
ConsentsUISDK.getSavedItemsAsFlow().collect {
it.fold(
onSuccess = { consentItems ->
//this is on return from the popup, we get //the list of items and set your //data collectors accordingly
}
},
onFailure = { throwable ->
Log.d(TAG, throwable.message ?: "no message")
}
)
}
Firebase as a data collector, and how it handles the data
Google consent mode (Google Analytics by Firebase)
Firebase will automatically collect data when integrated into your app unless you disable data collection by setting it to false
.
When a user opens the app for the first time, they haven't given consent yet. Make sure to set data collection to false
by default. You can do it by adding meta to the manifest file. See more details in the documentation here.
Once the user has given consent, you need to update Firebase’s data collection settings accordingly.
Firebase tracks four things that require consent:
analyticsStorage
adStorage
adUserData
adPersonalization
Here is a sample of how to implement this:
lifecycleScope.launch{
ConsentsUISDK.showPrivacyPopup(this@MainActivity).collect { result ->
result.fold(
onSuccess = { consentItems ->//this is on return from the popup, we get //the list of items
Firebase.analytics.setConsent {
analyticsStorage(//find analytics storage consent in list, and see if accepted)
adStorage(ConsentStatus.GRANTED)
adUserData(ConsentStatus.GRANTED)
adPersonalization(ConsentStatus.GRANTED)
}
},
onFailure = { throwable ->
Log.d(TAG, throwable.message ?: "no message")
}
)
}
}
You can get more details and sample implementations on GitHub.
Related articles