간편한 InMobi SDK를 활용하여 사용자에게 풍부한 광고 경험을 제공함으로써 iOS와 Android 앱을 수익화할 수 있습니다.
간단한 단계를 통해 시작해 보십시오.
참고: URL이 없는 앱의 경우 테스트 모드가 기본으로 활성화됩니다. 앱이 정식으로 출시되면 링크를 클릭하여 아래 보이는 대시보드에서 URL을 입력할 수 있습니다.
이제 앱 수익화 준비가 완료되었습니다.
수익을 지급받으려면 지급 프로필을 생성, 인증, 활성화해야 합니다. InMobi의 정산 주기는 60일입니다. 다시 말해 한 달간의 수익은 60일 이후에 지급됩니다. PayPal이나 전신 송금/RTGS 등을 통해 수익을 지급받을 수 있습니다.
지급 약관에 관한 자세한 정보는 여기를 참고하십시오.
광고 콘텐츠를 차단하여 사용자에게 보이는 광고를 선별할 수 있습니다. InMobi는 광고를 차단할 수 있는 3단계의 광고 필터를 지원합니다.
도메인 필터:
특정 도메인의 광고를 차단합니다. 예를 들어, InMobi 광고를 차단하고 싶다면 도메인 'inmobi.com'을 추가합니다. inmobi.com, inmobi.co.jp와 같이 InMobi의 모든 도메인을 차단하려면 'inmobi'를 추가합니다.
카테고리 필터:
카테고리를 기반으로 광고를 차단합니다. 특정 카테고리를 차단하면 해당 카테고리로 분류된 광고는 사이트나 앱에 제공되지 않습니다. 예를 들어, 아동용 앱의 경우 '정치'나 '도박' 카테고리로 분류된 광고를 차단할 수 있습니다.
URL 또는 키워드 필터:
광고 텍스트나 랜딩 페이지 URL에 포함된 특정 문구를 기반으로 광고를 차단합니다. 예를 들어, '무기'나 '바이러스'와 같은 텍스트가 포함된 광고를 사이트나 앱에 제공되지 않도록 차단할 수 있습니다.
MoPub과 InMobi SDK를 통합하는 것이 쉽습니다. 연동 방법은 다음 링크를 참고하십시오.
MoPub 미디에이션은 다음 광고 유형을 지원합니다.
참고: InMobi는 사용자 정의 크기를 제외한 위의 모든 광고를 지원합니다. 퍼블리셔가 사용자 정의 크기로 얻을 수 있는 결과는 다른 형식을 통해서도 쉽게 얻을 수 있습니다.
InMobi SDK 최신 버전은 iOS 9 이상을 지원합니다. 또한, 이 버전의 iOS SDK에는 XCode 9.3 이상이 필요합니다.
InMobi SDK 최신 버전은 Android OS 버전 4.0.3 (API 레벨 15) 이상을 지원합니다.
버전 |
iOS - 8.2.0 Android - 8.2.1 |
iOS - 7.3.2 Android - 7.3.0 |
크기 |
iOS - 953 KB (.IPA 인플레이션)
Android - 415 KB (.APK 인플레이션) |
iOS - 650 KB (.IPA 인플레이션)
Android - 395 KB (.APK 인플레이션) |
SDK 링크 |
|
|
어댑터 |
MoPub에 연동한 적이 없는 경우 MoPub 문서를 참고할 수 있습니다.
Since November 20th, 2023, CMPs are required to implement IAB’s new policies and specifications (TCF v2.2). From January 16th, 2024, if a publisher does not adopt a Google-certified CMP, no Ads from Google AdSense, Ad Manager, or AdMob will be eligible to serve on EEA and UK traffic. Having a Google and IAB-compliant CMP is crucial for the following reasons:
Our free CMP enables you to maintain compliance with data privacy regulations (like GDPR, CCPA, and many others), helping you to foster user trust whilst elevating Ad revenue. By using our CMP, you can leverage TCF v2.2 strings, aligning with the preferences of advertisers and enhancing your monetization potential. Some of our publishers have observed up to 35% uplift in eCPM in certain regions.
At present, the InMobi CMP is a free solution for both existing and new customers.
Currently, InMobi CMP does not support user management directly.
InMobi CMP offers a wide array of customization options, allowing you to personalize elements such as button colors, backgrounds, and fonts. You can see the complete list of customization features available for iOS here and Android here.
The InMobi CMP currently supports 25 languages, with more coming in the future.
Bulgarian | Croatian | Finnish | Italian | Portuguese |
English | Estonian | Irish | Polish | Spanish |
Greek | Hungarian | Norwegian | Slovenian | |
Lithuanian | Maltese | Slovak | Dutch | |
Romanian | Russian | Danish | French | |
Swedish | Czech | Flemish | Latvian |
InMobi CMP provides reporting and analytics on user consent-related data. This data can help you monitor and optimize your compliance efforts. In its current state, the publisher can track the following metrics:
Yes, we strongly believe that users should always have complete control over the data they choose to disclose. Our CMP is designed to offer users the flexibility to adjust their consent preferences at any point, ensuring a high level of control over their decisions related to data sharing. This can be done via the Themes tab.
InMobi CMP does not currently allow re-adding a site property with a previously deleted URL for data integrity reasons.
Contact Us and we can restore the deleted site property from the backend if necessary.
Once the site property is restored, check:
The integration process is composed of 3 simple steps:
We recommend watching the video below for a visual overview of the entire process. You can also explore the comprehensive details available on this support portal, where each step is thoroughly outlined.
InMobi CMP is designed to be applicable to Android and iOS, in-app and web. It offers seamless integration and consent management capabilities for both mobile operating systems, ensuring comprehensive coverage across different devices and providing a consistent user experience for all your app users.
Yes, we have a Unity package available here. Please note, whilst UI customization for Unity is not currently supported, it is currently on our roadmap to be available in Q2 2024.
At present, it is a standalone SDK for in-app consent management. In our ongoing efforts to enhance the experience for our publishers, we plan to seamlessly integrate the CMP into our monetization SDK in the first half of 2024. This integration will allow you to effortlessly enable or disable the CMP module, providing you with greater flexibility and control over your app’s consent management approach.
Integration with Google Mobile Ads and other Ad providers through InMobi CMP requires publishers to configure consent preferences and vendors within the CMP interface. The CMP SDK handles user consent collection, TCF string generation, and storage. Ad providers can access the TCF string either through their SDK's API, with publishers passing the consent string, or by retrieving it from shared storage. This string helps Ad providers determine whether to display personalized Ads, ensuring compliance with user consent choices and data protection regulations.
If you're seeing CMP warning in the browser, check the following:
If the CMP pop-up is missing despite setup, check the following:
If you're experiencing issues with Google Analytics data or missing consent signals, check whether Google Basic Consent is enabled. This issue typically occurs when it is disabled.
If enabled, verify that all required consent signals are correctly configured. For more information, see Google Basic Consent with InMobi CMP.
These are some common questions that publishers may have while implementing MSPA.
If the end-user changes state, there is no mapping of the consents between different sections. Instead, the InMobi CMP will signal to the publisher (via an API) that the end-user has changed states and needs to be re-shown the consent screen. The publisher is responsible for then re-triggering the consent screen. To see the APIs to check user location and trigger the consent screen, see iOS APIs, Android APIs, and Web APIs.
If the end-user travels from the US to EEU/UK, then the GPP string for the US will not be deleted. Instead, the GDPR consent screen for EEU/UK will be shown. Similarly, if the user travels from the EEU/UK to the US, then the GDPR will not be deleted and the MSPA consent popup will be shown for the U.S region.
If a user has a CCPA string and the publisher enables GPP, the US Privacy consent string will not be deleted. Depending on whether the publisher has set the auto-display of the consent screen, the MSPA consent popup will be shown to the user.
To understand why GDPR is not applicable in the US and why US regulations are applicable only in the US, see Why doesn’t InMobi CMP support GDPR in the U.S?
InMobi CMP complies with GDPR (General Data Protection Regulation), CCPA (California Consumer Privacy Act), ePrivacy, as well as Google’s and IAB's new policies and specifications (TCF v2.2). Read more about how we comply with these regulations and standards here.
We plan to support new regulations and standards in Q1 2024 such as the Digital Personal Data Protection Act (DPDPA) or IAB's Global Privacy Platform (GPP).
Yes, our CMP is IAB TCF 2.2 and Google-certified. Click here for more information.
As part of our roadmap for 2024, we are focusing on being compliant with global regulations and frameworks such as GPP and DPDPA.
InMobi CMP is completely neutral and strictly adheres to privacy protocols, only transmitting consent strings to partners whitelisted in the vendor tab of our customer interface. Its certification by Google and the IAB ensures a trustworthy handling of your data. You can rely on InMobi CMP for secure and compliant data processing.
InMobi CMP is self-serve, so you should find all the information and guides you need on this support portal. If this is not the case, you can raise a ticket via the support portal.
To access InMobi CMP, log in to the InMobi CMP portal and enter the email address associated with your account. You will then be prompted to reset your password. If you encounter any issues, you can submit a ticket via the support portal.
If the CMP pop-up shows on every visit, it is likely due to local storage or cookies being cleared every time the site is reloaded or after a user logs in. Ensure that local storage/cookies are not being cleared automatically, as CMP relies on them to retain user consent data.
If personalized ads are missing, revenue is low, or you see errors like: "We received a request from the EEA, UK, or Switzerland, but it lacks TCF signals", it likely means the consent string is missing from the ad request.
To troubleshoot, check the following:
Getting started with InMobi is quick and easy. Here’s a step-by-step walkthrough to begin with.
You might come across the following terms while you set up an account on the InMobi platform. We would recommend that you go through the same so that you are comfortable navigating our platform.
If you have created a Google Open Bidding or Direct account and want to switch, you must create a new one. However, you cannot create a new account with the same email address. Additionally, signing a contract only applies to Google Open Bidding accounts (Google Open Bidding SDK connections don't require new accounts).
Blank ads may appear due to issues with ad creatives, targeting criteria, or ad-serving limitations. Ensure the setup is correct and Contact Us in case of any issues.
You can enable your placement for Test Mode without affecting the live app. Global means the test ad can be served across all your Live apps with InMobi, while Device means the test ad can be served across the Test Devices added as per the Integration Tab section.
To add more users, go to your account settings and select "Manage Users." Add details such as first and last names, designation, email ID, etc to invite additional users. For more details, follow the steps in the My Account tab.
Manually adding the app is only applicable in cases where the system cannot fetch the app's details through the URL. In such cases, you need to manually add the URL, Category, Rating, and other details to add the app to your inventory.
You can find your account ID by logging into your account and navigating to the My Account tab. Here, you can view your profile and account details.
You cannot delete your account from the platform. To delete your account, Contact Us.
Currently, changing or merging accounts is not supported. If you need assistance, Contact Us.
Check your spam or junk folder; the link might be there. Ensure you’ve entered the correct email address and your inbox is not full. If the issue persists, request the link again or, Contact Us.
If you're unable to reset your password, it may be due to an incorrect email or username, a locked account, or a temporary system issue. Double-check your details, ensure your account isn't locked, and try again later. If the problem persists, Contact Us.
If you have additional queries or need further assistance, Contact Us.
The standard time for app approval is 24 working hours.
InMobi's content guidelines and policies ensure that all ads comply with legal standards, protect user experience, and avoid prohibited content, such as adult material, illegal activities, and misleading claims.
Your inventory may be rejected or flagged due to non-compliance with platform guidelines, quality issues, or discrepancies in the provided data. Refer to our content guidelines and policies for more details.
We usually take 24 working hours for app approval. However, if your app/website belongs to a sensitive category, our team may take longer than expected to review.
"Under Review" indicates that your submission is being evaluated and hasn't been approved or rejected yet.
Data privacy enables organizations to stay compliant with legal and regulatory standards, reducing risks, enhancing trust, and ensuring ethical operations. InMobi Publisher Platform is compliant with multiple regulations such as COPPA, CCPA, GDPR, and LGPD. You can follow the steps on the Compliance Declaration page to set your compliance settings.
InMobi is a Joint Controller with the Publisher.
InMobi does not gather user consent directly and will rely on the publisher to obtain appropriate consent from data subjects and pass that on to InMobi.
InMobi will never collect or pass user data to an advertiser or a publisher without user consent.
Publishers must notify InMobi where consent is withdrawn or revoked, and accordingly, InMobi will honor such data subject’s request.
For all requests originating from users who have not given consent, InMobi will serve non-targeted ads to these users. To comply with GDPR, upgrade your SDK today.
You can now set the floor price yourself, but this is an access-only feature, Contact Us to get your access.
To choose the correct ad format, ensure the size aligns with standard industry dimensions such as banners (320x50), medium rectangles (300x250), or interstitials (320x480). Each format serves specific ad placement needs like banners for mobile screens and interstitials for immersive experiences.
Select ad formats that match the dimensions of your ad slot, such as 320x50 for banners, 300x250 for medium rectangles, and 320x480 for interstitial ads.
Yes, InMobi supports Outstream video ads. You can create a video ad in the format compatible with the CI platform, ensuring it meets standard dimensions and specifications for seamless integration.
Your sellers.json may not be updated due to: Pending Verification: Your account details are still under review. Incomplete Information: Ensure your payment and business details are accurate.
Banner (display), In-stream (video), and Native.
Publishers will need to list InMobi.com as DIRECT in the ads.txt file and InMobi will list the publisher as PUBLISHER in the Sellers.Json file. Note that there is no change required vis-a-vis the in-app flow.
We do not support category and domain blocks sent to us via the oRBT request. Publishers will need to add blocks while creating the placement field in the Media UI setup.
If you have additional queries or need further assistance, Contact Us.
Payments may be delayed for the following reasons: Publishers registered in Singapore and India are required to send GST invoices. If exempted from GST, they must provide a declaration via email to bd-finance@inmobi.com. Incorrect bank details. Please ensure your bank details are updated correctly.
You can upload your invoice directly through your account's dashboard on the platform or Contact Us for further assistance.
To upload an invoice, ensure that the file is in PDF format. Follow the guidelines provided on the InMobi platform for invoice submission, including any mandatory details such as invoice number, date, and corresponding campaign ID. For specific instructions, reach out to support@inmobi.com.
InMobi processes publisher payments every month, provided your account meets the minimum payout threshold. Payments are initiated within 60 days after the end of the month in which your earnings are generated. For example, earnings from January will be processed and paid by the end of March, and you can expect to receive the payment by the first week of April.
Here are a few key points to keep in mind:
For more information or to track the status of your payments, visit the Payments section in your InMobi account dashboard. If you experience any delays or have further questions, Contact Us.
InMobi processes payments 60 days after the end of the month in which earnings are generated. For example, January earnings are paid by the end of March and payment is received by the first week of April. Ensure your account meets the minimum payout threshold ($300 for wire and $ 50 for PayPal, $50 for India publisher) and that your payment details are up to date to avoid delays.
Bank charges vary based on your payment method and bank policies. InMobi does not cover these charges, so ensure you check with your bank for applicable fees, such as wire transfers or currency conversion charges.
Discrepancies in your payout may occur due to:
For detailed information, review the Payments section in your dashboard or Contact Us.
You may be unable to update your bank details due to:
For further assistance, Contact Us.
Please follow the below steps to view your earning history
The maximum amount you can enter here is the value of your current pending earnings.
If you have additional queries or need further assistance, Contact Us.
Your ads.txt may not be verified due to:
For guidance, see InMobi Support Portal or Contact Us.
Verification requires both 10k ad requests and the correct implementation of your ads.txt file. Ensure:
If the issue persists, Contact Us.
Updating reseller or ads.txt lines ensures: Ad Authorization: Advertisers can verify you as an authorized seller. Higher Revenue: Proper implementation improves demand and fill rates. Policy Compliance: Aligns with industry standards like Ads.txt and App-ads.txt. For more information, see App.ads.txt.
For ads.txt, ensure you include all lines provided by InMobi exactly as instructed. These lines authorize InMobi to sell your inventory and comply with industry standards. Missing or incorrect lines may impact monetization.
Your sellers.json may not be updated due to:
If you have additional queries or need further assistance, Contact Us.
You may be unable to add InMobi as a bidder due to:
For more information, see Third Party Mediation Platforms or Contact Us.
Your GOB account may not be approved due to:
For assistance, Contact Us.
Your GOB publisher ID can be found in your InMobi account dashboard. To locate it:
For more information, see Google’s Open Bidding, or for assistance, Contact Us.
Oh yes, Absolutely! InMobi supports major mediation platforms like Google AdMob, AppLovin's MAX, Unity LevelPlay, and Digital Turbine, to name the major ones. For directions on integrating each mediation provider, see our integration guidelines page.
Here’s a quick guide on some of the best practices in ad mediation.
Visit the Download SDK page to get the latest iOS or Android SDK or learn more about third-party ad mediation platforms supported by InMobi here.
If you have additional queries or need further assistance, Contact Us.
InMobi supports only Android and iOS devices.
You can download the InMobi SDK for Android and iOS devices from here.
You can sign up with InMobi here. If you face trouble signing up, please sign out of the account, clear your browsing data and try again. If you still face any issues, please contact sales@inmobi.com
Our team is here for you 24/7. Feel free to write to sales@inmobi.com or to your dedicated InMobi
InMobi’s latest SDK is robust and featherlight ensuring that your app remains unbloated and performs efficiently to deliver the best user experience. Details on the SDK specifications including its size can be found here.
InMobi currently supports Cocos2dX and Unity. Please note that we no longer support Cordova.
VAST is an IAB specification which defines the mechanism to render a video in a publishing environment. InMobi currently supports VAST 4.0 on different platforms.
Yes, publishers who choose to work with InMobi are required to adhere to the following InMobi guidelines. If you fail to comply with these guidelines, we may disable your InMobi account.
This contract shall commence on the date on which you accept these conditions upon your registration with InMobi and shall remain in full force and effect unless and until terminated by either Party in accordance with the terms of the Contract.
We have explained the reasons for opting for Kotlin and Swift in our blog.
We will be releasing our latest monetization and addressability features only on the InMobi SDK available in Kotlin and Swift SDKs from September 2023 onwards. You will not be able to access our latest features if you are on the InMobi 10.1.X SDK versions.
If you are integrated with InMobi via a mediation platform, upgrade to the latest adapter provided by your mediation platform. You can find more details on our blog. If you are integrated with the InMobi SDK via direct integration, follow our migration guide for iOS and Android.
We will be releasing our latest monetization and addressability features only on the InMobi SDK available in Kotlin and Swift SDKs from September 2023 onwards. You will not be able to access our latest features if you are on the InMobi 10.1.X SDK versions.
To find your Publisher Reporting API key:
If you don't have access, ensure your account has the required permissions or Contact Us for assistance.
The InMobi SDK supports a variety of ad formats, including:
To integrate these formats, ensure you have the latest version of the InMobi SDK in your app.
Low fill rates may be due to:
Yes, the SDK integration must be completed before setting up third-party mediation. The InMobi SDK is essential to enable the flow of ad requests and responses, allowing third-party networks to be integrated into your mediation setup. Once the SDK is integrated, you can proceed with configuring mediation to maximize revenue from multiple demand sources.
If you have additional queries or need further assistance, Contact Us.
The earnings are reported in US dollars.
There is no limit on the number of requests per session.
You can fetch a maximum of 15 sessions in a day.
Once the issue is detected, the usual ETA is 24-48 hours.
The usual data delay is 4-5 hours. Also, InMobi follows the GMT.
6 months.
InMobi provides a transparent bidding adapter for Prebid.js (client-side integration) and Prebid Server (server-to-server integration). As a Prebid-approved bidder, InMobi continuously updates its adapter with new features and enhancements.
For each website, create at least one placement per ad unit (Banner, Video, and Native).
To configure InMobi in your Prebid.js setup:
This topic explains dimensions, metrics and filters such as visits, sessions/consent screen displays, and consent status on the InMobi CMP Analytics dashboard.
A Session/Consent Screen Display is an instance where a user is prompted through a popup screen to manage their data privacy preferences when they access a website or application. This screen typically appears during the initial visit or when a new consent action is required due to policy changes, regulatory updates, or session expiry.
For example, when a user visits a website for the first time. The CMP displays a consent screen to manage privacy settings. It would be counted as one session/consent screen display.
A Visit occurs whenever a user interacts with a website or application.
For example, a visit begins when a user accesses a website or app for the first time.
Additionally, if a user visits a website or an app, and comes back after 30 mins of inactivity, this would count as another visit.
In a third scenario, if a user visits a website or app, leaves, and returns the next day (UTC) of their previous visit, this would also be counted as a separate visit.
Consent States are reflected differently for each regulation such as GDPR, CCPA, and GBC in InMobi CMP. The following table shows how you can select consent states for each regulation for analytics purposes.
GDPR | CCPA | GBC | |
Accept All |
Under Dimension, select Regulation GDPR. Under Metric, select Accept All. |
Under Dimension, select Regulation CCPA. Under Metric, select Accept All. |
Under Dimension, select GBC. |
Reject All |
Under Dimension, select Regulation GDPR. Under Metric, select Reject All. |
Under Dimension, select Regulation CCPA. Under Metric, select RejectAll. |
Under Dimension, select GBC. |
Partial Accept |
Under Dimension, select Regulation GDPR. Under Metric, select Partial Accept. |
Under Dimension, select Regulation CCPA. Under Metric, select Partial Accept. |
Under Dimension, select GBC. |
Bounce |
Under Dimension, select Regulation GDPR. Under Metric, select Bounce. |
Under Dimension, select Regulation CCPA. Under Metric, select Bounce. |
Under Dimension, select GBC. |
Consent or Pay Enabled is a dimension and filter provided by InMobi CMP allowing you to view analytics only for the sites for which Consent or Pay has been enabled by you. This is a convenient option as it saves you the time of selecting each site while generating reports.
Paid user is a metric enabling you to view analytics for only paid users and understand their user behavior and patterns for your site.
This document outlines common errors encountered during Android SDK implementation, along with their causes and solutions. It aims to help developers troubleshoot issues quickly and ensure seamless integration.
oncmpError
callbackOne of the callbacks within ChoiceCMPCallback is onCmpError,
which gets fired whenever there’s an issue in CMP. This function has a parameter: error
which contains information about the error that has occurred.
Here’s a list of error messages that error
can have:
Message | Possible Reasons | Actions |
No connection found to load CMP | There is no internet connection on the device. | Check internet connection on the device. Make sure the app is given permission to use the network. |
Given pCode is invalid | The PCode is invalid. | Look for any spaces. Make sure the PCode is copied from the portal without the “p-”. |
Could not find configuration for this packageId. Have you set it up in InMobi Choice web portal? | The combination of pcode and packageId is not found on the portal. Either pcode or packageId is invalid. | Check pcode and packageId provided during initialization. Check the spaces in packageId. Make sure packageId is a valid entry in portal. |
SDK must be initialized first by calling startChoice method |
Trying to call cmp api before initializing sdk. | Initialise SDK first by calling startChoice method. Wait for the onCmpLoaded callback before calling any API. |
An error has occurred when CMP tried to execute a network call | Some exception occured while doing a network call. | If the issue persists, contact InMobi |
An invalid json format has been found when CMP tried to read the data | There is some issue with the json response format returned after doing a network call. | If the issue persists, contact InMobi |
Couldn't load publisher logo, url is empty or it doesn't return an image | The logo on the GDPR screen was not loaded. Either the URL was empty or there was no image on the given URL. | If the logo is to be displayed on the GDPR consent screen, make sure the image URL on the portal is not empty and the URL is valid. |
An error has occurred when a TCModel property was tried to be set | There was some error while setting TCModel property. | Make sure cmp is initialized properly. If the issue persists, contact InMobi. |
An unexpected value was received from GeoIp service | Occurs while setting default CCPA consent. Value received for location from geoip is invalid. | If the issue persists, contact InMobi. |
An unexpected error has occurred when CMP tried to do a network call | Unknown exception occured while trying to do a network call. | Some unknown exception occurred during network call. If the issue persists, contact InMobi. |
CFileNotFoundException has been captured when CMP tried to do a network call | FileNotFound Exception occured while trying to do a network call. | If the issue persists, contact InMobi |
An invalid URL has been passed | The URL passed to the privacy policy link of the GDPR screen is invalid | Make sure that the URL given for the privacy policy link under the GDPR section is valid, check for spaces in the field. |
Some error occurred while saving consent | There was some issue in saving MSPA consent. | If the issue persists, contact InMobi |
Init screen texts are missing | Some screen texts are missing and not configured properly on the portal. | Check all the fields are filled and saved properly on the portal. |
Debug and Error Logs are logged in the console to track any misbehavior or errors in SDK. Here's a list of Error Logs and their description:
Message | Possible Reasons | Actions |
The value is too large to be encode into the number of bits passed | Internal system behaviour related log caused due to long encoding failure | Report to InMobi |
Invalid bit length | Internal system behaviour related log caused due to decoding failure | Report to InMobi |
Some unknown error occurred | Some unknown error occurred while saving MSPA consent. | Check the network connection and try again. If the issue still persists, contact InMobi. |
Some error occurred while saving consent | There was some error while saving MSPA consent. | Check the network connection and try again. If the issue still persists, contact InMobi. |
Info messages are logged in console to convey meaningful messages in SDK. Here is a list of those messages and description:
Message | Possible Reasons |
Either US Privacy is not applicable or disabled for the current location | Either US privacy is not applicable for current region or is disabled from portal. |
This consent is not available for the given country | Regulation applied is not valid for the current country. |
GDPR is not applicable for this scenario | Either GDPR is not applicable for current country or is disabled from portal. |
Either GBC is not applicable or disabled for the current location | GBC is not applicable for current region or is disabled from portal. |
Auto pop-up is disabled and not applicable for this region because CCPA is enabled for this region | Auto pop-up is disabled and will not be applicable even if enabled as CCPA is applicable for this region. Auto pop-up is shown if MSPA/GDPR is applicable. |
Auto pop-up is not applicable for this region as CCPA is enabled | CCPA is applicable for the current region so auto pop up will not be displayed. Auto pop-up is shown if MSPA/GDPR is applicable. |
Auto pop-up is disabled so no dialog will be shown | MSPA auto pop-up is disabled from the portal so no dialog will be shown automatically. |
MSPA is applicable but no need to re-trigger the screen | MSPA is applicable and consent is present |
This document outlines common errors encountered during iOS SDK implementation, along with their causes and solutions. It aims to help developers troubleshoot issues quickly and ensure seamless integration.
cmpDidError
delegateOne of the delegate functions within ChoiceCMPDelegate delegate is cmpDidError
which gets fired whenever there’s an issue with the initialisation due to any reason. This function has a parameter: error which contains information about the error occurred.
Here’s a list of error messages that error.localizedDescription
with have:
Message | Possible Reasons | Actions |
The data couldn’t be read because it is missing. | There’s an issue in the configuration on the portal. | Check all the fields are filled and saved properly. Also check if the same bundle identifier is used in the App and on the portal. |
Malformed portal configuration URL, check pCode and bundleIdentifier | Either PCode or bundle identifier is not correct. | Look for any spaces. Make sure the PCode is copied from the portal without the “p-”. |
Malformed app-config.json file at NewPremiumUILabels level | Some of the key data is missing or incorrect in translations | If the issue persists, contact InMobi |
It is not known yet if GDPR Applies so this value may be misleading. Always check `gdprAppliesIsKnown ` first |
If you are using doesGdprApply (in Objc) before initialisation, you may encounter this error. |
Check if the initialisation is done by implementing the cmpDidLoad delegate and then check this value. |
Unsupported language | The selected language or device language is not supported. | If the issue persists, contact InMobi |
Could not find rootView controller. Make sure your rootViewController is attached to a keywindow before starting CMP | CMP couldn’t find the ViewController . |
Make sure the SDK is properly setup and configured before initialisation. |
CMP has not loaded yet, run startChoice with the pCode first. | ForceDisplayUI is called before initialisation. |
Wait for the cmpDidLoad callback before calling the API |
US Regulation is not configured in the portal | showUSRegulations has been called but CCPA / MSPA not configured properly on the portal |
Make sure the configurations are correct from the portal |
CCPA is not configured in the portal. | ShowCCPA is called but not configured from the portal |
Make sure CCPA is configured properly from the portal |
Could not find rootView controller. Make sure your rootViewController is attached to a keywindow before starting CCPA | CMP couldn’t find the ViewController . |
Make sure the SDK is properly setup and configured before initialisation. |
Could not find rootView controller. Make sure your rootViewController is attached to a keywindow before showing Google Basic Consent | CMP couldn’t find the ViewController . |
Make sure the SDK is properly setup and configured before initialisation. |
Color named: {key} is malformed with value: {color string provided}. Color must start with #") | The colour string value provided during the initialisation is incorrect. | Check for all the provided colour values on initialisation. The colour values string must start with “#” character followed by three or six digits colour code. |
Could not find MSPA Viewcontroller | CMP couldn’t find the ViewController . |
Make sure the SDK is properly setup and configured before initialisation. |
Debug and Error Logs are logged in console in order to track any misbehaviour or errors in SDK. Here's a list of Error Logs and their description:
Message | Possible Reasons | Actions |
Error encoding the object | Internal system behaviour related log caused due to data encoding failure | Report to InMobi |
MSPA Jurisdiction not found | Missing values in configuration file | Check the MSPA related values in the portal and save properly. |
Region not found | Missing values in configuration file | Check the network connection and if the issue still persists, report to InMobi |
Error loading iabgpp | Internal error in GPP encoding | Report to InMobi |
Failed to decode GoogleVendor data |
Invalid google vendor format encountered while retrieving from storage. | If occurred during testing, reinstall the app and if the issue persists, report to InMobi |
Could not find the geo location | One of the internal configurations failed to download | Check the network connection and try again |
Error downloading GVL version. Using Cache | Global vendor list failed to download. | Check the network connection and try again. If the issue still persists, contact InMobi |
Error decoding global vendor list | There’s some inconsistencies with the newly downloaded GVL | Report to InMobi |
No locations found | Missing values in configuration file | Check the MSPA related values in the portal and save properly. |
Current geo location not found | One of the internal configurations failed to download | Check the network connection and try again |
Failed to load custom font | There’s some issue when using the custom font provided during the initialisation. | Check if the font is properly added to the bundle and in Info.plist as per the Apple documentation. Also check if the correct font name is passed in the initialisation |
This topic explains the concept of Concept or Pay and how publishers can honor end-user consent preferences by giving them a free opt-out option to limit data tracking.
“Consent or Pay" is a concept where users are given a choice to either provide consent for data collection or pay to access content without consenting to data tracking or advertising. The three main options are:
In November 2023, Meta introduced a paid subscription for Instagram and Facebook users who don't want to be tracked. This was referred to as the 'Pay or okay' model.
In response to this, the European Data Protection Board (EDPB) has published an opinion stating the following:
“In most cases, it will not be possible for large online platforms to confront users only with a binary choice”.
A free alternative should be given without behavioral advertising, e.g. involving the processing of less or no personal data.
The scope of this opinion is for “large online platforms“ (evaluated on a case-by-case basis).
Consent or Pay 2.0 emerged after the EDPB's guidance to offer users a free opt-out of personalized ads.
This documentation outlines implementing the Consent or Pay model with InMobi CMP. InMobi CMP enables publishers to provide a free option to opt out of data tracking and receiving personalized ads with the Partial Accept option. For more information on Consent or Pay, see Overview.
Consent or Pay will only be implemented for the selected countries. For the remaining countries, GDPR will apply.
Configuring Themes settings allows you to manage the look and feel of the consent screen.
Certain sections of the CMP banner text (L1, L2, L3, and L4) must remain unchanged to ensure compliance with IAB-TCF guidelines. However, you can add content before, after, or between these sections without requiring approval. If you attempt to edit these sections, a structured review request process will be triggered to ensure flexibility for you to have desired content but as per IAB guidelines.
Once the request is raised:
For Android implementation and SDK-related changes, see Android.
For iOS implementation and SDK-related changes, see iOS.
For Web APIs, see Handling Consent APIs.
This document details the APIs to enable Consent or Pay on your app or website.
ChoiceCmp.setUserSubscriptionStatus(SUBSCRIPTION_STATE)
ChoiceCmp.setUserSubscriptionStatus(SUBSCRIPTION_STATE);
We recommend you use this API:
onActionButtonClicked
will be triggered when the user clicks any of the Action buttons. The parameter actionButton
will contain the info about whether it’s ActionButton1 or ActionButton2.
override fun onActionButtonClicked(actionButton: ActionButton) {
/* code */
}
@Override
public void onActionButtonClicked(@NonNull ActionButton actionButton) {
// code
}
Ensure consent or pay is enabled in the portal and applicable for the country. To know more about Consent or Pay, see Overview.
[[ChoiceCmp shared] setUserLoginOrSubscriptionStatus:(BOOL)];
ChoiceCmp.shared.setUserLoginOrSubscriptionStatus(Bool)
This API is recommended to be used:
startChoice
API).
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Initialise InMobiCMP
[[ChoiceCmp shared] setUserLoginOrSubscriptionStatus:true];
[self startChoice];
return YES;
}
@main
class AppDelegate: UIResponder, UIApplicationDelegate, ChoiceCmpDelegate, CCPADelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
ChoiceCmp.shared.setUserLoginOrSubscriptionStatus(true)
ChoiceCmp.shared.startChoice(pcode: "< YOUR PCODE >", delegate: self)
return true
}
}
ActionButtons
update.
(void) didReceiveActionButtonTapWithAction:(enum ActionButtons)action {
switch (action) {
case ActionButtonsAction1:
// Your implementation here..
break;
case ActionButtonsAction2:
// Your implementation here..
break;
default:
break;
}
}
func didReceiveActionButtonTap(action: ActionButtons) {
switch action {
case .action1:
// Your implementation here..
case .action2:
// Your implementation here..
}
}
didReceiveActionButtonTap
will be triggered when the user clicks any of the Action buttons. The parameter actionButton
will contain the info about whether it’s ActionButton1
or ActionButton2
.
(void) didReceiveActionButtonTapWithAction:(enum ActionButtons)action {
switch (action) {
case ActionButtonsAction1:
// Your implementation here..
break;
case ActionButtonsAction2:
// Your implementation here..
break;
default:
break;
}
}
func didReceiveActionButtonTap(action: ActionButtons) {
switch action {
case .action1:
// Your implementation here..
case .action2:
// Your implementation here..
}
}
If the user has consent or pay enabled, moves to more options screen, then rejects all the consents, and then saves and exits, it will be treated as action button 1 press, and the same delegate will be called with ActionButton
value as action1.
To indicate whether the user is subscribed, the publisher can set a JavaScript variable in the global window object. This can be used by the Consent Management Platform (CMP) to determine whether or not to display the consent popup.
window.__user_status = 'subscribed';
window.__user_status = 'subscribed';
when a user is confirmed to be subscribed.window.__user_status === 'subscribed'
), the CMP skips the consent popup display.Advanced customization lets you modify the text for your GDPR consent screen and buttons in different languages.
Certain sections of the CMP banner text (L1, L2, L3, and L4) must remain unchanged to ensure compliance with IAB-TCF guidelines. However, you can add content before, after, or between these sections without requiring approval. If you attempt to edit these sections, a structured review request process will be triggered to ensure flexibility for you to have desired content but as per IAB guidelines.
Once the request is raised:
Ads.txt (Authorized Digital Sellers) is an IAB Tech Lab initiative. It is a simple, flexible, and secure method that you can use to publicly declare the companies you authorize to sell your digital inventory.
During the real-time bidding process, the ad monetization space saw fraud in ad inventory offered to buyers with a misrepresented label and account. Typically, the webpage's domain, or the mobile app's ID, has been falsified to look like a site or app they do not have authorization to sell. Ads.txt and App-ads.txt enable buyers to spend only programmatic dollars through channels explicitly trusted and authorized by the originating publisher.
Create your ads.txt file using the following file format and data record:
Data encoding details:
Field | Name | Mandatory/Optional | Description |
---|---|---|---|
Field #1 | Domain name of the advertising system | Mandatory | The canonical domain name of the SSP, Exchange, Header Wrapper, and so on that bidders connect to. |
Field #2 | Publisher’s Account ID | Mandatory | The identifier associated with the seller or reseller account within the advertising system in field #1. |
Field #3 | Type of Account/Relationship | Mandatory | Indicates the type of account. ‘DIRECT’ indicates that the Publisher directly controls the account. This means a direct business contract between the Publisher and the advertising system. ‘RESELLER’ indicates that the Publisher has authorized another entity to control their account and resell their ad space. |
Field #4 | Certification Authority ID | Optional | An ID that uniquely identifies the advertising system within a certification authority (this ID maps to the entity listed in field #1). |
For the ads.txt setup, you must ensure to:
Follow the instructions below to get your personalized ads.txt entries, which include your InMobi payment ID:
InMobi's ads.txt crawler locates your file using the website URL provided for that inventory on the dashboard. Per ads.txt specs, the crawler checks the file at:
Determine the hostname from your website URL. It's the website's root domain, as explained below.
Refer to the table for examples where the InMobi crawler checks for an ads.txt file based on different website root domains.
If the website is: | Crawler looks in the following order: |
---|---|
https://example.com/game | https://example.com/ads.txt http://example.com/ads.txt |
http://help.example.com/game | https://example.com/ads.txt http://example.com/ads.txt |
The ads.txt specification outlines rules for root domains and subdomains. Crawlers will explore up to five redirections within a root domain and one outside the root domain.
To verify correct publication, ensure the ads.txt URL displays its content when accessed through your web browser. If it is visible in your browser, crawlers will probably locate it successfully.
Ensure the ads.txt is accessible via both HTTP and HTTPS.
Monitor your ads.txt files in your InMobi account:
If your file wasn't located or verified, review the details in your InMobi account or explore troubleshooting tips for ads.txt issues.
If you've recently updated your ads.txt file, it may take at least 24 hours for the crawler to display the latest verification status.
Upon creating your account on InMobi and establishing your inventory, access the verification status through Inventory >> ads.txt. Activation of the InMobi crawler occurs once any of the added apps has generated 10 thousand bid requests.
Verification Status | Action Required |
---|---|
X of X sellers are authorized. The ads.txt file is found and verified. InMobi crawled and verified your ads.txt file. |
No action needed |
X-Y of X sellers are authorized. Please include the missing seller entries in your ads.txt file to sell inventory with all of InMobi’s authorized sellers. |
Please include the missing seller entries in your ads.txt file to sell inventory with all of InMobi’s authorized sellers. Ads.txt helps prevent ad fraud by making it harder for malicious actors to sell fake ad inventory. Most buyers verify whether the reseller is legitimate and may reject the ad request if the reseller ID is missing in the website's ads.txt file. |
0 of X sellers are authorized. Please include the missing seller entries in your ads.txt file to avoid unintentional revenue loss. |
Please include the missing seller entries in your ads.txt file to avoid unintentional revenue loss. Ads.txt helps prevent ad fraud by making it harder for malicious actors to sell fake ad inventory. Most buyers verify whether the reseller is legitimate and may reject the ad request if the reseller ID is missing in the website's ads.txt file. |
The redirection URL did not respond properly. Please ensure that the redirection URL is working properly and the ads.txt file is reachable from root domain. Please ensure that the format of the headers in the response is correct and the response is sent within 1.5 sec. |
The redirection URL did not respond properly. Ensure that the redirection URL is working properly and the ads.txt file is reachable from root domain. Ensure that the format of the headers in the response is correct and the response is sent within 1.5 sec. |
File not found, the URL responded with invalid MIME type. The URL responded with an unsupported MIME type in the header. Please verify that the ‘content-type’ key in header contains ‘text/plain’ as part of it's value. |
The URL responded with invalid MIME type. The redirection URL responded with headers in incorrect format. This issue generally happens when the header (i.e., Content-Type) for any 200 OK response doesn’t contains text/plain As a resolution, please check the headers being returned in response to contain Content-Type one of a headers which returns text/plain as a value for this header. |
The ads.txt file was not found because it uses too many redirects. The IAB recommends no more than five redirects from the ads.txt page on the root domain. (Example: domain.com/ads.txt) Please move the ads.txt file to within five redirects from domain.com/ads.txt. |
InMobi crawler supports upto 5 redirections within the root domain and upto 1 redirection outside the root domain. Check the number of redirections happening from the initial URL. Ensure that your web server hosts your ads.txt file or redirects to the correct location when you enter the ads.txt URL shown in your InMobi account. The ads.txt URL shown in your account is the URL InMobi uses to find your file. |
The ads.txt file was not found because it uses too many redirects away from the root domain. ads.txt files are typically hosted on the root domain. (Example: domain.com/ads.txt) However, redirects can be common. IAB recommends no more than one redirect away from the root domain. Please move the ads.txt file to within one redirect from domain.com/ads.txt. |
InMobi crawler supports upto 5 redirections within the root domain and upto 1 redirection outside the root domain. Check the number of redirections happening from the initial URL. Ensure that your web server hosts your ads.txt file or redirects to the correct location when you enter the ads.txt URL shown in your InMobi account. The ads.txt URL shown in your account is the URL InMobi uses to find your file. |
An ads.txt file was not found on the root domain. Please ensure the ads.txt file is hosted in the correct place on your root domain and setup as per InMobi’s guidelines. Example: https://yourwebsite.com/ads.txt |
This usually resembles to a situation when InMobi crawler gets 200 OK response upon crawling, but the body of the response is empty.
Note: If you’ve recently added the ads.txt file in your root domain, allow up to 24 hours for InMobi to detect these changes. |
Something went wrong. Please raise a ticket to InMobi support. The ads.txt file could not be crawled due to an unexpected error. |
Something unexpected happened and the file could not be crawled. Please raise a ticket for InMobi support |
This topic explains GPP, its relevance for publishers to stay compliant with different regulations, and how InMobi Ad Exchange supports GPP through SDK and API integrations.
The Global Privacy Platform (GPP) by the Interactive Advertising Bureau (IAB) is a standardized global framework for managing user consent in digital advertising. For more information, see GPP.
The GPP aims to simplify the conveyance of privacy, consent, and consumer choice signals from websites and applications to ad tech vendors. It empowers advertisers, publishers, and technology vendors to align with regulatory requirements globally.
The GPP centralizes the management of diverse consent signals from various global privacy jurisdictions and additionally accommodates the Global Privacy Control (GPC), a browser-level signal enabling individuals to opt out of information sale or sharing. The GPP currently supports consent strings for the US Privacy and IAB Europe TCF.
The US Privacy String has been deprecated as of April 30, 2024. The legacy US Privacy signal does not support the four US states privacy signals —VA, CO, CT, and UT. For CCPA, only a few of the required consents are supported. In contrast, the new state signals for the other four states will only be supported by the GPP.
InMobi Ad Exchange now supports GPP through InMobi SDK and API integrations.
For SDK integrations, the app can store the GPP strings in Shared Preferences for Android and Managed under the key names for iOS, prescribed by IAB: The key names are : IABGPP_HDR_Version
, IABGPP_HDR_Sections
, IABGPP_HDR_GppString
, IABGPP_GppSID
. For more details, see In-App Key Names.
For API integration, you can now send GPP strings via regs → ext → gpp or directly under regs: regs → gpp.
InMobi Performance Solutions offers machine learning-powered end-to-end mobile performance advertising solutions through:
The platform supports managed media buying and trading services, offering features such as ad serving, bidding, user signal enrichment, fraud prevention, brand safety, as well as comprehensive reporting and tracking. These services leverage unified audiences across InMobi’s owned and operated content platform, Glance, along with major ad exchanges like Google Ad Exchange, InMobi Exchange, AppLovin, Unity, Vungle, Digital Turbine, PubMatic, Chartboost, BidMachine, and others.
Glance provides consumer content inventories on the lock screens of popular Android devices, including those from Xiaomi, Realme, Samsung, Vivo, Motorola, and more.
The InMobi DSP supports the latest attribution frameworks, including SKAN, and integrates with leading Mobile Measurement Partners (MMPs) such as AppsFlyer, Adjust, Branch, Kochava, Singular, Airbridge, and Tenjin. Glance also offers integration with top MMPs to enhance attribution accuracy.
In addition, the InMobi DSP provides a reporting dashboard and Cost API integration, allowing you to customize and access reports according to your specific needs.
Glance performance campaigns are currently available in India and Indonesia.
This page offers comprehensive instructions for implementing the InMobi CMP on a website using Google Tag Manager (GTM). This process uses a custom HTML GTM tag and additional GTM variables and triggers/trigger groups. Before finalizing your GTM setup, complete the site and consent configurations.
Importing the GTM InMobi Choice TCFv2 container is the most reliable way to add the custom HTML tag, all of the necessary variables, and sample triggers you can use to configure your container for consent management easily.
Download the GTM Container Import - Tag and Variables. Store it in a local directory on your computer.
You have now added all the necessary tags, triggers, and variables to get you started. You will have to configure some variables, and you will have to create new triggers to enable consent management in the container. The next chapter will explain this process in more detail.
Here are the steps you need to take to configure the InMobi CMP web tag, and to create and modify the triggers and variables you’ll need for the integration to work.
For publishers using our GTM implementation, there is an option to load default consents immediately after consent initialisation without waiting for page load event. To enable the same, follow the steps below:
These default values are set by you separately at the GTM level. If you make changes to the default values in the UI, you need to change them here as well.
Once set, your default consents will load immediately upon consent initialisation without waiting for page load event.
This feature is available for only those sites which are using InMobi CMP’s GTM integration. For other integrations, default consents will load only after page load event.
Set the InmobiChoice DataLayer Push constant to true to automatically push consent signals for IAB Vendors, Non-IAB Vendors, Legitimate Interests, and Publisher Consents.
To initialize the SDK, you must provide your account's p-code for proper identification. After you log in to the InMobi CMP portal, you can see the p-code at the top right corner of the screen. However, as shown below, you must omit the initial two characters ("p-") when copying the code for use elsewhere.
Aspect Ratio | Size |
---|---|
3:2 | 480x320 |
2:3 | 320x480 |
6:4:1 | 320x50 |
4:3 | 1024x768 |
3:4 | 768x1024 |
16:9 | 1920x1080 |
6:5 | 300x250 |
8.09:1 | 728x90 |
Your go-to resource center for effortlessly monetizing your apps and websites with InMobi is here. This comprehensive guide will take you through every step of the onboarding process—from creating and configuring your account to maximizing your earnings potential. You'll also find essential information on compliance initiatives and key guidelines to ensure successful and sustainable monetization as an InMobi publisher.
Here is your onboarding checklist:
For any assistance, contact us through the Chatbox or reach out to your Customer Success Manager.
Now, let's get started.
If you are unable to find the verification email in your inbox, check your Spam folder. If you haven’t received it, click Resend Email on the Sign-Up page and enter your email address.
You have successfully signed up with InMobi. You can now login to your account with your new credentials.
You must add at least one placement and ad unit for your apps or websites to generate ad revenue. A placement is a place and time displayed on the ad in your app, and the ad unit is the ad format. It is recommended to create multiple ad units to provide a varied user experience and sell more impressions.
To register your published app, website, or unpublished app with InMobi, follow the instructions below.
If you need help editing your compliance settings, contact support@inmobi.com.
You have successfully added your app or website.
To create a new placement, follow the instructions below.
You have successfully created an ad unit and placement. Repeat the above steps to create multiple ad units.
You must update your company details and payment information to receive payments from InMobi. Follow the steps below to configure payments.
screenshot-
You have successfully updated your company and billing information.
For payments to be made to you, you must add a mode of payment. You can receive your payouts via Electronic Fund Transfer or PayPal. To add your preferred mode of payment, follow the instructions below.
InMobi follows a payout cycle of 60 days meaning your earnings for a given month will be credited to you at the end of the 60-day payout cycle.
You must upload the tax forms depending on the payment country.
To know more about the IRS tax form types, refer to the following table below:
Form Type | Intended Use |
W-9 | An entity or individual resident in the US for tax purposes. |
W-8BEN | Not relevant for entities. Only for individual who is not tax resident in the US and is the beneficial owner of income. |
w-8BEN-E | An entity that is not a resident within the US for tax purposes. |
We can process payments once your cumulative earnings exceed the minimum payment threshold set. The threshold range must be between $300 - $10000.
Since you have already set up your account, first placements, and ad units on the InMobi UI, your next step is integrating the InMobi SDK into your app. It gives you access to InMobi’s exchange and ad network technology to serve in-app ads.
It is recommended that you always update to the latest version of our SDK to take advantage of newly launched features or performance fixes we might introduce.
Click here to download the latest InMobi SDKs (iOS and Android). You can review our integration guidelines for iOS and Android.
Mediation is a monetization solution that allows app developers to manage and optimize multiple advertising partners with just one SDK integration. Mediation gives publishers access to demand through multiple ad networks, creating an arena where the networks compete to serve their ads.
To integrate InMobi as a demand source on third-party mediation platforms, you must integrate the InMobi SDK adapter. You can integrate InMobi with:
For more information about our integrations and the available formats, see Third-party Mediation Platform.
If you wish to use InMobi as your primary mediation platform, we recommend you to see Getting Started.
Header bidding goes by many names. At InMobi, we call it Audience Bidding. Essentially, Audience Bidding is in-app header bidding. It allows publishers to sell their inventory in a unified auction where ad sources bid for each impression in real time.
Publishers can enable Audience Bidding with InMobi as a demand source using all major header bidding solutions in the market, including:
For more information, see our Audience Bidding integrations.
For more information on the Open RTB integrations, see oRTB integrations.
Testing your integration is an important step for successful onboarding. We recommend testing your integration to ensure that placements and ad units are correctly displaying across your app without affecting the live traffic. To start testing using our Sandbox Testing tool, follow the instructions below.
You have successfully added a device for testing your integration. If you come across any issues, contact our support team to start troubleshooting your integration.
To maximize your monetization with InMobi, it is strongly recommended that you implement our best practices listed below.
If you have already configured your block settings, select your desired settings from the Block Settings drop-down list. For more information on how to configure your block settings, see Block Settings.
InMobi CMP offers granular analytics to help you optimize and maximize your consent rate. You can view consent data for different regulations such as GDPR, CCPA and MSPA, and their opt-in rates according to countries for your apps and websites.
The granular analytics feature can be found under the Reports tab with two sections: Dashboard and Analytics.
Now let’s take a detailed look at each section.
The dashboard offers a pre-built set of comprehensive trends and metrics. These are not customizable.
The Summary allows you to view and compare data between specific periods of your choice.
You can use Filters to view in-depth data for a specific regulation, site, device type, OS and country during a particular time.
You can view country-wise traffic and consent rates during a specific period to understand which countries generate the most traffic and opt-ins.
The two pie charts at the bottom of the dashboard reflect the regulation-wise consent distribution data between GDPR and CCPA.
The Analytics offers a visualization into custom reports generated after selecting dimensions, filters, and metrics of your choice.
Dimensions are attributes by which you filter and group data.
InMobi CMP supports the following dimensions:
Filters allow you to query data only for specific values/attributes of the Dimensions. Furthermore, you can also select a particular timeframe to run reports for deeper granularity.
Metrics is the quantifiable measure that you wish to see. InMobi CMP offers the following metrics:
To understand better, let’s take an example. If you want to generate a report showing the opt-in rates of mobile devices in the USA in the last 30 days, it will look something like this.
Here, Country and Device Type are the Dimensions, 30 days is the Time, Mobile is the Device Type filter, US is the Country filter, and opt-in rates is the metric.
You can view all your saved reports by clicking View All Reports.
You can also schedule recurring reports. These will be automatically sent at regular intervals to specific email addresses listed by you. Currently, InMobi CMP can scheduled reports on a custom, daily, weekly, and monthly basis.
InMobi’s Ad Management APIs help you manage your inventory i.e., apps and placements you are monetizing or interested in monetizing through InMobi easily and efficiently. They reduce the manual effort of managing huge inventory individually through our platform.
For authentication, you need the following values in the header:
Key | Value |
x-client-secret | You need to generate an API key. To know how to generate a new API key or access an existing API key, see Reporting API. |
x-account-id | You need to enter the Account ID. You can find the Account ID in Payment Settings under the Finance tab on InMobi platform. |
x-client-id | You need to enter the email ID of the account. |
The APIs are available for the following functionalities:
The request protocol of all APIs is https.
Name | Description | Required | Type | Sample/Available values |
pageNum | page number | Optional | Integer | 1, 2, 3 etc. |
pageLength | number of records per page | Optional | Integer |
1, 2, 3 etc. Default number of results: 10 |
status | status of the app | Optional | String |
Available values : ACTIVE, DRAFT, ARCHIVE, FLAGGED Default value: ACTIVE |
{
"success": true,
"data": {
"totalRecords": 281,
"records": [
{
"storeUrl": "string",
"appName": "string",
"platform": "string",
"bundleId": "string",
"childDirected": 1,
"appRating": "string",
"appId": 0
}
]
}
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean |
true – request successful false – request unsuccessful with some error(s) |
storeUrl | App store/Play store URL of the app | String (url) | URL |
appName | Name of the app | String | Sample App |
Platform | Platform of the app | String | Android or iPhone (iOS) |
bundleId | Bundle of the apps as registered in the store | String | Com.org.app |
childDirected | Determines the audience type of the app | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appRating | Content Rating of the app | String | |
appId | ID of the app on InMobi dashboard | Numeric |
{
"success": true,
"data": {
"storeUrl": "string",
"appName": "string",
"platform": "string",
"bundleId": "string",
"childDirected": 0,
"appRating": "string",
"appId": 0
},
"status": "string",
"createdOn": "string"
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean |
true – request successful
false – request unsuccessful with some error(s) |
storeUrl | App store/Play store URL of the app | String (url) | URL |
appName | Name of the app | String | Sample App |
Platform | Platform of the app | String | Android or iOS |
bundleId | Bundle of the apps as registered in the store | String | Com.org.app |
childDirected | Determines the audience type of the app | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appRating | Content Rating of the app | String | |
appId | ID of the app on InMobi dashboard | Numeric | |
status | Current status of the app on platform | String | PENDING REVIEW, ACTIVE, FLAGGED, REJECTED, ARCHIVED |
createdOn | Date of app creation on platform | String |
{
"storeUrl": "string",
"childDirected": 0,
"locationAccess": true,
"appName": "string"
}
Name | Description | Required | Type | Sample/Possible values |
storeUrl | App store/Play store URL of the app | Required | String (url) | URL |
locationAccess | Specify if InMobi can access the location details | Required | Boolean |
true – InMobi will be able to use the location data collected by this app. false – InMobi will not be able to access the location data collected by this app. |
childDirected | Specify the audience type of the app | Required | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appName | Name of the app | Optional | String | Sample App |
{
"success": true,
"data": {
"storeUrl": "string",
"appName": "string",
"platform": "string",
"bundleId": "string",
"childDirected": 0,
"appRating": "string",
"appId": 0
},
"status": "string",
"createdOn": "string"
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean | true – request successful |
storeUrl | App store/Play store URL of the app | String (url) | URL |
appName | Name of the app | String | Sample App |
Platform | Platform of the app | String | Android or iOS |
bundleId | Bundle of the apps as registered in the store | String | Com.bundle.app |
childDirected | Determines the audience type of the app | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appRating | Content Rating of the app | String | |
appId | ID of the app on InMobi dashboard | Numeric | |
status | Current status of the app on platform | String | PENDING REVIEW, ACTIVE, FLAGGED, REJECTED, ARCHIVED |
createdOn | Date of app creation on platform | String |
{
"childDirected": 0,
"locationAccess": true,
"appName": "string"
}
Name | Description | Required | Type | Sample/Possible values |
locationAccess | Specify if InMobi can access the location details | Required | Boolean |
true – InMobi will be able to use the location data collected by this app. false – InMobi will not be able to access the location data collected by this app. |
childDirected | Specify the audience type of the app | Required | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appName | Name of the app | Optional | String | Sample App |
{
"success": true,
"data": {
"storeUrl": "string",
"appName": "string",
"platform": "string",
"bundleId": "string",
"childDirected": 0,
"appRating": "string",
"appId": 0
},
"status": "string",
"createdOn": "string"
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean | true – request successful |
storeUrl | App store/Play store URL of the app | String (url) | URL |
appName | Name of the app | String | Sample App |
Platform | Platform of the app | String | Android or iOS |
bundleId | Bundle of the apps as registered in the store | String | Com.bundle.app |
childDirected | Determines the audience type of the app | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appRating | Content Rating of the app | String | |
appId | ID of the app on InMobi dashboard | Numeric | |
status | Current status of the app on platform | String | PENDING REVIEW, ACTIVE, FLAGGED, REJECTED, ARCHIVED |
createdOn | Date of app creation on platform | Optional |
Name | Description | Required | Type | Sample/Available values |
pageNum | page number | Optional | Integer | 1, 2, 3 etc. |
pageLength | number of records per page | Optional | Integer |
1, 2, 3 etc. Default number of results: 10 |
appId | The ID of an app | Required | Integer |
|
placementType | The type of placement | Optional | String | Available values : INTERSTITIAL, BANNER, REWARDED_VIDEO, NATIVE |
{
"success": true,
"data": {
"totalRecords": 281,
"records": [
{
"storeUrl": "string",
"appName": "string",
"platform": "string",
"bundleId": "string",
"childDirected": true,
"appRating": "string",
"appId": 0
},
{
"placementId": 0,
"placementName": "string",
"placementType": "string",
"testMode": "string",
"status": "string",
"appId": 0,
"cpmFloor": 0,
"isAudienceBiddingEnabled": true,
"audienceBiddingPartner": "string",
"a9TagId": "string",
"a9AppId": "string",
"isFallbackPlacement": true,
"createdOn": "string"
}
]
}
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean |
true – request successful false – request unsuccessful with some error(s) |
storeUrl | App store/Play store URL of the app | String (url) | URL |
appName | Name of the app | String | |
Platform | Platform of the app | String | Android or iPhone (iOS) |
bundleId | Bundle of the apps as registered in the store | String | Com.org.app |
childDirected | Determines the audience type of the app | Integer |
1 – App is not directed towards children 2 – App is directed towards children and requires parental consent 3 – App is directed partially towards children and towards adults |
appRating | Content Rating of the app | String | |
appId | App key on InMobi platform | Integer | |
placementId | ID of the placement as on InMobi platform | Integer | |
placementName | Placement name as on InMobi platform | String | |
placementType | Type of placement | String | Available values : INTERSTITIAL, BANNER, REWARDED_VIDEO, NATIVE |
testMode | Test mode of the placement | String |
On – Test mode is on for specific devices as mentioned in the integration testing in InMobi platform Global – Test mode is on for all devices with this app Off – Test mode is off for all devices with this app |
status | Current status of the placement | String | Available values : ACTIVE, DRAFT, ARCHIVE, FLAGGED |
cpmFloor | eCPM floor set on the InMobi platform | Number | |
isAudienceBiddingEnabled | Determines if Audience Bidding is enabled for this placement | Boolean |
true – Audience Bidding is on false – Audience Bidding is off |
audienceBiddingPartner |
Audience Bidding Partner (applicable only if Audience Bidding is enabled) | String | Available values: MAX, AMAZON_TAM, GOOGLE_OPEN_BIDDING, CUSTOM_MEDIATION, IRONSOURCE, SPRINGSERVE, PREBID, FYBER, ADMOST, AEQUUS, GAMEANALYTICS_HYPERBID, CHARTBOOST, GOOGLE_SDK_BIDDING |
a9TagId | Tag ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
A9AppId | App ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
createdOn | Creation date of the placement | String |
{
"success": true,
"data": {
"placementId": 0,
"placementName": "string",
"placementType": "string",
"testMode": "string",
"status": "string",
"appId": 0,
"cpmFloor": 0,
"isAudienceBiddingEnabled": true,
"audienceBiddingPartner": "string",
"a9TagId": "string",
"a9AppId": "string",
"isFallbackPlacement": true,
"createdOn": "string"
}
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean |
true – request successful false – request unsuccessful with some error(s) |
appId | App key on InMobi platform | Integer | |
placementId | ID of the placement as on InMobi platform | Integer | |
placementName | Placement name as on InMobi platform | String | |
placementType | Type of placement | String | Available values : INTERSTITIAL, BANNER, REWARDED_VIDEO, NATIVE |
testMode | Test mode of the placement | String |
On – Test mode is on for specific devices as mentioned in the integration testing in InMobi platform Global – Test mode is on for all devices with this app Off – Test mode is off for all devices with this app |
status | Current status of the placement | String | Available values : ACTIVE, DRAFT, ARCHIVE, FLAGGED |
cpmFloor | eCPM floor set on the InMobi platform | Number | |
isAudienceBiddingEnabled | Determines if Audience Bidding is enabled for this placement | Boolean |
true – Audience Bidding is on false – Audience Bidding is off |
audienceBiddingPartner |
Audience Bidding Partner (applicable only if Audience Bidding is enabled) | String | Available values: MAX, AMAZON_TAM, GOOGLE_OPEN_BIDDING, CUSTOM_MEDIATION, IRONSOURCE, SPRINGSERVE, PREBID, FYBER, ADMOST, AEQUUS, GAMEANALYTICS_HYPERBID, CHARTBOOST, GOOGLE_SDK_BIDDING |
a9TagId | Tag ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
A9AppId | App ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
createdOn | Creation date of the placement | String |
{
"appId": 0,
"placementName": "string",
"placementType": "INTERSTITIAL",
"cpmFloor": 0,
"isAudienceBiddingEnabled": true,
"audienceBiddingPartner": "string",
"a9TagId": "string",
"a9AppId": "string",
"isFallbackPlacement": true
}
Name | Description | Required | Type | Sample/Possible values |
appId | App key on InMobi platform | Required | Integer | |
placementName | Placement name as on InMobi platform | Required | String | |
placementType | Type of placement | Required | String | Available values : INTERSTITIAL, BANNER, REWARDED_VIDEO, NATIVE |
cpmFloor | eCPM floor set on the InMobi platform | Optional (not appicable in case isAudienceBiddingEnabled is "true") | Number | |
isAudienceBiddingEnabled | Determines if Audience Bidding is enabled for this placement | Required | Boolean | true – Audience Bidding is on false – Audience Bidding is off |
audienceBiddingPartner | Audience Bidding Partner (applicable only if Audience Bidding is enabled) | Required (only if isAudienceBiddingEnabled is “true”) | String | Available values: MOPUB, MAX, AMAZON_TAM, GOOGLE_OPEN_BIDDING, CUSTOM_MEDIATION, IRONSOURCE, SPRINGSERVE, PREBID, FYBER, ADMOST, AEQUUS, GAMEANALYTICS_HYPERBID, CHARTBOOST, GOOGLE_SDK_BIDDING |
a9TagId | Tag ID of Amazon TAM placement | Required (only in case of Amazon TAM as Audience Bidding partner) | String | |
A9AppId | App ID of Amazon TAM placement | Required (only in case of Amazon TAM as Audience Bidding partner) | String |
{
"success": true,
"data": {
"placementId": 0,
"placementName": "string",
"placementType": "string",
"testMode": "string",
"status": "string",
"appId": 0,
"cpmFloor": 0,
"isAudienceBiddingEnabled": true,
"audienceBiddingPartner": "string",
"a9TagId": "string",
"a9AppId": "string",
"isFallbackPlacement": true,
"createdOn": "string"
}
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean |
true – request successful false – request unsuccessful with some error(s) |
placementId | ID of the placement as on InMobi platform | Integer | |
placementName | Placement name as on InMobi platform | String | |
placementType | Type of placement | String | Available values : INTERSTITIAL, BANNER, REWARDED_VIDEO, NATIVE |
testMode | Test mode of the placement | String | ON – Test mode is on for specific devices as mentioned in the integration testing in InMobi platform
GLOBAL – Test mode is on for all devices with this app OFF – Test mode is off for all devices with this app |
cpmFloor | eCPM floor set on the InMobi platform | Number |
|
isAudienceBiddingEnabled | Determines if Audience Bidding is enabled for this placement | Boolean |
true – Audience Bidding is on false – Audience Bidding is off |
audienceBiddingPartner | Audience Bidding Partner (applicable only if Audience Bidding is enabled) | String |
Available values: MOPUB, MAX, AMAZON_TAM, GOOGLE_OPEN_BIDDING, CUSTOM_MEDIATION, IRONSOURCE, SPRINGSERVE, PREBID, FYBER, ADMOST, AEQUUS, GAMEANALYTICS_HYPERBID, CHARTBOOST, GOOGLE_SDK_BIDDING |
appId | App key on InMobi platform | Integer | |
a9TagId | Tag ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
A9AppId | App ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
status | Current status of the placement | String | Available values : ACTIVE, DRAFT, ARCHIVE, FLAGGED |
createdOn | Creation date of the placement | String |
{
"placementName": "string",
"cpmFloor": 0,
"isAudienceBiddingEnabled": true,
"audienceBiddingPartner": "string",
"a9TagId": "string",
"a9AppId": "string",
}
Name | Description | Required | Type | Sample/Possible values |
placementName | Placement name as on InMobi platform | Required | String | |
cpmFloor | eCPM floor set on the InMobi platform | Optional (not appicable in case isAudienceBiddingEnabled is "true") | Number | |
isAudienceBiddingEnabled | Determines if Audience Bidding is enabled for this placement | Optional | Boolean | true – Audience Bidding is on false – Audience Bidding is off |
audienceBiddingPartner | Audience Bidding Partner (applicable only if Audience Bidding is enabled) | Required (only if isAudienceBiddingEnabled is “true”) | String | Available values: MOPUB, MAX, AMAZON_TAM, GOOGLE_OPEN_BIDDING, CUSTOM_MEDIATION, IRONSOURCE, SPRINGSERVE, PREBID, FYBER, ADMOST, AEQUUS, GAMEANALYTICS_HYPERBID, CHARTBOOST, GOOGLE_SDK_BIDDING |
a9TagId | Tag ID of Amazon TAM placement | Required (only in case of Amazon TAM as Audience Bidding partner) | String | |
A9AppId | App ID of Amazon TAM placement | Required (only in case of Amazon TAM as Audience Bidding partner) | String |
{
"success": true,
"data": {
"placementId": 0,
"placementName": "string",
"placementType": "string",
"testMode": "string",
"status": "string",
"appId": 0,
"cpmFloor": 0,
"isAudienceBiddingEnabled": true,
"audienceBiddingPartner": "string",
"a9TagId": "string",
"a9AppId": "string",
"isFallbackPlacement": true,
"createdOn": "string"
}
}
Name | Description | Type | Sample/Possible values |
Success | Determines success of the response | Boolean |
true – request successful false – request unsuccessful with some error(s) |
placementId | ID of the placement as on InMobi platform | Integer | |
placementName | Placement name as on InMobi platform | String | |
placementType | Type of placement | String | Available values : INTERSTITIAL, BANNER, REWARDED_VIDEO, NATIVE |
testMode | Test mode of the placement | String | ON – Test mode is on for specific devices as mentioned in the integration testing in InMobi platform
GLOBAL – Test mode is on for all devices with this app OFF – Test mode is off for all devices with this app |
cpmFloor | eCPM floor set on the InMobi platform | Number |
|
isAudienceBiddingEnabled | Determines if Audience Bidding is enabled for this placement | Boolean |
true – Audience Bidding is on false – Audience Bidding is off |
audienceBiddingPartner | Audience Bidding Partner (applicable only if Audience Bidding is enabled) | String |
Available values: MOPUB, MAX, AMAZON_TAM, GOOGLE_OPEN_BIDDING, CUSTOM_MEDIATION, IRONSOURCE, SPRINGSERVE, PREBID, FYBER, ADMOST, AEQUUS, GAMEANALYTICS_HYPERBID, CHARTBOOST, GOOGLE_SDK_BIDDING |
appId | App key on InMobi platform | Integer | |
a9TagId | Tag ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
A9AppId | App ID (applicable only in case of Amazon TAM as Audience Bidding partner) | String | |
status | Current status of the placement | String | Available values : ACTIVE, DRAFT, ARCHIVE, FLAGGED |
createdOn | Creation date of the placement | String |
Following are the possible error scenarios that might arise while using these APIs:
Error code | Type | Description |
400 | Bad request response | Please check the values passed in the request body for correct values in correct formats |
401 | Unauthorized request response | Please check the values passed in the header and auth for correct values |
500 | Internal server error response | There is an internal issue. Please try again after some time or contact InMobi CSM or support (email us at support@inmobi.com) |
The rate of requests for each publisher is capped to 500 requests in an interval of 15 minutes.
In case of any unresolved queries, please reach out to your CSM or reach out to us at support@inmobi.com. You can also raise a ticket here: https://support.inmobi.com/mytickets.
Even though Glance Smart Lock Screen is a managed-serve platform for buying ads on ad exchanges, you also need to follow some best practices to ensure you get the best possible Return on Ad Spent (RoAS).
Read Glance Creative best practices.
For accurate measurement and attribution, it’s essential to fulfill the onboarding requirements.
Mobile Measurement Partners (MMPs) are third-party attribution platforms that capture campaign data and attribute every user action. Advertisers use MMPs to track and analyze campaign performance across multiple ad partners.
To enable this tracking, advertisers need to embed the MMP’s software development kit (SDK) in their app. This SDK captures and receives user events (e.g., clicks, installs) using tracking links provided by Glance.
Because Glance is an appless content consumption platform on phone lock screens, the user journey differs from that of standard Android apps. To accommodate this unique flow, Glance has collaborated with leading MMPs to develop custom integrations. Follow all the specified steps to integrate your preferred MMP with Glance effectively.
Glance and MMP integrations help advertisers validate the campaign attribution numbers on their MMP dashboards.
1. Sign a campaign contract with Glance Sales after providing all the required onboarding information.
2. Configure your preferred MMPs for Glance.
3. Share the tracking URL with the Glance team.
4. The Glance team adds those URLs to their campaign management tool and publishes the campaign.
5. Find the campaign performance reports on your MMP dashboard.
Glance supports integration with the following MMPs:
If AppsFlyer is your preferred MMP, you need to integrate it with Glance before the campaign starts.
Glance and AppsFlyer are exclusive Pre-load Referrer Attribution partners and offer seamless integration.
The integration starts with activating Glance as your partner on your AppsFlyer account, followed by changing the required configuration and enabling the pre-load attribution option. You can generate and share the attribution links with the Glance team.
Before the integration, make sure you have:
Follow the steps to integrate Glance and AppsFlyer to enable attribution for Android app campaigns:
The integration starts with the activation of the Glance on your AppsFlyer dashboard using the following steps:
Go to Collaborate > Partner Marketplace in the left menu bar.
In the search bar, search for Glance and select it. You move to the Integration setup page.
After you activate Glance, you need to configure the integration setting for InMobi DSP as follows:
Enable the Preload attribution toggle and keep the Preload lookback window to 90 days.<Add screenshot>
In the Default postbacks section, select All media sources, including organic against Install (Event Name) in the for users from drop-down.
Organic refers to the advertiser’s unattributed data.
Under the In-app event settings section, enter the Advertiser ID value provided by the Glance team, which is the same as in General settings.
Enable the In-app event postbacks toggle. Glance recommends the value to be Lifetime. The minimum value is 6 months.
Click Add event to add postbacks for in-app events. Add all the funnel events and their details.
You can generate the attribution link for UA campaigns, which the Glance team uses while creating the campaign, as follows:
You can generate the attribution link for REM campaigns, which the Glance team uses while creating the campaign, as follows:
You need to provide the following permissions to Glance on the AppsFlyer dashboard:
Switch on the Ad network permissions toggle.
Enable the following permission toggles:
Check the settings done in the previous steps and click Save.
If you use Adjust as MMP, you need to integrate it with Glance before the campaign starts.
Before the integration starts, make sure you have
Integrating Adjust and Glance is a one-time process applicable to all further campaigns.
Enable Glance on your Adjust account as follows:
Select the app you want to run the campaign for as follows:
Enable data sharing between Glance and your Adjust account as follows:
You need to generate an Adjust Ad tracking URL, which the Glance team uses while configuring the campaign on Glance. Generate the URL as follows:
Share the Adjust tracking URL with the Glance team.
If you use Branch as MMP for your campaigns, you need to integrate it with Glance before your first campaign.
Before you can start the integration, make sure you have:
Integrating Branch and Glance is a one-time process applicable to all the further campaigns. The integration steps are:
You need to enable Glance as a partner as the first step in the integration.
In the Ad Partners drop-down, search for Glance and select it.
Do not select InMobi or InMobi DSP.
Click Save & Enable.
Enabling Glance automatically enables the following postbacks:
Select ALL EVENTS for every pre-configured and configured event.
You can add new postbacks using the following steps:
Select the event you want to create the postback for and click Save. The Branch app automatically generates the POSTBACK URL.
Refer to the Custom Postback topic in Branch Help if you want to add a custom postback.
An Attribution window is a period for capturing the valid attribution for an event. Branch has industry-standard attribution window values pre-set in the Attribution Windows tab.
Do not change the pre-set attribution window values to avoid any discrepancies in the data.
Enable the attribution window as follows:
The Glance team uses the Branch Ad Link you generate. The link allows you to receive the attribution data from Glance, which you can use to validate the campaign performance. Share the link with them after you generate it.
Read the Generate Branch Ad Link topic on the Branch Help to know the steps of generating the link.
When the campaign launches, the data exchange starts between Glance and your Branch account. Enable Glance data on your Branch Dashboard as follows:
If you use Singular as your preferred MMP, you need to integrate it with Glance before your first campaign starts.
Before starting the integration, make sure you have
Integrating Singular and Glance is a one-time process applicable to all further campaigns.
Select Glance as the partner of Singular for your campaigns as follows:
Add the app and site (app version) you want to run the campaign for as follows:
Stay on the same page and configure the postbacks on Singular as follows:
Share the URL with the Glance team only after completing all the configuration.
Share the Postback URLs you get while configuring Install & Re-engagement Postbacks and Event Postbacks with the Glance team.
If Kochava is your preferred MMP, you need to integrate Kochava with Glance before the campaign starts.
Before starting the integration, make sure you have:
The integration of Kochava and Glance is a one-time process and applicable to all the further campaigns. The integration steps are:
On the right side of the header, select your required account. Then, select the app for which you want to run the campaign.
You need to create a tracker link and share it with the Glance team. The team uses the Kochava tracker in your campaigns, which allows data postback from Glance to your Kochava account.
Under the Tracker & Network Set Up section, enter a tracker name.
The Tracker Name field fills up with a system-generated name when you click Add a Tracker. It’s suggested you change the name to your preferred name.
Select Acquisition in the TRACKER TYPE drop-down. For the Re-engagement campaign, select Reengagement.
Under the Destination URL section, select Landing Page.
Refer to Kochava’s Landing Page Creation and Maintenance Support documentation for more information on creating and using Landing Pages.
A postback—also called a callback—is data communication between two servers (Kochava and Glance in the current scenario) following an in-app event, such as an app installation or user activity. This system enables the Glance team to get real-time updates on user interactions, drops, or any issues regarding the campaign. Configure the postbacks for Glance as follows:
Go to Apps & Assets > Partner Configuration in the left menu bar.
Click Go.
Click Install > Postback Tools ( •
•
• ) > Edit. The Edit Postback Install page opens.
Enter or select the Glance-recommended values in the following fields:
Field | Glance recommended value | Description |
---|---|---|
PROPERTY NAME | advertiser_id | Identifier for the Glance campaigns. |
IMPRESSION CONVERSION DELIVERY | - | Determines if impression-matched install postbacks are limited. |
PACKAGE NAME/BUNDLE ID | - | |
DELIVERY DELAY | Realtime Delivery | Enables real-time postback delivery to Glance. |
RETRY ATTEMPTS | 3 | Configures the number of attempts for redelivery in case of a failure. |
DELIVERY METHOD | Deliver All | Provides unattributed data access to the Glance. |
Glance is a user-first content discovery platform developed in partnership with leading Android OEMs. It delivers an app-less experience on the Lock Screen, reaching over 400 million users globally. Glance offers full-screen ad inventory on the Lock Screen and Feed Screen, enhancing engagement with seamless content discovery.
Glance Smart Lock Screen does not allow user-generated content and only features Glance curated or moderated content and ads.
Unlike traditional app inventories, Glance delivers non-intrusive, native, fresh, high-quality, serendipitous, and contextual ad experiences. This approach creates lasting impressions and improves users’ Lifetime Value (LTV).
Read more about Glance ad inventories.
Glance creatives follow strict guidelines and specifications defined by the Glance team and integrated OEMs. These guidelines ensure a consistent, accessible user experience while promoting app discovery, user safety, and brand safety. They also enhance user interaction and simplify development, maintenance, and updates, leading to improved quality control and more efficient rollouts of new features and fixes.
Glance offers user acquisition and re-marketing campaign capabilities backed by first-party data from Glance and other InMobi platforms. You can also leverage the Glance's machine learning models effectively by sharing your unattributed data with the Glance team.
Once you have signed the campaign contract with the Glance team, you need to fulfill the onboarding requirements for Glance. These requirements are necessary to run the campaign efficiently and achieve the campaign goals.
Before the campaign starts, you need to integrate your preferred Mobile Measurement Partner (MMP) with Glance to enable third-party measurement and validation. During and after the campaign, you can find campaign performance reports on your preferred MMP dashboard.
Glance Smart Lock Screen performance campaigns can be of two types based on the user flow:
Users can initiate app installation with one click on the CTA, without unlocking the phone and getting redirected to the Google Play Store or other OEM app marketplaces. The OCI flow has the following user flow
For Xiaomi and Realme (Indonesia) devices, advertisers must host the latest app on the GetApps store. For Samsung devices, advertisers need to provide the latest universal SDK.
The CTA of the ad leads the user to unlock their device and redirects them to Google Play Store or any other app source.
Glance OCI provides several key advantages compared to the traditional Play Store flow:
Install rejection: Glance ensures a privacy-safe, on-device attribution system. It is a deterministic attribution partner to AppsFlyer and Adjust, thus driving precise and fraud-free attributions.
You can buy Glance Smart Lock Screen Inventories through direct deals with Glance to reach 400 million Glance users. The following inventories are available for performance ads on Glance:
Glance is available on the following mobile OEMs:
Glance, a consumer-first content platform, has access to over 400 million users worldwide. Every third Android device has Glance. These users consume diverse content on Glance, including news, health, lifestyle, food, sports, entertainment, automobiles, etc. This extensive user base provides valuable first-party data for targeted campaigns.
For performance campaigns, the Glance team uses these rich first-party data from its platform and other InMobi platforms as the foundation for the Glance Machine Learning models. Additionally, Glance also leverages advertisers’ data, real-time events, and past campaign data (advertiser-specific) to enhance targeting efficiency. The models dynamically create audience segments to target the right set of users.
Glance ads strictly follow data policies to safeguard advertisers’ data. The advertisers' and campaigns’ data are only used to scale their future Glance campaigns and are not shared with or used for other advertisers’ campaigns.
The data required to improve the efficiency of the models comes from the following sources:
For UA campaigns, Glance uses first-party and advertisers’ data to dynamically build the targeting rules and audiences:
Your data is only used to scale your future campaigns and is not shared with or used for other advertiser’s campaigns.
For REM campaigns, Glance uses first-party and advertisers’ data signals to dynamically build the targeting rules and audiences:
Your data is only used to scale your future campaigns and is not shared with or used for other advertiser’s campaigns.
Although Glance first-party data are the primary source for building targeting rules and audiences, you must share unattributed data with the Glance team for the following reasons:
Unattributed data provide abundant information about user behavior and preferences and are not limited to ad-driven interaction. By enabling unattributed data on your MMP dashboards, you allow Glance to access a broader spectrum of data points. These include organic installs and user actions within the app, which contribute to more comprehensive training samples for Glance ML models.
With more robust data sets, models predict user behavior more accurately and optimize ad placements effectively.
In the absence of unattributed data, Glance may allocate some campaign period and budget to identify potential conversion opportunities across various app categories. This process is costly and inefficient due to the high variance in conversion probabilities and the sparsity of conversion events.
Instead, the Glance team can utilize the historical unattributed data patterns to make informed bidding decisions and allocate budget efficiently, thus, improving RoAS.
In scenarios where pre-historic data is sparse, unattributed data provides additional contexts and user interaction signals, even if it’s not directly linked to a conversion. This broader data view allows Glance internal systems to identify and learn from subtle patterns, user drops, and other signals that precede conversions, enriching the training dataset and enabling more precise targeting.
Glance Lock Screen and Feed ad creatives are non-intrusive, native, high-quality, and contextual. Unlike standard mobile app ads, Glance ad creatives are moderated by Glance Creative Labs—a team of creative designers leveraging Glance Generative AI capabilities.
Once you sign a campaign contract with the Glance team, you share your existing creatives’ open files (.ai or .psd) with them. The Glance Creative Labs does a quality analysis of the creative and converts it into the Glance-compatible format for the campaign.
Based on the available inventories, Glance publishes full-screen display and video ads, which follow the Glance creative specifications and guidelines.
Glance creatives follow strict guidelines and specifications defined by the Glance team and integrated OEMs. These guidelines ensure a consistent, accessible user experience while promoting app discovery, user safety, and brand safety. They also streamline development, maintenance, and updates, allowing for quality control and efficiency in rolling out new features and fixes.
Glance has some basic differences in UI across OEMs. These differences are due to OEM partnerships and do not change the user experience. Here are some examples:
Glance offers premium full-screen display ad inventories on Lock Screen and Feed.
Share the creative open files and copy of the ad (.ai or .psd format) with the following specifications:
Glance Feed is another user destination of the Glance Smart Lock Screen platform which users can access after clicking the CTA on the Lock Screen, offering capabilities to run more engaging formats (full-screen display and video ads), thus driving additional conversions.
Share the creative open files and copy of the ad (.ai or .psd format) with the following specifications:
Glance offers premium full-screen video ad inventories on Feed.
Share the creative open files and copy of the ad with the following specifications:
Glance follows these creative guidelines to ensure effective and engaging ad experiences:
Glance ensures complete brand safety by adopting a rigorous approach to content evaluation. The Lock Screen serves as a personal and exclusive space to Glance users. Glance has restricted the following content categories in ads:
Glance is inherently safe and fraud-free because of strict content regulations, no user-generated content, OEM guidelines, SDK integration with the OEMs, and most importantly it can’t be downloaded as an app and only present on genuine devices. The ad content moderation and publishing on Glance inventories are managed directly by the Glance team.
Glance also offers third-party fraud safety and campaign measurement integrations for advertisers.
Glance supports the following third-party fraud-safety and campaign measurement tools:
You can take the following actions to avoid any fraud and maximize return on ad spend and get accurate attribution:
Glance offers flexible pricing models to advertisers depending on the campaign goals, target audience, verticals, etc. Please contact the Glance team to understand more about pricing for your campaign.
InMobi recognizes and affirms the pivotal role of Data Subject Requests (DSR) in upholding individuals' privacy rights. Following global data protection laws, any individual who wishes to exercise their rights, including but not limited to, rectifying, erasing, restricting, or objecting to the processing of their personal or sensitive information can make a DSR. In line with our unwavering commitment to protecting the privacy of data subjects, InMobi undertakes to respond to all data subject requests within the prescribed timeframe.
If you are partnering with InMobi or any of its affiliates(s), whereby you provide us with personal or sensitive personal information of data subjects for advertising purposes (such as IP address, advertising IDs, and precise location), you can use this InMobi Data Subject Rights (DSR) Request Form. This webform enables you to submit the following DSR(s) regarding the information that InMobi Exchange processes:
For more details and information about how we use and protect personal or sensitive information, please review your 'Agreement' with us.
The purpose of this document is to help navigate publishers through the functioning of InMobi Data Subject Rights (DSR) Request Form.
Follow these steps to access the InMobi Data Subject Rights (DSR) Request Form via the Data Subject Rights tab through the Publisher Dashboard.
The admin email ID linked to the publisher account will receive the OTP. To check the email ID that will receive the OTP or to update your DSR email IDs, please raise a ticket at https://support.inmobi.com/mytickets. To do this, select InMobi Publisher Platform and choose Data Subject Rights as Category.
The support center is not meant to raise DSR Requests.
You can share your DSR data using the DSR form.
deviceId |
0f90686e-2153-4e37-933d-f06c01877cee |
e6cb0cbc-25d5-4257-9fce-750e66a70af7 |
deviceId | deviceSubType |
0f90686e-2153-4e37-933d-f06c01877cee | IDFA |
e6cb0cbc-25d5-4257-9fce-750e66a70af7 | GPID |
The Request ID received here will be unique and can be tracked under the Request History tab.
Select Request History from the left navigation to view and track all the requests with their status, type, and unique Request ID.
InMobi DSP allows advertisers to buy mobile in-app performance ad inventories across InMobi Ad Exchange and other leading ad exchanges. InMobi is integrated with the following ad exchanges:
The DSP is integrated with multiple ad exchanges via APIs, enabling real-time bidding (RTB) and data exchange.
The ad buying process on InMobi DSP involves the following steps:
InMobi DSP uses AI/ML-based bidding technology to improve user acquisition and re-marketing using the following processes:
InMobi DSP's Machine Learning models dynamically create and update audiences for precise targeting, ensuring advertising efforts are directed toward the most relevant user groups and optimizing engagement and conversion rates. The data required to improve the efficiency of the models comes from the following sources:
The audience data required for training the models for the UA campaigns are:
The audience data required for training the models for the REM campaigns are:
Although InMobi DSP has access to quality first-party and third-party data, the advertisers’ unattributed data helps the campaign in the following ways:
Unattributed data sets provide abundant information about user behavior and preferences and are not limited to ad-driven interaction. Enabling unattributed data on your MMP dashboards allows the DSP to access a broader spectrum of data points. These include organic installs and user actions within the app, which contribute to more comprehensive training samples for the ML models.
With more robust data sets, models predict user behavior more accurately and optimize ad placements effectively.
In the absence of unattributed data, InMobi DSP may allocate some campaign period and budget to identify potential conversion opportunities across various app categories. This process is costly and inefficient due to the high variance in conversion probabilities and the sparsity of conversion events.
Instead, InMobi team can utilize the historical unattributed data patterns to make informed bidding decisions and allocate budget efficiently, thus, improving ROAS for advertisers.
In scenarios with sparse pre-historic data, unattributed data provides additional contexts and user interaction signals, even if it’s not directly linked to conversion. This broader data view allows InMobi internal systems to identify and learn from subtle patterns, user drops, and other signals that precede conversions, enriching the training dataset and enabling more precise targeting.
By tracking all events leading up to conversions, the InMobi team can better understand the customer journey and identify which interactions are most likely to lead to conversions. This insight is vital for optimizing campaign strategies and allocating resources more effectively.
Apple's App Tracking Transparency (ATT) framework emphasizes user privacy by requiring explicit consent for tracking. Despite this, the relevance and importance of unattributed first-party data still exist. InMobi DSP remains effective in driving performance for advertisers by leveraging first-party data responsibly and in compliance with ATT. The data comes from the following sources:
For example, for a gaming studio with multiple apps, the DSP leverages unattributed data from various bundle IDs that have enabled IDFA and IDFV. The availability of the opted-in IDFA and the publisher-specific IDFV in the first-party data allows the identification of similar users in the supply stream, serving as positive conversion labels for the models.
The presence of crucial contextual signals, including OS version, handset type, city, carrier, and the precise timing of conversion events within the unattributed data, provides valuable contextual data to fine-tune the optimization engine.
Advertisers must enable the tracking of all event streams that precede a purchase. This allows the InMobi DS models to understand the correlations between various events.When purchase event data is limited, InMobi DSP uses upper-funnel event data to improve the model accuracy.
The InMobi DSP audience segments have the following benefits:
By using advanced machine learning-backed segments, InMobi DSP allows advertisers to target their ads more precisely, increasing the relevance of the ads to the users.
Targeted advertising based on well-defined segments leads to higher engagement and conversion rates, as ads are more relevant to the users' interests and behaviors.
The categorization of audiences provides valuable insights into user behaviors and preferences, helping advertisers refine their strategies and improve campaign effectiveness.
Advertisers can allocate their budgets more efficiently by focusing on high-performing segments, thereby maximizing RoAS.
Before the campaign can go live on InMobi DSP, advertisers must integrate their Mobile Measurement Partner (MMP) with the DSP. MMPs are third-party attribution platforms that capture campaign data and attribute every user action. Advertisers can track and analyze campaign performance across multiple ad partners on an MMP.
Advertisers need to embed the MMP’s software development kit (SDK) in their app and capture and receive user events (Clicks, installs, etc.) using tracking links advertisers collect from InMobi DSP. Read more about MMP.
For the current version, MMP integration for InMobi DSP is available only for Andorind campaigns excpet for AppsFlyer. For iOS campaigns, the integration guides will be added soon for the other MMPs.
The DSP and MMP integrations help advertisers validate the campaign attribution numbers on their MMP dashboards.
InMobi DSP supports integration with the following MMPs:
If AppsFlyer is your preferred MMP, you need to integrate it with InMobi DSP before the campaign starts.
For running campaigns on iOS devices, the integration starts with activating InMobi DSP as a partner and changing the required configuration on the advertiser’s AppsFlyer dashboard. Post configuration, enable Probabilistic attribution. Advertisers need to generate and share the attribution links with InMobi account managers. Considering InMobi's recommendation, advertisers must enable and configure SKAN (Store Kit Ad Network) for their campaigns.
Before the integration, make sure you have:
Follow the steps to integrate the InMobi DSP and AppsFlyer to enable attribution (Probabilistic and Deterministic) for iOS app campaigns:
The integration starts with the activation of the InMobi DSP on your AppsFlyer account using the following steps:
Go to Collaborate > Partner Marketplace in the left menu bar.
In the search bar, search for InMobi DSP and select it. You move to the Integration setup page.
After you activate InMobi DSP, you need to configure the integration settings for InMobi DSP as follows:
In gpm_id, enter the GPMID value provided by your InMobi Account Manager.
In the Install attribution section, turn on the Install view-through attribution toggle.
In the Default postbacks section, select All media sources, including organic* against Install (Event Name) in the for users from drop-down.
*Organic refers to the advertiser’s unattributed data.
Under the In-app event settings section, enter the GPMID value provided by your InMobi account manager, which is the same as in General settings.
Enable the In-app event postbacks toggle. InMobi recommends Lifetime as the value of the In-app event postback window. The minimum value is 6 months.
Click Add event to add postbacks for in-app events. Add all the funnel events and their details.
Click Save integration.
Enabling probabilistic attribution as follows:
Switch on the Enable view-through attribution via probabilistic modeling toggle.
You can generate the attribution link, which your InMobi Account Manager uses while creating the campaign, as follows:
You need to provide the following permissions to InMobi DSP on the AppsFlyer dashboard:
Enable the following permission toggles:
You can activate the SKAN for your iOS campaigns as follows:
Click •
•
• and turn on the SKAN measurement toggle.
After selecting the measurement mode, decide which in-app events you want to capture for campaigns. Select in-app events and their range.
You can add a maximum of six unique in-app events.
Click the Download mapping file to save the Conversion Value mapping locally.
(Optional) You can upload your custom Conversion Values by clicking Upload Custom Decode Mapping File.
Learn more about Custom Decode. Refer to AppsFlyer’s SKAN Conversion Studio help for more details on setting up SKAN.
Check the settings done in the previous step and click Save.
InMobi recommends you set up SKAN Conversion Values as follows for the best attribution results:
The integration for the Android campaigns starts with activating InMobi DSP as your partner on your AppsFlyer dashboard and changing the required configuration. You can then generate and share the attribution links with your InMobi account manager.
For any queries related to the integration, please contact your InMobi Account manager.
Before starting the integration, make sure:
Follow the steps to integrate the InMobi DSP and AppsFlyer to enable attribution for Android app campaigns:
The integration starts with the activation of the InMobi DSP on your AppsFlyer dashboard using the following steps:
Go to Collaborate > Partner Marketplace in the left menu bar.
In the search bar, search for InMobi DSP and select it. You move to the Integration setup page.
After you activate InMobi DSP, you need to configure the integration setting for InMobi DSP as follows:
In gpm_id, enter the GPMID value provided by your InMobi Account Manager.
In the Install attribution section, turn on the Install view-through attribution toggle.
In the Default postbacks section, select All media sources, including organic against Install (Event Name) in the for users from drop-down.
Under the In-app event settings section, enter the GPMID value provided by your InMobi account manager, which is the same as in General settings
Enable the In-app event postbacks toggle. Do not change the default value of the In-app event postback window.
Click Add event to add postbacks for in-app events. Add all the funnel events and their details.
You can generate the attribution link your InMobi Account Manager uses while creating the campaign as follows:
You need to provide the following permissions to InMobi DSP on the AppsFlyer dashboard:
Enable the following permission toggles:
Check the settings done in the previous steps and click Save.
If you use Singular as your preferred MMP, you need to integrate it with InMobi DSP before your first campaign starts.
Before starting the integration, make sure you have
These integration steps are valid for Android campaigns. The integration steps for iOS campaigns will be updated soon.
Integrating Singular and DSP is a one-time process applicable to all further campaigns.
Select InMobi DSP as the partner of Singular for your campaigns as follows:
Add the app and site (app version) you want to run the campaign for as follows:
Stay on the same page and configure the postbacks on Singular as follows:
Share the URL with the InMobi team only after completing all the configuration.
Share the Postback URLs you get while configuring Install & Re-engagement Postbacks and Event Postbacks with the InMobi team.
On Ad exchanges, InMobi DSP supports all popular mobile in-app ad formats. You can buy the following ad formats through InMobi DSP on ad exchange inventories:
Display ads are static or animated images with standard dimensions. InMobi DSP supports the following sizes: Small banners, Medium banners, Interstitials, and Native Display.
Small banners are small-sized rectangular ads placed at the top, between paragraphs, and at the bottom of an article or a page. They are nonintrusive, cost-effective, frequent, contextual, and efficient formats that can reach a wider audience with minimal loading time and precise measurement.
The specifications of small banners are:
Medium banners are rectangular ads of medium size. These ads can be placed between the content, loading page, reward pages, etc. They are nonintrusive, cost-effective, frequent, contextual, and efficient formats that can reach a wider audience with minimal loading time and precise measurement.
The specifications of small banners are:
Interstitials are rectangular ads that cover the screen on which they are displayed. These are high-impact ads. The specifications of interstitials are:
Refer to the InMobi Ads Creative Handbook for creative references.
Native ads blend in with the content on which they appear, providing a more seamless and less intrusive user experience. These ads mimic the look, feel, and function of the media format in which they are seen, such as articles, videos, or other media. These ads offer higher engagement rates, improved CTRs, stronger brand affinity, reduced ad fatigue, and better ad rendering, along with contextual and personalized targeting.
There are three types of native: Rich display, Rich video, and Icons.
These are medium rectangle, fullscreen portrait, and wide rectangle ads. You can provide the ad creatives for the rich display ads based on the following specifications:
These are medium rectangle, full-screen portrait, and wide rectangle video ads. You can provide the ad creatives for the rich video ads based on the following specifications:
Icon ads in mobile apps are small, square-shaped, visually appealing ads typically displayed as icons within the app interface. These often appear in menus, navigation bars, or as part of a feed. You can provide the ad creatives for the icon ads based on the following specifications:
Refer to the InMobi Ads Creative Handbook for creative references.
Video ads with end cards are short video ads displayed over the content or a page and followed by a static or animated display CTA card. The specifications of video ads are:
The end cards are mandatory for video ads.
Refer to the InMobi Ads Creative Handbook for creative references.
Playable ads are interactive micro-game formats in which users can interact and play game previews. After the game ends, users can click the CTA to install the app. These games are meant to engage users and motivate them to install the app for the complete experience. These ads are best suited for gaming advertisers but can also be incorporated into other verticals. The specifications of playable ads are:
Refer to the InMobi Ads Creative Handbook for creative references.
The important components of an ad unit are as follows:
Adhere to the following creative best practices to ensure the DSP campaign leverages high-quality ad creatives that drive user engagement and deliver effective results.
The ad content is the most critical element of an ad campaign, as it directly engages the audience, conveys the brand message, and drives user actions. Make sure you:
A clear call to action (CTA) directs users to what to do next, driving conversions and ensuring the ad achieves its intended goal.
Optimum video length and effective content benefit a video campaign by maximizing viewer engagement and completion rates, ensuring the message is effectively delivered within the audience's attention span.
Refer to the InMobi Ads Creative Handbook for creative references.
Refer to InMobi content guidelines to learn about what type of content you can run through ads.
For existing app properties, users must explicitly save the property for the first time to activate the GPP functionality.
/**
* 1. Get the key from localStorage which start with amp-store
* 2. Parse the value and convert into JSON.
* 3. Once parsed, access the property 'amp-consent:inmobi'
* 4. Split the GPP string, and retrieve the TCF string which you can use.
* 5. Add proper handling and test before pushing the below code to production
* 6. For more details on how to access local storage, please look at amp-script documentation (https://amp.dev/documentation/components/amp-script)
*/
let consent = JSON.parse(atob(localStorage.getItem('<key-from-domain-local-storage>'))); //looks like this amp-store:https://deranged-humorr.surge.sh
if (consent && consent.vv) {
const gppString = consent.vv['amp-consent:inmobi'].v.r;
const gppStringArray = gppString.split('~');
for(let i = 0; i < gppStringArray.length; i++) {
if (gppStringArray[i].startsWith('CP')) {
console.log('TCF String is ', gppStringArray[i]);
}
}
}
Only MSPA signatories can mark transactions as Covered. You can check your signatory status and sign the MSPA here.
For Android Implementation and SDK-related changes, see Android.
For iOS Implementation and SDK-related changes, see iOS.
To configure MSPA in the InMobi CMP portal, see Portal Configuration and SDK Changes.
This section outlines the various APIs and callbacks that publishers can use to trigger the MSPA consent screen once they are integrated with GPP.
After initializing the SDK, you can present the MSPA screen by invoking the following method from ChoiceCmp
class and pass in the delegate object for registering CCPA callback.
ChoiceCmp.shared.showUSRegulations(ccpaDelegate: self)
If you select US Privacy string from the portal, the MSPA consent screen will be presented and the corresponding consent will be taken.
Once the user has given the consent, didReceiveUSRegulationsConsent(usRegData: USRegulationsData)
delegate will be fired.
The showCCPAScreen
callback is deprecated. It is recommended to use MSPA showUSRegulationScreen
for obtaining consent in the U.S.
The callback didReceiveUSRegulationsConsent
is triggered when the user gives consent to MSPA. You will get consent details in usRegulationsData
.
func didReceiveUSRegulationsConsent(usRegData: USRegulationsData) {
print("\(#function), gppString: \(usRegData.gppString)")
}
The callback userDidMoveToOtherState
is triggered when the user changes location accompanied by the change in regulations. You can retrigger the MSPA popup if you want to retrieve new consent as per the new location.
To check whether US Regulations are applicable for the user, leverage usRegulationApplies
flag as part of the PingResponse
object. The PingResponse
object can be accessed within the cmpDidLoad
callback. The same object is returned by the ChoiceCmp.shared.ping()
method.
func userDidMoveToOtherState() {
print(#function)
}
You can retrieve MSPA related strings in the following keys:
Attribute | Description |
IABGPP_HDR_Version |
GPP Version |
IABGPP_HDR_Sections |
List of Section IDs |
IABGPP_HDR_GppString |
Full consent string in its encoded form |
IABGPP_GppSID |
Section ID(s) considered to be in force. Multiple IDs are separated by an underscore, e.g. “2_3” |
IABGPP_[SectionID]_String |
String representation of each section. E.g. IAB TCF EU v2 String will be found at IABGPP_2_String |
InMobi performance reporting dashboard gives you a comprehensive view of your performance campaign on InMobi DSP. You can monitor your campaign performance using different combinations of metrics, countries, and media costs. You can also download overall and event-wise reports in CSV format. Any campaign event update takes 1 day to reflect on the Dashboard, and the updating happens in the UTC time zone.
For Japanese advertisers, the dashboard updates the Japan campaigns in the JST time zone. They can also switch between Dollars and Yen.
You can create an account as follows:
If you are logging in for the first time, enter the email ID you provided to the InMobi team. Click Next.
If you use a different email ID, you don’t receive any response after clicking Next.
You can generate reports for past or existing campaigns as follows:
Search for the advertiser.
Click your app. You land on the Overview page.
The dashboard view is for Android Campaigns by default. If an advertiser is not running Android campaigns, the dashboard shows No Campaigns are Live on Android for this Advertisers. It shows a similar message if the advertiser does not have an iOS campaign.
For Japan,
Performance: Generates a report by combining Campaign Name, Country, and Creative Type with Impressions, Clicks, and Installs. You can download the report in SVG, PNG, and CSV format by clicking —
—.
—
Overview report: Provides comprehensive data of all the performance metrics based on OS and Country. The available metrics are Clicks, Impressions, Media Cost, SKAN Installs (For iOS), MMP Installs (For iOS), Installs (For Android), CTR, eCPC, and eCPM.
You can export the data in CSV or PDF format by clicking Export.
Event report: Provides KPI events data, which helps to understand the campaign performance based on user events. The available columns are Campaign Name, Event Name, Country, OS, and Total Events (Number of times users complete an event).
You can also sort and filter by clicking the ellipsis on the column header.
Publisher report provides you with a list of the top publishers (a maximum of 500) of your campaign. These publishers are sorted based on the number of installs. You can see which app bundles (apps where DSP published the ads) give you the best performance and scale in a date range. You can work with the InMobi team to optimize your campaign based on the publisher data.
You can generate the Publisher Report as follows:
In the left menu bar, click Publisher App Report.
For Japan,
The publishers' reports are segregated into the following columns: Campaign Name, App Bundle (refers to the publisher app), Country, OS, Clicks, Impressions, Media Cost, Installs, CTR, eCPM, and eCPC.
You can also sort and filter by clicking the ellipsis on the column header.
This report provides insights into the top-performing creatives for your campaign. These creatives are sorted based on the number of installs through their ad slots. You can view the creative type (creative formats such as Banner, Video, etc.) that gives the best perfrmance and scale in a date range. Work with the InMobi team to further optimize your campaigns based on the Creative report insights.
You can generate the Creative Report as follows:
In the left menu bar, click Creative Report.
For Japan,
The publishers' reports are segregated into the following columns: Campaign Name, Creative Name, Creative Type, Country, OS, Clicks, Impressions, Media Cost, Installs, CTR, eCPM, and eCPC.
You can also sort and filter by clicking the ellipsis on the column header.
Every time you change the filter values, click Apply Filter to bring the intended report.
Raw Event Reports provide information on all the raw events in a live campaign. The raw events are the non-KPI events, which advertisers can refer to optimize their KPIs and understand user behavior.
You can generate the Raw Event Report as follows:
Every time you change the filter values, click Apply Filter to bring the intended report.
For Japan,
Every time you change the filter values, click Apply Filter to bring the intended report.
Week-on-week (WoW) reports provide weekly insights into the campaigns. The weekly insights help you understand the campaign's current performance and if any strategy change is required to uplift the performance.
You get two types of WoW reports:
You can generate the WoW report as follows:
For Japan,
Day-on-Day (DoD) reports provide daily insights into the campaigns. The daily insights help you understand the campaign's performance at a more granular level and adjust ad spending or strategy if required.
You can generate the DoD report as follows:
For Japan,
Every time you change the filter values, click Apply Filter to bring the intended report.
When managing ad campaigns on InMobi DSP and collaborating with a Mobile Measurement Partner (MMP), it is crucial to adopt industry best practices that protect your investment and optimize performance. InMobi DSP employs a comprehensive approach to fraud prevention, ensuring campaigns reach authentic users.
You need to adhere to the following considerations to keep your campaigns fraud-free:
You need to choose your partner based on which stage you need their service.
Before the campaign starts, inform the DSP team which fraud-prevention partner you have employed.
In the initial stage of ad buying on a DSP, the ad request is filtered to ensure it is genuine and safe. This stage has the following processes:
If you use any other fraud tools for IVT filtering and fraud detection, please confirm with the InMobi team if InMobi DSP supports them.
Once the ad request is verified, the next stage involves placing the ad in viewable slots. The DSP supports DoubleVerify (DV) and Integral Ad Science (IAS) for verifying the viewability of ads. These tools ensure that ads are placed in locations where they are likely to be seen by users, enhancing their effectiveness and reducing the risk of ad fraud.
If you use any other fraud tools for viewability, please confirm with the InMobi team that the DSP supports them.
After the ad is placed, the focus shifts to measuring its performance and ensuring accurate attribution.
If you use any other fraud tools for measurement and attribution, please confirm with the InMobi team that the DSP supports them.
Awareness of common mobile ad fraud types helps in securing campaigns:
You should implement strong fraud detection mechanisms (or tools like mFilterIt) and continuously monitor campaign metrics beyond installs, focusing on post-install behaviors.
Some of the common fraud behaviors are:
You can take the following actions to avoid any fraud and maximize return on ad spend and accurate attribution:
InMobi DSP offers a dynamic pricing structure that caters to your campaign requirements. The campaign starts with the Dynamic Cost-Per-Mille (dCPM) model. dCPM adjusts the cost of the campaign based on real-time optimizations, user engagements, and performance.
The benefits of using the dCPM model are:
Consult the InMobi team to know more about the pricing.
If you use Adjust as MMP, you need to integrate it with InMobi DSP before the campaign starts.
Before the integration starts, make sure you have
These integration steps are valid for Android campaigns. The integration steps for iOS campaigns will be updated soon.
Integrating Adjust and DSP is a one-time process applicable to all further campaigns.
Enable InMobi DSP on your Adjust account as follows:
Select the app you want to run the campaign for as follows:
Enable data sharing between the DSP and your Adjust account as follows:
You need to generate an Adjust Ad tracking URL, which the InMobi team uses while configuring the campaign on the DSP. Generate the URL as follows:
Share the Adjust tracking URL with the InMobi team.
The InMobi team requires specific information and actions from advertisers before they take any media campaign live. These onboarding requirements allow the Account Managers to run the campaigns seamlessly and efficiently, providing advertisers with the best possible ROAS (Return on Ad Spend).
Advertisers need to provide specific information and take actions as listed:
Requirement | What's needed | Why it's needed | Impact if not provided |
---|---|---|---|
Funnel events | Enable Install and other funnel events on the advertiser’s MMP dashboard. | To observe, analyze, and optimize any drop-off in the user journey | Less efficient campaign performance, leading to higher CAC and lower RoAS |
Unattributed data | Enable the advertiser’s unattributed data on their MMP dashboard. | To train InMobi ML models and leverage them to optimize the campaigns | Absence of unattributed data impacts precise targeting as the InMobi ML models can’t be trained on the relevant data. This results in a longer duration to improve campaign performance. Read more on Unattributed data. |
Validation rules | Provide the list and details of the validation rules and third-party tools. | To avoid any campaign challenges or blockers, as some validation rules hamper a campaign's performance. | The uncertainty of any validation rule leads to poor campaign results. |
View-through attribution (VTA) | Enable VTA on the advertiser’s MMP and set it to 24 hours. |
To train the InMobi ML models on the data for improved campaign performance. To attribute the VTA event that happened through InMobi DSP ads. |
Limited dynamic viewability data can impact campaign performance and lead to inaccurate attribution results. |
Click-through attribution | Share the CTA URL from the advertiser’s MMP account. Set the Click-through attribution window to 7 days on the advertiser’s MMP dashboard. |
To capture click-through installs and events. | The uncertain visibility on CTA leads to incorrect attribution data. |
Fraud suite | Whitelist InMobi DSP on the advertiser’s fraud suits if any. | To avoid incorrect fraud-listing and get true attribution | The uncertain visibility on the fraud suits leads to incorrect fraud listing. |
Pilot campaigns | Advertiser’s current organic scale, channel split, duration of the campaign, and budget range Note: The minimum duration to run a pilot campaign is 4-5 weeks. |
To evaluate the initial performance of the campaign and optimize the campaign set-up. | InMobi DSP may not have sufficient data points and duration to provide the desired advertiser’s KPIs. |
CRM | Share the name and the logic of the CRM the advertiser is using along with daily reports. Share the mapping information of CRM with the MMP event available in postbacks. |
To avoid any challenges or blockers as some CRM hamper campaign performance | No post backs from CRM to InMobi DSP leads to inefficient performance |
Conversion Values (iOS campaigns only) | Share all the Conversion Values (CV) mapping events configured on the advertiser’s MMP. | To map the same CV events on the InMobi DSP | Unmapped CV values result in unoptimized KPIs and reduced campaign performance. |
If you use Branch as MMP for your campaigns, you need to integrate it with InMobi DSP before your first campaign.
Before you can start the integration, make sure you have:
These integration steps are valid for Android campaigns. The integration steps for iOS campaigns will be updated soon.
Integrating Branch and DSP is a one-time process applicable to all the further campaigns. The integration steps are:
You need to enable InMobi DSP as a partner as the first step in the integration.
In the Ad Partners drop-down, search for InMobi DSP and select it.
Ignore any other InMobi suggestions in the drop-down other than InMobi DSP.
Click Save & Enable.
Enabling InMobi automatically enables the following postbacks:
Select ALL EVENTS for every pre-configured and configured event.
You can add new postbacks using the following steps:
Select the event you want to create the postback for and click Save. The Branch app automatically generates the POSTBACK URL.
Refer to the Custom Postback topic in Branch Help if you want to add a custom postback.
An Attribution window is a period for capturing the valid attribution for an event. Branch has industry-standard attribution window values pre-set in the Attribution Windows tab.
Do not change the pre-set attribution window values to avoid any discrepancies in the data.
Enable the attribution window as follows:
The InMobi team uses the Branch Ad Link you generate. The link allows you to receive the attribution data from InMobi DSP, which you can use to validate the campaign performance. Share the link with them after you generate it.
Read the Generate Branch Ad Link topic on the Branch Help to know the steps of generating the link.
When the campaign launches, the data exchange starts between the DSP and your Branch account. Enable the DSP data on your Branch Dashboard as follows:
Even though the InMobi DSP is a managed-serve platform for buying ads on ad exchanges, you also need to follow some best practices to ensure you get the best possible Return on Ad Spent (RoAS).
Read InMobi DSP creative best practices.
For accurate measurement and attribution, it’s essential to fulfill the onboarding requirements.
You can find all your campaign reports on your preferred MMP. For custom reports, consult the Glance team.
If Kochava is your preferred MMP, you need to integrate Kochava with InMobi DSP before the campaign starts.
Before starting the integration, make sure you have:
The integration of Kochava and DSP is a one-time process and applicable to all the further campaigns. The integration steps are:
On the right side of the header, select your required account. Then, select the app for which you want to run the campaign.
You need to create a tracker link and share it with your InMobi Account Manager. The InMobi team uses the Kochava tracker in your campaigns, which allows data postback from InMobi DSP to your Kochava account.
Under the Tracker & Network Set Up section, enter a tracker name.
The Tracker Name field fills up with a system-generated name when you click Add a Tracker. It’s suggested you change the name to your preferred name.
Select Acquisition in the TRACKER TYPE drop-down. For the Re-engagement campaign, select Reengagement.
Under the Destination URL section, select Landing Page.
Refer to Kochava’s Landing Page Creation and Maintenance Support documentation for more information on creating and using Landing Pages.
A postback—also called a callback—is data communication between two servers (Kochava and InMobi DSP in the current scenario) following an in-app event, such as an app installation or user activity. This system enables the InMobi team to get real-time updates on user interactions, drops, or any issues regarding the campaign. Configure the postbacks for InMobi DSP as follows:
Go to Apps & Assets > Partner Configuration in the left menu bar.
Click Go.
Click Install > Postback Tools ( •
•
• ) > Edit. The Edit Postback Install page opens.
Enter or select the DSP recommended values in the following fields:
Field | DSP recommended value | Description |
---|---|---|
PROPERTY NAME | advertiser_id | Identifier for the DSP campaigns. |
IMPRESSION CONVERSION DELIVERY | - | Determines if impression-matched install postbacks are limited. |
PACKAGE NAME/BUNDLE ID | - | |
DELIVERY DELAY | Realtime Delivery | Enables real-time postback delivery to InMobi DSP. |
RETRY ATTEMPTS | 3 | Configures the number of attempts for redelivery in case of a failure. |
DELIVERY METHOD | Deliver All | Provides unattributed data access to the DSP. |
The Glance team requires specific information and actions from advertisers before they take any media campaign live. These onboarding requirements allow the team to run the campaigns seamlessly and efficiently, providing you with the best possible ROAS (Return on Ad Spend).
Advertisers need to provide specific information and take actions as listed:
Requirement | What's needed | Why it's needed | Impact if not provided |
---|---|---|---|
Funnel events | Enable Install and other funnel events on the advertiser’s MMP dashboard. | To observe, analyze, and optimize any drop-off in the user journey | Less efficient campaign performance, leading to higher CAC and lower RoAS |
Unattributed data | Enable the advertiser’s unattributed data on their MMP dashboard. | To boost the targeting preciseness and efficiency by training Glance ML models on the unattributed data | Absence of unattributed data results in sub-optimal targeting as the Glance ML models are not optimized towards advertiser’s target audience. Read more on Unattributed data. |
Updated APK on OCI | Updated APK available on
|
To avoid app download failures and incorrect fraud-listing due to older versions or third-party APKs, which also impact user experience | Advertisers may expect lower CVRs and misrepresented fraud. |
Validation rules | Provide the list and details of the validation rules and third-party tools. | To avoid any challenges and blockers, as some validation rules may hinder a campaign performance given Glance’s unique inventory and user flows | The uncertainty of any validation rule that doesn’t recognize the unique Glance user journey leads to poor campaign results. |
Pre-load attribution | Enable the preload attribution on AppsFlyer (SDK v6.9+) and Adjust (SDK v4.23.0+) and set it to 90 days. | To correctly attribute the install that happened through Glance | Advertisers and Glance may get incorrect campaign attribution results. |
View-through attribution (VTA) | Enable VTA on the advertiser’s MMP and set it to 24 hours. | To attribute the VTA event that happened through Glance. Glance inventories have industry leading viewability metrics | The uncertain visibility on VTA leads to incorrect attribution data. |
Click-through attribution | Share the CTA URL from your preferred MMP account. CTA window is 7 days. |
To capture click-through installs and events | The uncertain visibility on CTA leads to incorrect attribution data. |
Fraud suites | Whitelist Glance on your preferred fraud suits if any. | To avoid incorrect fraud-listing due to unique Glance flows | The uncertain visibility of fraud suites leads to incorrect fraud listing. |
Pilot campaigns | Current Scale, Channel Split, Duration of campaign, and budget range. Generally pilot campaign duration is between 3-4 weeks, and budget range between $5K to $10K |
To evaluate the initial performance of the campaign | For lesser duration and spends, Glance may not have sufficient data points to deliver the desired KPIs. |
CRM | Name and logic of the CRM that advertiser uses, along with daily reports | To avoid any challenges or blockers as some CRM settings may hamper the campaign's performance | No post backs from CRM to Glance leads to lower performance. |
To configure MSPA in the InMobi CMP portal, see Portal Configuration and SDK Changes.
This section outlines the various APIs and callbacks that publishers can use to trigger the MSPA consent screen once they are integrated with GPP.
To display MSPA screen, call the following method:
ChoiceCmp.showUSRegulationScreen(this)
ChoiceCmp.showUSRegulationScreen(this);
If you have enabled auto-trigger MSPA, MSPA screen will be shown automatically after initialization.
The callback onReceiveUSRegulationsConsent
is triggered when the user gives consent to MSPA. The callback is also triggered when the consent changes as it is opt-out by default. You will get consent details in usRegulationData
.
override fun onReceiveUSRegulationsConsent(usRegulationData: USRegulationData) {
// use usRegulationData to retrieve info related to MSPA
}
@Override
public void onReceiveUSRegulationsConsent(USRegulationData usRegulationData) {
// use usRegulationData to retrieve info related to MSPA
}
The callback onUserMovedToOtherState
is triggered when the user changes location due to which the applicable MSPA consent changes. You can retrigger MSPA if you want new consent according to the new location.
override fun onUserMovedToOtherState() {
//use this to retrigger MSPA to renew consent
}
@Override
public void onUserMovedToOtherState() {
// Use this to retrigger MSPA to renew consent
}
You can retrieve MSPA related strings in the following keys:
Attribute | Description |
IABGPP_HDR_Version |
GPP Version |
IABGPP_HDR_Sections |
List of Section IDs |
IABGPP_HDR_GppString |
Full consent string in its encoded form |
IABGPP_GppSID |
Section ID(s) considered to be in force. Multiple IDs are separated by an underscore, e.g. “2_3” |
IABGPP_[SectionID]_String |
String representation of each section. E.g. IAB TCF EU v2 String will be found at IABGPP_2_String |
InMobi DSP’s (Demand-side platform) Segment Creation API enables advertisers to transfer their audience to InMobi DSP with minimal manual intervention. Data ingestion significantly improves campaign targeting by leveraging the InMobi DSP Data Science models along with your audience.
You can configure the TTL (Time-to-Live) values, which determine how long your audience data remains in the DSP.You can use the integration to target your audience positively and negatively on the InMobi DSP.
The process starts with integrating your server with InMobi DSP and creating the audience segment on the DSP. After the segment creation, you have to ingest those audience data into the DSP. You can do the segment ingestion in two ways:
After completing the segment ingestion, you can target the audience through InMobi DSP. For any queries regarding the integration process, contact the InMobi team.
Ensure you have an active account with the InMobi DSP.
Before ingesting your audience segment in your InMobi DSP account, you must integrate the DSP Segment Creation API into your server. The integration automatically creates the audience segments on your DSP account.
Follow the steps to create an audience segment on InMobi DSP:
http://advertiser.inmobiapis.com/tpce/v1/segment?segmentName=&propertyId=&membershipTtl=<MEMBER_SHIP_TTL_IN_DAYS>
.Check the API response. The response should be as follows:
{
"status": "OK",
"message": "success",
"code": 200,
"segmentId": "64d9e0bb-ad9c-4235-8b6e-2d1e6ad40cb3"
}
Value | Data type | Description |
---|---|---|
OK |
String | The API call was processed without any error. |
success |
String | Message for successful integration. |
200 |
Number | Refers to the https status code. |
64d9e0bb-ad9c-4235-8b6e-2d1e6ad40cb3 |
String | The ID of the segment created in the InMobi DSP |
Confirm with your InMobi Account Manager if the audience segment is visible on the DSP dashboard.
After you create the audience segment on the InMobi DSP, you can ingest your audience data to the DSP in two ways:
Single-user ingestion uses a GET endpoint to create a single user on InMobi DSP. Follow the steps to implement the Real-time DSP Ingestion:
http://advertiser.inmobiapis.com/tpce/v1/usersegment?propertyId=&gpId=&segmentIds=&action=&ida=<ios_device_id></ios_device_id>
{
"status": "OK",
"message": "success",
"code": 200,
}
Key | Value | Data type | Description |
---|---|---|---|
status |
OK |
String | The API call was processed without any error. |
message |
success |
String | Message for successful API call. |
code |
200 |
Number | Refers to the https status code. |
Batch ingestion uses a POST endpoint to transfer the data stored in a compressed CSV file (.csv.gz) with a maximum file size of 10 MB. The file name format is filename.csv.gz, with no space between the words if the filename has more than one word. Follow the steps to implement the CSV file Ingestion:
curl -X POST -H 'Content-Type: multipart/form-data' -H 'Accept-Encoding: gzip' -H 'Content-Disposition: attachment; filename="@sample.csv.gz"' -H 'Content-Transfer-Encoding: binary' -F "file=@sample.csv.gz" -H 'User-Agent: python-requests/2.14.2' https://advertiser-content.inmobiapis.com/tpce/v1/upload/usersegment?propertyId=<inmobi_advertiser_id>&segmentNames=<segment_names>&segmentIds=<segment_ids>&action=<action> </action></segment_ids></segment_names></inmobi_advertiser_id>
Check the file ingestion API response. The response should be as follows:
{
"status": "OK",
"message": "check the jobStatus via GET call of given jobUrl",
"code": 200,
"jobUrl": "https://advertiser-content.inmobiapis.com/tpce/v1/upload/jobs/file?job_id=sample.csv.gz_j2358cd64-63c0-4d8d-8104-5812dc09a5f2"
}
Key | Value | Data type | Description |
---|---|---|---|
status |
OK |
String | The API call was processed without any error. |
message |
check the jobStatus via GET call of given jobUrl |
String | Message for checking the status of the ingestion. |
code |
200 |
Number | Refers to the https status code. |
jobUrl |
https://advertiser-content.inmobiapis.com/tpce/v1/upload/jobs/file?job_id=sample.csv.gz_j2358cd64-63c0-4d8d-8104-5812dc09a5f2 |
String | The URL to check the status of a job |
{
"status": "OK",
"message": "File processed successfully",
"code": 200,
}
Key | Value | Data type | Description |
---|---|---|---|
status |
OK |
String | The API call was processed without any error. |
message |
File processed successfully |
String | Message for successful job status check. |
code |
200 |
Number | Refers to the https status code. |
If the propertyId or advertiserId used in the segment creation or segment ingestion is not InMobi DSP compliant, you may see the following error:
{
"status": "BAD_REQUEST",
"message": "Invalid parameter(s) : Rejected due to error: CVM-X",
"code": 1001,
"segmentId": "-1"
}
Confirm with the InMobi team if the audience segment data are visible on the DSP dashboard. It takes at least 24 hours to reflect the audience data on the DSP after execution.
USA Article2 Level1 Overview
The InMobi Cost API enables you to access the cost metrics (billable amount) for your campaigns running on the InMobi DSP. You can use the data to calculate your Return on Ad Spent (RoAS).
Before you start the integration, make sure you have:
The API Keys and API Secret authorize access to the InMobi Cost API and generate a temporary access token. The base URL for all API requests is https://api.cdr.inmobi.com/api/v3.
If you are an existing InMobi DSP customer, the base URL https://dashboard.dsp.inmobi.com/api/v2 remains active and redirects you to the base URL https://api.cdr.inmobi.com/api/v2.
However, to leverage new DSP CostAPI features, use https://api.cdr.inmobi.com/api/v3.
You can integrate the InMobi Cost API using the following four APIs:
The API data query guidelines are as follows:
Value | Data type | Description |
---|---|---|
OK | String | The API call was processed without any error. |
success | String | Message for successful integration. |
200 | Number | Refers to the https status code. |
64d9e0bb-ad9c-4235-8b6e-2d1e6ad40cb3 | String | The ID of the segment created in the InMobi DSP |
InMobi Cost API keys have been categorized among Dimensions and Measures.
You must add Cost API endpoints at the end of the API Base path to initiate API calls. The Cost API offers the following endpoints:
Use this endpoint for Android and iOS (non-SKAN) campaigns. The dimensions and measures for /programmatic
& /network
are as follows:
Type | Fields | Data type | Description |
---|---|---|---|
Dimension | date |
String | Date (YYYY-MM-DD) of reporting data |
Dimension | inmobi_account_id |
String | Unique ID for the advertiser on InMobi Platform |
Dimension | advertiser_name |
String | Name of the advertiser |
Dimension | campaign_id |
String | Unique ID for the campaign on InMobi Platform |
Dimension | campaign_name |
String | Name of the campaign |
Dimension | country |
String | The country where the ad rendered, for example, India |
Dimension | os |
String | The user's device operating system. The value can be android or iOS . |
Dimension | publisher_app_bundle |
String | Bundle ID of the publisher app where the ad rendered. For example, com.kiloo.com |
Dimension | publisher_app_name |
String | Name of the publisher app where the ad rendered. For example, Subway Surfers |
Dimension | advertiser_app_bundle |
String | Bundle ID of the advertiser app for which the ad rendered. For example, com.domain_name.com |
Dimension | advertiser_app_name |
String | Name of the app for which the ad was rendered. For example, Subway Surfers |
Dimension | exchange |
String | Programmatic exchange source where the media was bought. For example, AppLovin, Vungle, etc. |
Dimension | event_name |
String | The user action as a primary or secondary event. For example, registrations,add_to_cart, etc. |
Dimension | device_type |
String | Type of the user's device. For example, Smartphone, tablet, UNKNOWN, etc. |
Dimension | channel |
String | InMobi Channel via which the advertiser bought the media |
Dimension | ad_id |
String | Unique ID for the ad |
Dimension | ad_name |
String | Ad name in the platform |
Dimension | ad_type |
String | Type of the ad rendered |
Measure | impressions |
Integer | Number of ads renders |
Measure | clicks |
Integer | Number of clicks on the ads |
Measure | installs |
Integer | Number of app downloads |
Measure | events |
Integer | Number of user actions driven by the ad |
Measure | media_cost |
Double | An indicative billable amount |
Measure | ctr |
Double | Click Through Rate = (Clicks / Impressions) * 100 |
Measure | cr |
Double | Conversion Rate = (Installs / Clicks) * 100 |
Measure | ipm |
Double | Install Per Mille = (Installs / Impressions) * 1000 |
Measure | ecpm |
Double | Cost Per Thousand Impressions = (Media Cost / Impressions) * 1000 |
Measure | ecpc |
Double | Cost Per Click = Media Cost / Clicks |
Measure | ecpi |
Double | Cost Per Install = Media Cost / Installs |
Measure | ecpe |
Double | Cost Per Event = Media Cost / Events |
If you don’t provide any dimensions or measures value, the API returns a default report with the following fields:
date
, inmobi_account_id
, advertiser_name
, campaign_id
, campaign_name
, country
, os
, publisher_app_bundle
, exchange
, event_name
, device_type
, and channel
.impressions
, clicks
, installs
, events
, media_cost
, ctr
, cr
, ipm
, ecpm
, ecpc
, ecpi
,and ecpe
.Use this endpoint for iOS SKAN & Probabilistic Attribution campaigns. The dimensions and measures for /skan
are as follows:
Type | Fields | Data type | Description |
---|---|---|---|
Dimension | date |
String | Date (YYYY-MM-DD) of reporting data |
Dimension | inmobi_account_id |
String | Unique ID for the advertiser on InMobi Platform |
Dimension | advertiser_name |
String | Name of the advertiser |
Dimension | campaign_id |
String | Unique ID for the campaign on InMobi Platform |
Dimension | campaign_name |
String | Name of the campaign |
Dimension | country |
String | The country where the ad was rendered. For example, India |
Dimension | os |
String | The user's device operating system, the value is iOS by default. |
Dimension | publisher_app_bundle |
String | Bundle ID of the publisher app where the ad rendered. |
Dimension | publisher_app_name |
String | Name of the publisher app where the ad rendered. For example, Call of Duty. |
Dimension | advertiser_app_bundle |
String | Bundle ID of the advertiser app. |
Dimension | advertiser_app_name |
String | Name of the advertiser app. For example, Call of Duty |
Dimension | exchange |
String | Programmatic exchange from where the media was bought. Supported only for probabilistic attribution campaigns. For example, AppLovin, Vungle, etc. |
Dimension | event_name |
String | The user action to be tracked as a primary or secondary event. Example: registrations, add_to_cart, etc. |
Dimension | ad_id |
String | Unique ID for the ad. Supported only for probabilistic attribution campaigns. |
Dimension | ad_name |
String | Ad name in the platform. Supported only for probabilistic attribution campaigns. |
Dimension | ad_type |
String | Type of the ad rendered. Supported only for probabilistic attribution campaigns. |
Measure | impressions |
Integer | Number of ads renders |
Measure | clicks |
Integer | Number of clicks on the ads |
Measure | skan_installs |
Integer | Number of app downloads through SKADNetwork attribution |
Measure | installs |
Integer | Number of app downloads through Probabilistic attribution |
Measure | skan_events |
Integer | Number of user actions driven by the ad through SKADNetwork attribution |
Measure | probabilistic_events |
Integer | Number of user actions driven by the ad through Probabilistic attribution |
Measure | media_cost |
Double | An indicative billable amount |
Measure | ctr |
Double | Click Through Rate = (Clicks / Impressions) * 100 |
Measure | ecpm |
Double | Cost Per Thousand Impressions = (Media Cost / Impressions) * 1000 |
Measure | ecpc |
Double | Cost Per Click = Media Cost / Clicks |
If you don’t provide any dimensions or measures value, the Cost API returns a default report with the following fields:
date
, inmobi_account_id
, advertiser_name
, campaign_name
, country
, os
, publisher_app_bundle
, exchange
, and event_name
.impressions
, clicks
, skan_installs
, installs
, skan_events
, probabilistic_events
, media_cost
, ctr
, ecpm
, and ecpc
.After adding the required API endpoints, you can call the Cost APIs as follows:
The Authentication API generates a temporary token using the client API key for authorization. The token is valid for 8 hours only.
You can call the API using a POST or a cURL request
POST URL: https://api.cdr.inmobi.com/api/v3/auth/token
Request body:
{
clientId : string,
clientSecret : string
}
Request field details:
Request | Field | Value | Mandatory |
---|---|---|---|
Body | clientId |
placeholder_ID |
Yes |
Body | clientSecret |
placeholder_key |
Yes |
{
“status”: “SUCCESS”,
“code”: 200,
“data”:
{
“token”:string,
“validTill”: YYYY-MM-DDTHH:MM:SS
},
“message”: "Request processed successfully"
}
Response field details:
Fields | Description |
---|---|
status |
|
code |
|
data |
|
token |
|
validTill |
|
message |
|
You can also call the Authentication API using the following cURL request:
curl --location --request POST 'https://api.cdr.inmobi.com/api/v3/auth/token' \
--header 'Content-Type: application/json' \
--data-raw '{
"clientId": "<YOUR-CLIENT-ID>", "clientSecret": "<YOUR-CLIENT-SECRET>"
}'
The Report Creation API requests the report by specifying a date range, custom attributes (dimension or measure), and filtering on dimension (if required). You can call the API using a POST or a cURL request.
POST URL:
/programmatic
and /skan
endpoints, include the "os":["Android"]
filter in the /programmatic
endpoint API call. This filter helps streamline data extraction and ensures accuracy across platforms.Header:
{
clientId : string,
clientSecret : string
}
Body:
{
“startDate”: “<YYYY-MM-DD>”,
“endDate”: “<YYYY-MM-DD>”,
"dimensions": ["campaign_name", "country", "publisher_app_bundle"],
"measures": ["impressions", "clicks", "installs", "media_cost"],
"filters":
{
"os": ["Android"]
}
}
Request field details:
Request | Field | Value | Mandatory |
---|---|---|---|
Header | Authorization |
The token generated in the Authentication API response. | Yes |
Body | startDate |
The start date for the report in the YYYY-MM-DD format. | Yes |
Body | endDate |
The end date for the report in the YYYY-MM-DD format. | Yes |
Body | dimensions |
The name of the Dimension you want to include in the report. Find Dimensions based on your end points. | No |
Body | measures |
The name of the Measures you want to include in the report. Find Measures based on your end points. | No |
Body | filters |
Add array values to the Dimensions if any. | No |
{
"status": "SUCCESS",
"code": 200,
"data": {
"reportID": "<string>",
"report_status": "available",
"report_message": "Report available for download."
}
"message": "Report processed successfully"
}
Response field details:
Field | Description |
---|---|
status |
|
code |
|
data |
|
reportID |
|
reportStatus |
|
message |
|
curl --location --request POST 'https://api.cdr.inmobi.com/api/v3/reports/network' \
--header 'Authorization: <YOUR-AUTH-TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '{ "startDate": "<START_DATE>",
"endDate": "<END_DATE>", "dimensions": ["<DIMENSION_NAME>"], "measures": ["<MEASURE_NAME>"], "filters":
{"<DIMENSION_NAME>": ["<DIMENSION_VALUE>", "<DIMENSION_VALUE>"]}
}'
You can also call the Report Creation API using the following cURL request:
You can check the status of the report you called using the Report Creation API. You can call the API using a GET or cURL request.
GET URL: https://api.cdr.inmobi.com/api/v3/reports/
Header:
{
`Authorization: YOUR_TOKEN`
}
Request field details:
Request | Field | Value | Mandatory |
---|---|---|---|
Path Variable (in GET URL) | reportID |
The ID of the report | Yes |
Header | Authorization |
The token generated in the Authentication API response. | Yes |
{
"status": "SUCCESS",
"code": 200,
"data":
{
"reportStatus": "report.status.available",
"reportStatusDescription": "Report available for download.",
"message": "Request processed successfully"
}
}
Response field details:
Field | Description |
---|---|
status |
|
code |
|
data |
|
reportStatus |
|
reportStatusDescription |
|
message |
|
curl --location --request GET 'https://api.cdr.inmobi.com/api/v3/reports/<YOUR-REPORT-ID>/status' \
--header 'Authorization: <YOUR-AUTH-TOKEN>'
You can also call the Check Report Status API using the following cURL request:
You can download the final CostAPI report using a GET or cURL request.
GET URL: https://api.cdr.inmobi.com/api/v3/reports/
Header:
{
`Authorization: YOUR_TOKEN`
}
Request field details:
Request | Field | Value | Mandatory |
---|---|---|---|
Path Variable (in GET URL) | reportID |
The ID of the report | Yes |
Header | Authorization |
The token generated in the Authentication API response. | Yes |
The CSV file of the report starts downloading on your system.
You can also call the Download Report API using the following cURL request:
curl --location --request GET 'https://api.cdr.inmobi.com/api/v3/reports/<YOUR-REPORT-ID>/status' \
--header 'Authorization: <YOUR-AUTH-TOKEN>'
You may get the following errors during an API call. Based on the description provided, you can troubleshoot the errors.
Error | Description |
---|---|
client.cred.invalid |
The provided credentials are invalid. Check your clientId and clientSecret and try again. |
token.generation.failed |
There is an error while generating the token. Try again later. |
authentication.token.invalid |
The provided token is invalid. Regenerate the token and try again. |
request.date.format_invalid |
The startDate and/or endDate parameter in your request have an invalid format. Update the format for startDate and/or endDate field and try again. |
client.bad_request |
The data can be fetched only for the last 90 days. |
client.bad_request |
The start date must be less than or equal to the end date. |
client.bad_request |
Check the startDate and endDate of the report and try again. |
client.bad_request |
Use the v3 API for custom dimensions and measures. |
client.bad_request |
Measures are not supported in filters. Invalid filters found: [filter_name]. |
client.bad_request |
Invalid attributes found: Dimensions: [dimension_name], Measures: [measure_name], Filters: [filter_name]. |
reportId.missing |
The report you are trying to access doesn't exist. Check the report ID and try again. |
This document provides instructions for integrating InMobi CMP (Consent Management Platform) into your AMP pages. InMobi CMP supports IAB's TCFv2 and USP frameworks for collecting user consent and do-not-sell choices.
InMobi CMP uses the <amp-consent>
component to implement our CMP on AMP-powered sites following the standard AMP implementation guidelines. For more details, see amp-consent.
The InMobi CMP is included using an <amp-consent id="inmobi">
component, and configured via a child <script type="application/json">
JSON block. When consent is required from the user, the CMP UI is shown in an iframe. The loading or display of other AMP components such as <amp-ad>
can be blocked until consent is given. <script type="application/json">
JSON block. When consent is required from the user, the CMP UI is shown in an iframe. The loading or display of other AMP components such as <amp-ad></amp-ad>
can be blocked until consent is given.
The AMP integration is only supported for InMobi CMP version 20 or later.
Include the
<script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.js"></script>
<script async custom-element="amp-geo" src="https://cdn.ampproject.org/v0/amp-geo-0.1.js"></script>
There must be only one instance of <amp-geo></amp-geo>
and <amp-consent></amp-consent>
present on the page.
This will display "Your Choice AMP" modal from where you can copy the complete AMP tag (<amp-consent>
tag, including the configuration JSON, and the <amp-geo>
configuration, if applicable). You can paste this at the top of the <body> section of your AMP page.
The entire configuration for the CMP is contained within this tag. If you update the configuration, you must update the tag on the AMP page. Future versions of the CMP will support portal configuration of AMP pages, eliminating this copy-paste operation.
<!-- INMOBI CMP -->
<amp-consent id="inmobi" layout="nodisplay">
<script type="application/json">
{
"consentInstanceId": "inmobi",
"checkConsentHref": "https://api.cmp.inmobi.com/amp/check-consent",
"consentRequired": "remote",
"promptUISrc": "https://cmp.inmobi.com/tcfv2/amp.html",
"clientConfig": {
"coreConfig": {
"vendorPurposeLegitimateInterestIds": [
2,
7,
8,
10,
9,
11
],
"publisherPurposeIds": [],
"publisherSpecialPurposesIds": [],
"publisherFeaturesIds": [],
"stacks": [
1,
42
],
"publisherLIRestrictionIds": [],
"inmobiAccountId": "8F9Dnv0Zkrjf5",
"vendorSpecialPurposesIds": [
1,
2
],
"initScreenBodyTextOption": 1,
"publisherConsentRestrictionIds": [],
"vendorPurposeIds": [
2,
4,
6,
7,
9,
10,
1,
3,
5,
8,
11
],
"totalVendors": 1420,
"lang_": "en",
"privacyMode": ["GDPR"],
"publisherPurposeLegitimateInterestIds": [],
"hashCode": "SVn/kb0mxZsHKQ597ZCqoQ",
"vendorSpecialFeaturesIds": [
1,
2
],
"displayUi": "always",
"publisherSpecialFeaturesIds": [],
"googleEnabled": false,
"vendorListUpdateFreq": 30,
"publisherCountryCode": "GB",
"vendorFeaturesIds": [
1,
2,
3
],
"gvlVersion": 3
},
"coreUiLabels": {},
"theme": {},
"tagVersion": "V3"
}
}
</script>
</amp-consent>
<!--END INMOBI CMP -->
"postPromptUI": "postPromptUI"
key is included in the JSON configuration and a persistent consent link and styling is included in the tag:
<div id="postPromptUI"> <button role="button" on="tap:inmobi.prompt()"> <svg style="height:20px"> <g fill="none"> <g fill="#FFF"> <path d="M16 10L15 9C15 9 15 8 15 8L16 7C16 7 16 6 16 6 16 5 15 4 14 3 14 2 13 2 13 3L12 3C12 3 11 3 11 2L11 1C11 1 10 0 10 0 9 0 7 0 6 0 6 0 5 1 5 1L5 2C5 3 4 3 4 3L3 3C3 2 2 2 2 3 1 4 0 5 0 6 0 6 0 7 0 7L1 8C1 8 1 9 1 9L0 10C0 10 0 11 0 11 0 12 1 13 2 14 2 15 3 15 3 14L4 14C4 14 5 14 5 15L5 16C5 16 6 17 6 17 7 17 9 17 10 17 10 17 11 16 11 16L11 15C11 14 12 14 12 14L13 14C13 15 14 15 14 14 15 13 16 12 16 11 16 11 16 10 16 10ZM13 13L12 13C11 13 11 13 9 14L9 16C9 16 7 16 7 16L7 14C5 14 5 13 4 13L3 13C2 13 1 12 1 11L3 10C2 9 2 8 3 7L1 6C1 5 2 4 3 4L4 4C5 4 5 3 7 3L7 1C7 1 9 1 9 1L9 3C11 3 11 4 12 4L13 4C14 4 15 5 15 6L13 7C14 8 14 9 13 10L15 11C15 12 14 13 13 13ZM8 5C6 5 5 7 5 9 5 10 6 12 8 12 10 12 11 10 11 9 11 7 10 5 8 5ZM8 11C7 11 6 10 6 9 6 7 7 6 8 6 9 6 10 7 10 9 10 10 9 11 8 11Z" /> </g> </g> </svg> PRIVACY </button> </div>
#postPromptUi
button in your CSS. This example adds the persistent consent button to the lower right of your page:
#postPromptUI button {
background: #368bd6;
color: white;
padding: 5px 15px;
border: none;
outline: none;
display: flex;
align-items: center;
position: fixed;
right: 0;
bottom: 0;
border-radius: 3px 0 0 3px;
max-height: 30px;
max-width: 110px;
cursor: pointer;
}
An <amp-geo>
geoOverride
key will also be present in the JSON configuration to properly customize the CMP based on the user's location.
<amp-geo>
<amp-geo layout="nodisplay">
<script type="application/json">
{
"ISOCountryGroups": {
"usca": ["preset-us-ca"] // target California only
// "us": ["us"] // target entire US
}
} </script>
</amp-geo>
The amp-geo
component provides country-level geolocation.
amp-geo
component.
This improves the AMP CMP performance by avoiding the check-consent HTTP call in areas where it is not necessary.
The check-consent API endpoint determines that CCPA applies for users geo-located to California (or the US). If no previously given USP string (indicating the user's Do-Not-Sell choice) has been set, the CMP will set the default USP string (as the regular web CMP does) and trigger the accept consentState
.
The CCPA UI will not be shown automatically (as it does when GDPR applies), but instead, the user must click on the Do Not Sell link included on the page to make a do-not-sell choice. If the user chooses "DoNotSellMyInformation" in the UI, the consentState
will be set to reject.
A link to bring up the CCPA UI needs to be included:
<!-- Privacy Disclaimer -->
<p id="disclaimer_example">
We use cookies and other data collection technologies to provide the
best experience for our customers. You may request that your data not be
shared with third parties here:
<a role="button" on="tap:inmobi.prompt()">
Do Not Sell My Personal Information </a>
</p>
<!-- Privacy Disclaimer -->
If desired, this link will be hidden when CCPA is not applicable using the amp-geo-group-XX
class which is automatically set by <amp-geo>
as documented here.
AMP components can block their loading until consent is accepted, until any consent choice is made (if required), or if consent is required but unknown. In addition, you can configure timeout with fallback behaviors
The following table indicates what InMobi CMP sends for consent required and the consent states, based on InMobi CMP configuration, location, and user behavior.
Certain ad vendors support real-time configuration (for the full list of supported vendors, see Supported Vendors. If you’re using amp-ad
and your vendor is one of these listed vendors, you can use the CONSENT_STRING
and CONSENT_STATE
macros to add that information to the request URL. For more information on how to do that, see AMP Consent Integration.
If your vendor needs access to the consent string but doesn’t support real-time configuration, you can check the window.context.initialConsentValue
key that stores the full TCString
, or check the window.context.initialConsentState
which stores the AMP consent state value (either 1 or 0) within your JavaScript code.
To block components, either add the data-block-on-consent
attribute to the AMP component or add the amp-consent-blocking
meta tag with the list of extensions to block.
Blocking the analytics until user accepts consent
<amp-analytics data-block-on-consent type="googleanalytics"> </amp-analytics>
<meta name="amp-consent-blocking" content="amp-analytics,amp-ad" />
The following are a few limitations/caveats that you may encounter during AMP implementation.
consentState
is sent as either accept or reject (dismiss is not used by InMobi CMP). InMobi CMP treats partial consent as an accept action. The consentString
contains the TCF consent string.TCString
is passed to AMP as consentString
but support of the string itself depends on the vendor's <amp-ad></amp-ad>
implementation.TCString
is currently available only to amp-ad and amp-iframe components. AMP Project issue #30385 details an in-development feature to expose the postMessage
API of TCFv2 to other components in AMP, which we intend to support when released.style
CSS on the AMP page.This topic explains GDPR and its principles, and how it protects the rights of users while sharing data.
The GDPR is a strict data privacy and security law and it came into effect on May 25th, 2018. It grants consumers rights to determine how their personal data is processed. For more information, see GDPR.
A consent string format is a coded character string that stores information about the consumer’s consent choices. It enables publishers, advertisers and downstream partners to decode which consents end-users have agreed to.
Regulation refers to the law and guidelines established by governing bodies to control the collection, sharing, and selling of personal information. Examples of regulations are GDPR, CCPA, VCPA, etc.
The consent string format is the encoded data string with a specific structure that communicates user consent preferences to publishers in digital advertising. Some consent string format examples are TCF, US Privacy String, and GPP.
Next, we will learn about two consent string formats that support GDPR, namely GPP and TCF.
The Global Privacy Platform (GPP) by the Interactive Advertising Bureau (IAB) is a standardized global framework for managing user consent in digital advertising. For more information, see GPP.
The TCF (Transparency and Consent Framework) String, an IAB Europe initiative, is an EU-specific format for conveying user consent and publisher transparency in the digital advertising ecosystem. For more information, see TCF.
TCF was launched on April 25, 2018, while GPP was launched more recently on June 1, 2022.
Since TCF v2, the use of the Transparency and Consent Framework has changed. There are more publisher restrictions and many new vendors have been added to the IAB's Global Vendor List. This results in the consent string getting larger and becoming more problematic.
Many regions, not just Europe, have progressed to a point where a standardized consent norm is necessary. The GPP is part of a suite of solutions addressing global privacy challenges. With GPP, there's a new, more unified way for publishers to understand and comply with user consent preferences.
Regulation | Existing Consent String Format | New Consent String Format |
GDPR EU | TCF v2 | GPP & TCF v2 |
US CCPA | USP (deprecated) | GPP |
US VCPA, CPA, CTPA, UCPA | No format available | GPP |
The shift to GPP doesn't mean TCF is getting deprecated. TCF can be used separately for GDPR and under GPP as well.
The General Data Protection Regulation (GDPR) is applicable throughout the European Economic Area (EEA), which includes all European Union (EU) member states along with Norway, Iceland, and Liechtenstein.
Key points regarding GDPR applicability in the EEA:
Under certain circumstances, the GDPR can have implications for businesses or entities outside the EU, including those in the United States. These are:
In summary, GDPR applies only to U.S-based businesses if they collect information from EEA/UK residents in any way.
InMobi CMP doesn’t support GDPR in the U.S. because mentioning GDPR in conjunction with U.S. regulations might create confusion to users in the U.S. region because these legal frameworks have distinct scopes, requirements, and approaches to data protection.
Here are a few reasons why GDPR consents and US regulation consents are not collected simultaneously from the end-user:
This topic discusses the five US state data privacy laws and their usage within the Multi-State Privacy Agreement (MSPA) national framework, supported by the Global Privacy Platform (GPP).
MSPA supports privacy laws for five states, namely - California, Virginia, Colorado, Utah, and Connecticut. MSPA also provides a national framework encompassing all the consents covered in the five individual state laws.
The GPP's goal is to simplify the conveyance of privacy, consent, and consumer choice signals from websites and applications to ad tech vendors. It empowers advertisers, publishers, and technology vendors to align with regulatory requirements globally.
This framework facilitates the use of a consent management platform (CMP) for capturing and conveying consent signals throughout the digital advertising supply chain. The GPP centralizes the management of diverse consent signals from various global privacy jurisdictions and additionally accommodates the Global Privacy Control (GPC), a browser-level signal enabling individuals to opt out of information sale or sharing. Currently, the GPP supports consent strings for both the US Privacy and IAB Europe TCF.
The US Privacy String will be deprecated by April 30, 2024. The legacy US Privacy signal does not support the four US states privacy signals —VA, CO, CT, and UT. For CCPA, only a few of the required consents are supported. In contrast, the new state signals for the other four states will only be supported by the GPP.
The next section will cover the five state laws in detail. Post that, we will explain the two regulatory paths for enforcing MSPA in the United States, namely the state + national approach and the national approach.
The California Consumer Privacy Act (CCPA) came into force on January 1, 2020. It grants California consumers increased authority over the personal information collected by businesses.
These are the opt-out signals collected from end-users under CCPA:
The CCPA applies to for-profit enterprises engaging in the collection, sharing, or sale of personal information belonging to California residents. The business may or may not be based in California; it must comply with CCPA if it meets one or more of the following criteria:
In case any business is subject to CCPA and found to be non-compliant, they could face a fine in the following range:
The Virginia Consumer Data Protection Act (VCDPA) came into effect on January 1, 2023.
These are the opt-out signals collected from end-users under VCDPA:
The VCDPA applies to businesses or entities based in Virginia or those that sell products and services to Virginia residents, and meet one or more of the following criteria:
If a business is found to be non-compliant with the VCDPA, it could face a fine of up to $7,500 per violation.
The Colorado Privacy Act (CPA) was enacted on July 8, 2021. It applies to entities engaged in business within Colorado or serving its residents.
These are the opt-out signals collected from end-users under CPA:
The CPA applies to businesses operating within the state or those catering to Connecticut residents, and in the preceding year:
The CPA imposes a significant $20,000 per violation and sets a maximum penalty of $500,000.
On 24th March 2022, Utah became the fourth state to pass a data privacy law. The Utah Consumer Privacy Act (UCPA) is also considered by experts as being more business-friendly as compared to the other privacy regulations in the U.S., including the CCPA, VCDPA, and CPA.
These are the opt-out signals collected from end-users under CPA:
Companies with annual revenues exceeding $25 million must adhere to the UCPA if they operate in Utah or offer products or services aimed at Utah residents. Additionally, businesses must meet one of the following thresholds to fall under the purview of the UCPA:
A violation of UCPA can cost business fines in actual damages + $7,500 per violation.
The Utah Consumer Privacy Act (UCPA) distinguishes itself from other data privacy laws by offering a more business-friendly approach with a narrower scope, excluding many companies from compliance.
The UCPA defines a "consumer" as an individual in a personal or household context, explicitly excluding those in employment or commercial, leaving employee data unprotected. Unlike CCPA, UCPA focuses on the sale of personal data and targeted advertising, defining a sale as the exchange of personal data for monetary consideration.
UCPA's broad definition of "data" includes information reasonably linkable to an identifiable individual, with exceptions for aggregated and de-identified data.
Enacted on May 10, 2022, the CTDPA empowers Connecticut residents with increased control over their data. In contrast to states like California, the act defines a consumer as a state resident acting on an individual basis, not within a commercial or employment context.
These are the opt-out signals collected from end-users under CTDPA:
Businesses within the state or those catering to Connecticut residents, and who, in the preceding year:
A violation of CTDPA can result in a fine of $5,000 per violation.
For details on how opt-outs are covered under the MSPA, see Consents Covered Under MSPA.
The MSPA, inspired by the IAB's limited-service provider agreement, is a contractual framework designed to assist companies in exchanging Global Privacy Platform consent signals with their partners in the online advertising supply chain. It was introduced on December 1, 2022.
It ensures compliance with various state privacy laws, including the CCPA in California and others taking effect in Colorado (CPA), Virginia (VCPA), Connecticut (CTDPA), and Utah (UCPA).
For transactions covered under MSPA, First Parties (publishers and advertisers) have the option to operate either in Service Provider Mode or Opt-Out Option Mode. Service Provider Mode is for signatories refraining from "selling," "sharing," or processing personal information for "targeted advertising."
For more information on each Mode, see Technicalities of MSPA.
As numerous state privacy laws come into effect, publishers face the decision of whether to navigate compliance on a state-by-state basis or implement the strictest data usage standards across their entire business nationally. The MSPA guides both approaches.
State-specific privacy laws are applicable based on the consumer's residence, not the location of the company or its partners. Implementing processes on a state-by-state basis can be challenging, making a national approach organizationally simpler.
Opting for a national approach eliminates the need to determine a consumer's location. The MSPA's national approach adheres to the highest common denominator for compliance. for more details on the national and state approaches, see What is a Regulatory Path?
In this topic, we will aim to understand certain technicalities of the MSPA and the rules that publishers need to follow to implement the MSPA properly.
In the MSPA framework, a First Party (a publisher) is responsible for deciding if a consumer's personal information, whether handled directly or by others downstream, falls under MSPA's rules as a Covered Transaction.
If a Publisher opts for a Covered Transaction, it must designate the Are Your Transaction Covered Under MSPA Framework? field as Yes. If a Publisher wishes to exempt a specific transaction from MSPA applicability, it should set the MSPA Transaction Signal to No.
To indicate your transactions are covered, you are required to be an MSPA signatory. You can check your signatory status and sign the MSPA here.
In the GPP string sections allocated for residents of various states (and U.S. National Consumers), as discussed in section 3.3, there is a field called MspaCoveredTransaction
. Selecting Yes to the above question sets a value of 1
for this field (indicating it is a Covered Transaction) or 2
in case No is selected (indicating it is not a Covered Transaction).
Apart from choosing the mode for the covered transaction, the MSPA also mandates the publisher to identify the “Applicable Jurisdiction” governing the processing of a specific consumer's personal information.
The publisher is granted flexibility in this regard. It can ascertain the state residency of the consumer, determine the Applicable State Privacy Law, and adhere to the specific requirements of that state.
If the publisher can't decide or doesn't want to provide different privacy choices to users, it can choose to handle the consumer's personal information using the National Approach.
The national approach identifies the highest common denominator in privacy requirements among the five new state laws. In the national approach, MSPA collects the opt-outs required in all the states in the US together. GPP will incorporate signaling for the national approach.
Adopting a national standard approach reduces the complexity of implementing five distinct legal frameworks simultaneously to some extent.
According to IAB, only MSPA signatories can use the National section to encode and signal user opt-out preferences. You can check your signatory status and sign the MSPA here.
If the Publisher establishes that a consumer is not a resident of any Applicable Jurisdiction, it retains the freedom to abstain from processing digital ad transactions for that consumer as Covered Transactions.
In that case, the publisher can opt for a national + state approach. In this approach, consent will be collected based on the national approach in all other states of the U.S. apart from California, Virginia, Colorado, Utah, and Connecticut. In the five states, their specific data privacy laws will apply.
This approach allows publishers to collect only necessary consents be compliant with both the national and state laws. It enables them to reach a wider audience without worrying about being non-compliant.
InMobi CMP supports only opt-out mode.
If a publisher chooses to apply the MSPA for a specific Covered Transaction, it must use a technical Signal developed by the IAB Tech Lab and opt for one of two operational modes:
The mode selection depends on the publisher's intentions regarding the Personal Information processed under that Covered Transaction.
If the publisher intends to "Sell" or "Share" personal information or partake in "Targeted Advertising," it will opt for Opt-Out Option Mode, necessitating the provision of specified Opt-Out rights to Consumers.
If the publisher aims to exclusively engage in Covered Transactions with Signatories acting as "Service Providers" (i.e., refraining from Selling or Sharing Personal Information or participating in Targeted Advertising), it will choose to operate in Service Provider Mode.
To configure MSPA in the InMobi CMP portal, see Portal Configuration and SDK Changes.
This section outlines the various APIs and callbacks that publishers can use to trigger the MSPA consent screen once they are integrated with GPP.
For more information on APIs that a CMP must support, as specified by IAB, see CMP API Specification.
This callback aims to know if the user has changed the location and retrigger the MSPA consent screen based on the new location.
Attribute | Data Type | Description |
locationChanged |
Boolean | Whether user has changed the location or not. |
previousLocation |
String |
Two letter region string like ca, va, ct, co, etc. |
currentLocation |
String |
Two letter region string like ca, va, ct, co, etc. |
window.__uspapi(isUserLocationChanged, 1, (result) => {
console.log(result); // { locationChanged: true, previousLocation: ‘va’, currentLocation: ‘ca’}
});
This will display the U.S Privacy UI (modal dialog). It will inherit style and style overrides given in the config object.
window.__uspapi('displayUspUi', 1, function(data, status) { console.log(data, status); })
The ping
command can be used to determine the state of the CMP. The callback shall be called with a PingReturn
object as the value of the data parameter. A value of false
will be passed as the argument to the success
parameter if the CMP fails to process this command.
Argument | Data Type | Value |
command |
String | "ping" |
callback |
function |
function (data: PingReturn, success: boolean) |
__gpp('ping', myFunction);
The addEventListener
command can be used to define a callback function that can be used to detect changes in the CMP. The callback shall be called with an EventListener
object immediately. The GPP script will then call the callback function and return a new EventListener object every time the CMP detects a change (see events below). A value of false
will be passed as the argument to the success
parameter if the CMP fails to process this command.
Argument | Data Type | Value |
command |
String | "addEventListener" |
callback |
function |
function (data: EventListener, success: boolean) |
__gpp('addEventListener', myFunction);
The removeEventListener
command can be used to remove an existing event listener. The callback shall be called with false
as the argument for the data
parameter if the listener could not be removed (e.g. the CMP cannot find a registered listener corresponding to listenerId
). A value of false
will be passed as the argument to the success
parameter if the CMP fails to process this command.
Argument | Data Type | Value |
command |
String | "removeEventListener" |
callback |
function |
function (data: boolean, success: boolean) |
parameter |
number | ID of the listenerId property that was returned from addEventListener command |
__gpp('removeEventListener', myFunction, listenerId);
The hasSection
command can be used to detect if the CMP has generated a section of a certain specification. The callback shall be called with true
as the argument for the data
parameter if the CMP has generated a section for the requested API prefix string. The data
parameter may be null
when the CMP is not yet loaded. A value of false
will be passed as the argument to the success
parameter if the CMP fails to process this command.
Argument | Data Type | Value |
command |
String | "hasSection" |
callback |
function |
function (data: boolean, success: boolean) |
parameter |
String | API Prefix string |
A client wants to ask the CMP if there is data for IAB TCF CA v1.0:
__gpp('hasSection', myFunction, "tcfcav1");
The getSection
command can be used to receive the (parsed) representation of a section of a certain specification. The callback shall be called with the (parsed) representation as the argument for the data parameter. The parsed representation of a section is an array of objects, where each object represents one sub-section of this section in the order that is given by the section specification. For example, the data parameter for the TCF Canada will be an array with one or two objects (Core sub-section plus optional publisher purposes sub-section). Each object is composed of the fields defined by the section specification.
The data parameter may be null
for sections that don't allow accessing the section data object outside an event handler. It may also be null
when the CMP is not yet loaded.
Argument | Data Type | Value |
command |
String | "getSection" |
callback |
function |
function (data: array of objects or null, success: boolean) |
parameter |
String | API Prefix string |
For example, client can ask the CMP to get the IAB TCF CA v1.0 TCData:
__gpp('getSection', myFunction, "tcfcav1");
Example value of data passed to the callback:
[
/* Core Sub-section */
{
Version:1,
Created: Date (Thu Apr 13 2023 18:07:12 GMT+0200),
LastUpdated: Date (Thu Apr 13 2023 18:07:12 GMT+0200),
CmpId: 31,
CmpVersion: 123,
ConsentScreen: 5,
...
},
/* Publisher Purposes Sub-section (optional) */
{
subsectionType:3,
PubPurposesExpressConsent : [1,2,3,4,5],
PubPurposesImpliedConsent : [6,7,8,9],
...
}
]
The getField
command can be used to receive a specific field out of a certain section. The callback shall be called with the value of the requested field as the argument for the data
parameter. The data
parameter may be null
for fields in sections that don't allow accessing the section data object outside an event handler. It may also be null
when the CMP is not yet loaded.
Argument | Data Type | Value |
command |
String | "getField" |
callback |
function |
function (data: mixed or null, success) |
parameter |
String | API Prefix string + "." (dot) + fieldname |
For example, a client can ask the CMP to get the last updated field from the IAB TCF CA v1.0 TCData.
__gpp('getField', myFunction, "tcfcav1.LastUpdated");
This topic explains the birth of Global Privacy Control (GPC) as an initiative reflecting the growing awareness and concern about digital privacy, offering users greater control over how their data is handled in the online ecosystem.
GPC is a significant development in the realm of online privacy, aiming to provide users with a streamlined and standardized way to assert their preferences regarding the use of their personal information by websites and online services.
The GPC initiative came into effect in late 2020, with the release of the GPC specification and the introduction of GPC browser extensions.
At its core, GPC is about empowering users to easily communicate their privacy choices. It operates as a browser-level signal, allowing users to set their preferences globally, which are then transmitted to websites they visit. This browser-level approach simplifies the process for users, offering a more convenient and centralized way to manage their privacy settings.
The primary function of GPC is to enable users to opt out of the sale or sharing of their personal information for targeted advertising. By activating GPC, users are essentially signaling their desire to maintain greater control over how their data is used. This opt-out mechanism aligns with the broader trend of providing users with more agency and transparency in handling their digital identities.
GPC's implementation addresses several key objectives:
GPC aims to simplify the process for users to manage their privacy preferences online. By providing a standardized and browser-based mechanism, GPC enables users to easily communicate their privacy choices without having to navigate complex settings on individual websites.
Users gain greater control over how their personal information is used by online entities. By signaling their preferences through GPC, users can opt out of the sale or sharing of their data for targeted advertising, thereby exercising greater agency over their digital identities.
GPC seeks to establish a common language for privacy preferences, making it easier for users and online services to understand and implement these choices consistently. By standardizing privacy preferences, GPC aims to create a more user-friendly and interoperable privacy landscape.
GPC aligns with the principles of privacy regulations such as the California Consumer Privacy Act (CCPA). Recognizing GPC as a valid method for users to communicate their privacy preferences reinforces its importance in the broader context of data privacy regulations.
Overall, GPC was implemented to address the growing need for simplified and standardized privacy controls in the digital ecosystem. By providing users with a convenient and effective way to assert their privacy preferences, GPC aims to enhance user control, promote transparency, and contribute to a more privacy-conscious online environment.
Here are some important parameters to implement GPC successfully:
One key aspect of GPC is its emphasis on standardization. GPC seeks to establish a common language for privacy preferences, making it easier for users and online services to understand and implement these choices consistently. This standardization is crucial in creating a more user-friendly and interoperable privacy landscape.
The legal landscape plays a significant role in the implementation of GPC. For instance, the California Consumer Privacy Act (CCPA) recognizes GPC as a valid method for users to communicate their preference to opt out of the sale of their personal information. This legal backing lends credibility to GPC and reinforces its importance in the broader context of data privacy regulations.
The success of GPC relies heavily on its adoption by web browsers. Users need browsers that support GPC, allowing them to easily enable or disable this feature. As more browsers incorporate GPC into their settings, users gain greater accessibility to this privacy tool.
For GPC to be effective, websites and online services must respect and honor the signals sent by users through this mechanism. Website operators need to implement systems that recognize and comply with GPC preferences. The adoption of GPC by a diverse range of websites is crucial for its impact on user privacy.
These are some of the key areas where GPC has a direct impact:
One of the primary areas where GPC has a direct impact is in the realm of targeted advertising. Users opting out through GPC communicate their reluctance to have their personal information used for targeted ads. This aligns with the growing demand for more control over the ads users encounter, reducing the reliance on personalized data for ad targeting.
GPC's influence extends beyond advertising to encompass broader data sharing practices. Users leveraging GPC are expressing a preference for greater privacy not just in the context of targeted ads but in how their data is shared with third parties. This can influence the data-sharing practices of websites and platforms, encouraging more responsible and transparent handling of user information.
As users opt out through GPC, there is an increased expectation for transparency from online services. Websites need to provide clear information on how they handle user data and whether they adhere to the privacy preferences communicated through GPC. This emphasis on transparency enhances user trust and reinforces the principles of informed consent.
Users signal GPC through user agent headers (Sec-GPC
) and a JavaScript API (globalPrivacyControl
). Entities creating GPP strings can check whether GPC is set and transfer the discovered value (from headers or the JavaScript API) in the GPC subsection for all applicable sections. The potential values in the user agent API are boolean (0/1 for headers and true/false for the JavaScript API).
Field Name | GPP Field Type | Description |
SubsectionType | Int(2) |
1 GPC |
Gpc | Boolean |
1 true |
As of now, true signifies opting out of the sale of personal information under CCPA ("Do not sell my personal information").
InMobi CMP honors users' Global Privacy Control (GPC) signals, ensuring compliance with CCPA legislation requirements. When an end-user activates the GPC flag in their browser and does not communicate any preferences through the consent banner, the system sets the Opt-out signal in the US privacy string to Yes, effectively opting the user out.
Conversely, if an end-user enables the GPC flag and communicates an opt-out preference via the consent banner, the system prioritizes the user's explicitly shared preference over the GPC signal. If the GPC flag is not set or not supported by the browser, the string remains unchanged.
Similar to California, Colorado and Connecticut are required to activate GPC as per their states’ legislative requirements.
While GPC’s implementation aims to bring about a positive change in data usage by online services, there are some challenges in implementing it fully.
The effectiveness of GPC faces challenges related to adoption. Not all browsers may support GPC, and not all websites may integrate mechanisms to respect the signals sent through this privacy control. Achieving widespread adoption requires collaboration among browser developers, website operators, and regulatory bodies.
This topic outlines various InMobi CMP Android SDK callbacks, designed to empower publishers with the information needed for seamless integration and consent details retrieval.
The onCmpLoaded
notifies the publishers that the CMP has been intialised successfully and also provides some information in the PingReturn
object.
Attribute | Data Type | Description |
---|---|---|
info`(PingReturn) |
Object | Information related to cmp version, cmp status etc. |
override fun onCmpLoaded(info: PingReturn) {
Log.i("InmobiCmpSampleApp", "Cmp loaded successfully")
Log.i("InmobiCmpSampleApp", "Cmp Id: ${info.cmpId}")
}
@Override
public void onCmpLoaded(PingReturn info) {
Log.i("InmobiCmpSampleApp", "Cmp loaded successfully");
Log.i("InmobiCmpSampleApp", "Cmp Id: " + info.getCmpId());
}
The onCMPUIStatusChanged
notifies when the CMP UI status is changed. Whenever there is any change made to the CMP UI, this callback will be called.
Attribute | Data Type | Description |
---|---|---|
`status`(DisplayInfo) |
Object | Provides information related to CMP UI and the regulation shown. |
override fun onCMPUIStatusChanged(status: DisplayInfo) {
//Use onCMPUIStatusChanged to know the information related to CMP UI.
Log.i("InmobiCmpSampleApp", status.displayStatus)
}
@Override
public void onCMPUIStatusChanged(DisplayInfo displayInfo) {
//Use onCMPUIStatusChanged to know the information related to CMP UI.
Log.i("InmobiCmpSampleApp", displayInfo.getDisplayStatus());
}
The onReceiveUSRegulationsConsent
notifies that the user has finished giving or updating consent to an MSPA regulation.
Attribute | Data Type | Description |
---|---|---|
`usRegulationData`(USRegulationData) |
Object | Provides consent information related to MSPA regulation. |
override fun onReceiveUSRegulationsConsent(usRegulationData: USRegulationData) {
//Use USRegulationData to know the consent information related to MSPA regulation.
Log.i("InmobiCmpSampleApp", usRegulationData.gppString)
}
@Override
public void onReceiveUSRegulationsConsent(USRegulationData usRegulationData) {
//Use USRegulationData to know the consent information related to MSPA regulation.
Log.i("InmobiCmpSampleApp", usRegulationData.getGppString());
}
The onUserMovedToOtherState
notifies that the applicable regulation is MSPA and user moved to another state due to which the applicable regulation is changed
override fun onUserMovedToOtherState() {
// Use onUserMovedToOtherState to know when the user has moved to another US state.
}
@Override
public void onUserMovedToOtherState() {
// Use onUserMovedToOtherState to know when the user has moved to another US state.
}
The onActionButtonClicked
notifies when the user has clicked any of the action buttons related to Consent or Pay on the CMP UI.
Attribute | Data Type | Description |
---|---|---|
`actionButton`(ActionButton) |
Object | Provides information related to action buttons of Consent or Pay. |
override fun onActionButtonClicked(actionButton: ActionButton) {
//Use onActionButtonClicked to know the information related to action buttons of Cosnent or Pay.
Log.i("InmobiCmpSampleApp", "onActionButtonClicked: $actionButton")
}
@Override
public void onActionButtonClicked(ActionButton actionButton) {
//Use onActionButtonClicked to know the information related to action buttons of Cosnent or Pay.
Log.i("InmobiCmpSampleApp", "onActionButtonClicked: "+actionButton);
}
This callback is triggered upon obtaining user consent for IAB-compliant vendors.
Attribute | Data Type | Description |
---|---|---|
`tcData`TCData |
String | Provides the consent information related to IAB vendors. |
override fun onIABVendorConsentGiven(tcData: TCData) {
// Use TCData to know the consent information related to IAB vendors
Log.i("onIABVendorConsentGiven", tcData.gdprApplies.toString())
Log.i("onIABVendorConsentGiven", tcData.tcString ?: "")
}
@Override
public void onIABVendorConsentGiven(TCData tcData) {
// Use TCData to know the consent information related to IAB vendors Log.i("onIABVendorConsentGiven", String.valueOf(tcData.getGdprApplies())); Log.i("onIABVendorConsentGiven", tcData.getTcString() != null ? tcData.getTcString() : "");
}
The onNonIABVendorConsentGiven
callback pertains to vendors configured in the InMobi CMP and do not automatically validate consent.
Attribute | Data Type | Description |
---|---|---|
`nonIABData`NonIABData |
String | Provides the consent information related to non- IAB vendors. |
override fun onNonIABVendorConsentGiven(nonIABData: NonIABData) {
//Use NonIABData to know the consent information related to Non-IAB vendors
Log.i("onNonIABVendorConsent", nonIABData.toString())
// Use nonIabData.nonIabVendorConsents to checkout the vendor consents
Log.i("onNonIABVendorConsent", nonIABData.nonIabVendorConsents.toString())
Log.i("onNonIABVendorConsent", nonIABData.gdprApplies.toString())
}
@Override
public void onNonIABVendorConsentGiven(NonIABData nonIABData) {
// Use NonIABData to know the consent information related to Non-IAB vendors Log.i("onNonIABVendorConsent", nonIABData.toString());
// Use nonIABData.getNonIabVendorConsents() to check out the vendor consents Log.i("onNonIABVendorConsent", nonIABData.getNonIabVendorConsents().toString()); Log.i("onNonIABVendorConsent", String.valueOf(nonIABData.getGdprApplies()));
}
The onCmpError
notifies the publisher that some error has occurred and also provides information about the error in the `error` object.
Attribute | Data Type | Description |
---|---|---|
`error`(ChoiceError) |
Object | Information related to error. |
override fun onCmpError(error: ChoiceError) {
Log.i("InmobiCmpSampleApp", "An error occurred during initialisation")
Log.i("Error", error.message)
}
@Override
public void onCmpError(ChoiceError error) {
Log.i("InmobiCmpSampleApp", "An error occurred during initialization");
Log.i("Error", error.getMessage());
}
The onGoogleVendorConsentGiven
callback is specifically invoked if you have enabled Google Vendors in the portal.
Attribute | Data Type | Description |
---|---|---|
`acData`(ACData) |
Object | Provides consent information related to Google vendors. |
override fun onGoogleVendorConsentGiven(acData: ACData) {
//Use ACData to know the consent information related to Google vendors
Log.i("InmobiCmpSampleApp", acData.acString ?: "")
}
@Override
public void onGoogleVendorConsentGiven(ACData acData) {
// Use ACData to know the consent information related to Google vendors
Log.i("InmobiCmpSampleApp", acData.getAcString() != null ? acData.getAcString() : "");
}
The onCCPAConsentGiven
notifies when the user has finished giving consent to a CCPA regulation.
Attribute | Data Type | Description |
---|---|---|
`consentString`(String) |
String | Represents the CCPA consent information received. |
override fun onCCPAConsentGiven(consentString: String) {
// Use the string for CCPA consent
Log.i("onCCPAConsentGiven", consentString)
}
@Override
public void onCCPAConsentGiven(String consentString) {
// Use the string for CCPA consent
Log.i("onCCPAConsentGiven", consentString);
}
This topic outlines various InMobi CMP Android SDK callbacks, designed to empower publishers with the information needed for seamless integration and consent details retrieval.
This callback is triggered upon obtaining user consent for IAB-compliant vendors.
Attribute | Data Type | Description |
---|---|---|
TCData |
Boolean | Provides the consent information related to IAB vendors. |
gdprApplies |
String | Indicates if the GDPR applies or not. |
tcData.vendor.consents |
String | Provides information on vendor consents. |
-(void)didReceiveIABVendorConsentWithTcData:(TCData * _Nonnull)tcData updated:(BOOL)updated {
// Use TCData to know the consent information related to IAB vendors
// Use gdprApplies to check if the gdpr applies or not
NSLog(@"%d", tcData.doesGdprApply);
// Use tcData.vendor.consents to checkout the vendor consents
NSLog(@"%@", tcData.vendor.consents);
}
func didReceiveIABVendorConsent(tcData: TCData, updated: Bool) {
// Use TCData to know the consent information related to IAB vendors
// Use gdprApplies to check if the gdpr applies or not
print(tcData.gdprApplies)
// Use tcData.vendor.consents to checkout the vendor consents
print(tcData.vendor.consents)
}
The didRecieveNonIABVendorConsent
callback pertains to vendors configured in the InMobi CMP and do not automatically validate consent.
Attribute | Data Type | Description |
---|---|---|
NonIABData |
Boolean | Provides the consent information related to non- IAB vendors. |
gdprApplies |
String | Indicates if the GDPR applies or not. |
nonIabData.nonIabVendorConsents |
String | Provides information on vendor consents. |
-(void)didReceiveNonIABVendorConsentWithNonIabData:(NonIABData * _Nonnull)nonIabData updated:(BOOL)updated {
//Use NonIABData to know the consent information related to Non-IAB vendors
// Use gdprApplies to check if the gdpr applies or not
NSLog(@"%@", nonIabData.gdprApplies);
// Use nonIabData.nonIabVendorConsents to checkout the vendor consents
NSLog(@"%@", nonIabData.nonIabVendorConsents);
}
func didReceiveNonIABVendorConsent(nonIabData: NonIABData, updated: Bool) {
//Use NonIABData to know the consent information related to Non-IAB vendors
// Use gdprApplies to check if the gdpr applies or not
print(nonIabData.gdprApplies)
// Use nonIabData.nonIabVendorConsents to checkout the vendor consents
print(nonIabData.nonIabVendorConsents)
}
The didReceiveAdditionalConsent
callback is specifically invoked if you have enabled Google Vendors in the portal.
Attribute | Data Type | Description |
---|---|---|
ACData |
Boolean | Provides consent information related to Google vendors. |
gdprApplies |
String | Indicates if the GDPR applies or not. |
acData.additionalVendorConsent |
String | Provides information on vendor consents. |
-(void)didReceiveAdditionalConsentWithAcData:(ACData * _Nonnull)acData updated:(BOOL)updated {
//Use ACData to know the consent information related to Google vendors
// Use gdprApplies to check if the gdpr applies or not
NSLog(@"%d", acData.gdprApplies);
// Use acData.additionalVendorConsent to checkout the vendor consents
NSLog(@"%@", acData.additionalVendorConsent);
}
func didReceiveAdditionalConsent(acData: ACData, updated: Bool) {
//Use ACData to know the consent information related to Google vendors
// Use gdprApplies to check if the gdpr applies or not
print(acData.gdprApplies)
// Use acData.additionalVendorConsent to checkout the vendor consents
print(acData.additionalVendorConsent)
}
The cmpDidLoad
notifies the publishers that the CMP has been intialised successfully and also provides some information in the PingResponse
object.
Attribute | Data Type | Description |
---|---|---|
`info`(PingResponse) |
Object | Information related to cmp version, cmp status etc. |
-(void)cmpDidLoadWithInfo:(PingResponse * _Nonnull)info {
NSLog(@"%@", NSStringFromSelector(_cmd));
NSLog(@"%ld", info.cmpId);
NSLog(@"%ld", info.cmpVersion);
}
func cmpDidLoad(info: PingResponse) {
print("CMP loaded successfully")
print("cmpId: \(info.cmpId)")
print("cmp version: \(info.cmpVersion)")
}
The cmpDidShow
notifies the GDPR consent screen has been shown to publisher and also provides some information in the PingResponse
object.
Attribute | Data Type | Description |
---|---|---|
`info`(PingResponse) |
Object | Information related to cmp version, cmp status etc. |
-(void)cmpDidShowWithInfo:(PingResponse * _Nonnull)info {
NSLog(@"%@", NSStringFromSelector(_cmd));
NSLog(@"%ld", info.cmpId);
NSLog(@"%ld", info.cmpVersion);
}
func cmpDidShow(info: PingResponse) {
print("GDPR popup shown successfully")
print("cmpId: \(info.cmpId)")
print("cmp version: \(info.cmpVersion)")
}
The cmpDidError
notifies the publisher that some error has occurred and also provides information about the error in the error
object.
Attribute | Data Type | Description |
---|---|---|
`error`(Error) |
Object | Information related to error. |
-(void)cmpDidErrorWithError:(NSError * _Nonnull)error {
NSLog(@"%@, error: %@", NSStringFromSelector(_cmd), error.localizedDescription);
}
func cmpDidError(error: Error) {
print("Some error occurred during cmp initialisation")
print("error: " + error.localizedDescription)
}
The didReceiveCCPAConsent
notifies the GDPR consent screen has been shown to publisher and also provides some information in the PingResponse
object.
Attribute | Data Type | Description |
---|---|---|
`string`:String |
String | Represents the CCPA consent information received. |
-(void)didReceiveCCPAConsentWithString:(NSString *)string {
// Use the string for CCPA consent
}
func didReceiveCCPAConsent(string: String) {
// Use the string for CCPA consent
}
Google Analytics introduces Consent Mode v2, providing a streamlined approach to adjust your SDK's behavior based on user consent status. This feature lets you easily indicate whether consent has been granted for Analytics and Ads cookies. To implement Consent Mode v2 for your apps, follow these straightforward steps:
setConsent
method programmatically to update these values based on in-app user consent.For more information, see Consent mode on websites and mobile apps.
Consent Types | Consent Mode V2 | InMobi CMP (Web) | Description |
---|---|---|---|
ad_storage |
Mandatory | Supported | Enables storage for advertising, like web cookies or app device identifiers. |
analytics_storage |
Mandatory | Supported | Enables storage for analytics, e.g., visit duration cookies or app device identifiers. |
ad_user_data |
Mandatory | Supported | Consent is required to send user data to Google for online advertising. |
ad_personalization |
Mandatory | Supported | Consents to personalized advertising. |
After selecting GBC on the portal for AMP sites and saving it, you should copy the final AMP tag and update it on your AMP site. Unlike the non-AMP sites, you should manually update the AMP sites' tags after any configuration changes.
To enable GBC for your Android app, you need to first set the default consent state and values.
AndroidManifest.xml
file. Update the consent state based on the user interaction with the consent settings.AndroidManifest.xml
file since no consent mode values are pre-configured by default.google_analytics_default_allow_analytics_storage
google_analytics_default_allow_ad_storage
google_analytics_default_allow_ad_user_data
google_analytics_default_allow_ad_personalization_signals
<meta-data android:name="google_analytics_default_allow_analytics_storage" android:value="true" />
<meta-data android:name="google_analytics_default_allow_ad_storage" android:value="true" />
<meta-data android:name="google_analytics_default_allow_ad_user_data" android:value="true" />
<meta-data android:name="google_analytics_default_allow_ad_personalization_signals" android:value="true" />
showGBCScreen(activity: Activity)
API to show the standalone popup:
fun showGoogleConsent() {
// Show Google basic consent
ChoiceCmp.showGBCScreen(this)
}
public void showGoogleConsent() {
// Show Google basic consent
ChoiceCmp.showGBCScreen(this);
}
onGoogleBasicConsentChange(consents: GoogleBasicConsents)
:
override fun onGoogleBasicConsentChange(consents: GoogleBasicConsents) {
Log.i("Ad Storage", consents.adStorage.value)
Log.i("AdUserData", consents.adUserData.value)
Log.i("AdPersonalization", consents.adPersonalization.value)
Log.i("AnalyticsStorage", consents.analyticsStorage.value)
}
@override
public void onGoogleBasicConsentChange(GoogleBasicConsents consents) {
Log.i("Ad Storage", consents.getAdStorage().getValue());
Log.i("AdUserData", consents.getAdUserData().getValue());
Log.i("AdPersonalization", consents.getAdPersonalization().getValue());
Log.i("AnalyticsStorage", consents.getAnalyticsStorage().getValue());
}
onGoogleBasicConsentChange(consents: GoogleBasicConsents)
callback and set the consent using the setConsent
method of Google’s Analytics API. The callback will be called only when Google consent is enabled in the portal and consent is given by the user. It won’t be called during the consecutive app launches.
You need to call the setConsent
method to set the consent provided by the callback API. InMobi CMP will NOT automatically set the setConsent
method.
The following example shows the setConsent
method updating values for Analytics, Ad storage, Ad user data and Ad personalization to granted or denied:
override fun onGoogleBasicConsentChange(consents: GoogleBasicConsents) {
Firebase.analytics.setConsent {
adStorage = getFirebaseAnalyticsConsentValue(consents.adStorage == GBCConsentValue.GRANTED)
adUserData = getFirebaseAnalyticsConsentValue(consents.adStorage == GBCConsentValue.GRANTED)
adPersonalization = getFirebaseAnalyticsConsentValue(consents.adStorage == GBCConsentValue.GRANTED)
analyticsStorage = getFirebaseAnalyticsConsentValue(consents.adStorage == GBCConsentValue.GRANTED)
}
}
fun getFirebaseAnalyticsConsentValue(value: Boolean): FirebaseAnalytics.ConsentStatus {
return if (value)
FirebaseAnalytics.ConsentStatus.GRANTED
else
FirebaseAnalytics.ConsentStatus.DENIED
}
@override
public void onGoogleBasicConsentChange(GoogleBasicConsents consents) {
// Set consent types.
Map<ConsentType, ConsentStatus> consentMap = new EnumMap<>(ConsentType.class);
consentMap.put(ConsentType.ANALYTICS_STORAGE, consents.getAnalyticsStorage() == GBCConsentValue.GRANTED ?
ConsentStatus.GRANTED : ConsentStatus.DENIED);
consentMap.put(ConsentType.AD_STORAGE, consents.getAdStorage() == GBCConsentValue.GRANTED ?
ConsentStatus.GRANTED : ConsentStatus.DENIED);
consentMap.put(ConsentType.AD_USER_DATA, consents.getAdUserData() == GBCConsentValue.GRANTED ?
ConsentStatus.GRANTED : ConsentStatus.DENIED);
consentMap.put(ConsentType.AD_PERSONALIZATION, consents.getAdPersonalization() == GBCConsentValue.GRANTED ?
ConsentStatus.GRANTED : ConsentStatus.DENIED);
mFirebaseAnalytics.setConsent(consentMap);
}
The value set by the setConsent
method persists across app executions and overrides the default values configured through the AndroidManifest.xml
file. The value remains in that state until setConsent
is called again, even if a user closes and reopens the app.
This topic deep dives into the different MSPA signals and how to understand them. The MSPA consists of privacy-protective terms that activate among a group of signatories and accompany the data as it moves through the digital advertising supply chain. For more information, see Technicalities of MSPA.
The IAB Multi-State Privacy Agreement (MSPA) is an industry contractual framework designed to assist advertisers, publishers, agencies, and ad tech intermediaries in complying with five state privacy laws that took effect in 2023 (in California, Virginia, Colorado, Connecticut, and Utah). The MSPA collaborates with the IAB Tech Lab’s Global Privacy Platform, a uniform privacy signaling specification that enables companies to communicate and honor consumer choices throughout the ad ecosystem.
The MSPA collaborates with the IAB Tech Lab’s Global Privacy Platform, a standardized privacy signaling specification enabling companies to communicate and respect consumer choices across the advertising ecosystem.
The MSPA complements commercial contracts among signatories with necessary privacy terms. In cases where no commercial contracts are in place, the MSPA sets forth the essential privacy terms mandated by law.
Additionally, while publishers and advertisers can utilize the MSPA to encompass all their digital ad transactions, it also allows them the flexibility to engage in separate agreements with their ad tech vendors for other transactions using distinct privacy terms. These transactions would simply fall outside the scope of MSPA and not be ‘Covered Transactions’
In the next sections, you will find the different consents covered under MSPA.
Businesses must include a 'do not sell my personal information' link on their homepage and all web pages collecting data. The opt-out link should provide comprehensive details about consumer rights and enable them to decline the sale and sharing of their personal information.
Field name | GPP Field Type | Description | What happens in Auto-display consent screen scenario? | What happens in Do not Auto-display consent screen scenario? |
SaleOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of the Sale of the Consumer's Personal Information
2 No, notice was not provided |
This field will be set as 1 - Notice shown as soon as the consent screen auto-triggers successfully. |
This field will be set as 2 - Notice was not provided unless the user clicks on the opt-out link. |
SharingOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of the Sharing of the Consumer's Personal Information
2 No, notice was not provided |
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SensitiveDataLimitUseNotice | Int(2) |
Notice of the Opportunity to Limit Use or Disclosure of the Consumer's Sensitive Personal Information
2 No, notice was not provided |
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SaleOptOut | Int(2) |
Opt-Out of the Sale of the Consumer's Personal Information
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. |
This field will be set as Once the screen is triggered successfully, based on the user's opt-out value, this field is updated accordingly. |
SharingOptOut | Int(2) |
Opt-Out of the Sharing of the Consumer's Personal Information
|
This field is updated as per user input. | This field will be set as 0 - till the consent screen is triggered. |
SensitiveDataProcessing | N-Bitfield(2,9) |
Two bits for each Data Activity:
Two bits for each Data Activity:
Data Activities: (1) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Which Reveals a Consumer's Social Security, Driver's License, State Identification Card, or Passport Number. (2) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Which Reveals a Consumer's Account Log-In, Financial Account, Debit Card, or Credit Card Number in Combination with Any Required Security or Access Code, Password, or Credentials Allowing Access to an Account. (3) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Which Reveals a Consumer's Precise Geolocation. (4) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Which Reveals a Consumer's Racial or Ethnic Origin, Religious or Philosophical Beliefs, or Union Membership. (5) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Which Reveals the contents of a Consumer's Mail, Email, and Text Messages unless You Are the Intended Recipient of the Communication. (6) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Which Reveals a Consumer's Genetic Data. (7) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Consisting of Biometric Information for the Purpose of Uniquely Identifying a Consumer. (8) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Consisting of Personal Information Collected and Analyzed Concerning a Consumer's Health. (9) Opt-Out of the Use or Disclosure of the Consumer's Sensitive Personal Information Consisting of Personal Information Collected and Analyzed Concerning a Consumer's Sex Life or Sexual Orientation. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
PersonalDataConsents | Int(2) |
Consent to Collection, Use, Retention, Sale, and/or Sharing of the Consumer's Personal Data that Is Unrelated to or Incompatible with the Purpose(s) for which the Consumer's Personal Data Was Collected or Processed
|
This field is updated as per user input. |
This field will be set as |
KnownChildSensitiveDataConsents |
N-Bitfield(2,2) |
Two bits for each Data Activity: 0 Not Applicable. The Business does not have actual knowledge that it Processes Personal Information of Consumers Less Than 16 years of Age.
Data Activities: (1) Consent to Sell the Personal Information of Consumers Less Than 16 years of Age (2) Consent to Share the Personal Information of Consumers Less Than 16 years of Age |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
Businesses may obtain consent by getting consumers to check a blank checkbox or by typing a written statement.
Field name | GPP Field Type | Description | Auto-display consent screen | Do not Auto-display consent screen |
SaleOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of the Sale of the Consumer's Personal Information
2 No, notice was not provided |
This field will be set as |
This field will be set as |
SharingNotice | Int(2) |
Notice of the Sharing of Personal Data with Third Parties
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
TargetedAdvertisingOptOutNotice | Int(2) |
Notice of the Opportunity to Opt-Out of Processing of the Consumer's Personal Data for Targeted Advertising
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SaleOptOut | Int(2) |
Opt-Out of the Sale of the Consumer's Personal Information
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. |
This field will be set as Once the screen is triggered successfully, based on the user's opt-out value, this field is updated accordingly. |
TargetedAdvertisingOptOut | Int(2) |
Opt-Out of Processing the Consumer's Personal Data for Targeted Advertising
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. | This field will be set as 0 - till the consent screen is triggered. |
SensitiveDataProcessing | N-Bitfield(2,8) |
Two bits for each Data Activity:
(1) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Racial or Ethnic Origin. (2) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Religious Beliefs. (3) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing a Mental or Physical Health Diagnosis. (4) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Sexual Orientation. (5) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Citizenship or Immigration Status. (6) Consent to Process the Consumer's Sensitive Data Consisting of Genetic Data for the Purpose of Uniquely Identifying a Natural Person. (7) Consent to Process the Consumer's Sensitive Data Consisting of Biometric Data for the Purpose of Uniquely Identifying a Natural Person. (8) Consent to Process the Consumer's Sensitive Data Consisting of Precise Geolocation Data. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
KnownChildSensitiveDataConsents |
Int(2) |
Consent to Process Sensitive Data from a Known Child
|
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
Companies are obligated to provide consumers the choice to opt-out of the sale or targeted advertising use of their personal data. Consumers can express their preferences through a Universal Opt-Out Mechanism (UOOM).
Field name | GPP Field Type | Description | Auto-display consent screen | Do not Auto-display consent screen |
SaleOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of the Sale of the Consumer's Personal Information
2 No, notice was not provided |
This field will be set as |
This field will be set as |
SharingNotice | Int(2) |
Notice of the Sharing of Personal Data with Third Parties
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
TargetedAdvertisingOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of Processing of the Consumer's Personal Data for Targeted Advertising
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SaleOptOut | Int(2) |
Opt-Out of the Sale of the Consumer's Personal Information
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. |
This field will be set as Once the screen is triggered successfully, based on the user's opt-out value, this field is updated accordingly. |
TargetedAdvertisingOptOut | Int(2) |
Opt-Out of Processing the Consumer's Personal Data for Targeted Advertising
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. | This field will be set as 0 - till the consent screen is triggered. |
SensitiveDataProcessing | N-Bitfield(2,7) |
Two bits for each Data Activity:
(1) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Racial or Ethnic Origin. (2) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Religious Beliefs. (3) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing a Mental or Physical Health Condition or Diagnosis. (4) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Sex Life or Sexual Orientation. (5) Consent to Process the Consumer's Sensitive Data Consisting of Personal Data Revealing Citizenship or Citizenship Status. (6) Consent to Process the Consumer's Sensitive Data Consisting of Genetic Data that May Be Processed for the Purpose of Uniquely Identifying an Individual. (7) Consent to Process the Consumer's Sensitive Data Consisting of Biometric Data that May Be Processed for the Purpose of Uniquely Identifying an Individual. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
KnownChildSensitiveDataConsents |
Int(2) |
Consent to Process Sensitive Data from a Known Child
|
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
The UCPA does not prescribe specific opt-out methods. In contrast to the CCPA, which mandates an opt-out link, the UCPA grants flexibility for organizations to establish their preferred methods for enabling consumers to opt out of data sales or targeted advertising.
Field name | GPP Field Type | Description | Auto-display consent screen | Do no Auto-display consent screen |
SaleOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of the Sale of the Consumer's Personal Information
2 No, notice was not provided |
This field will be set as |
This field will be set as
|
SharingNotice | Int(2) |
Notice of the Sharing of Personal Data with Third Parties
|
This field will be set as 1. |
This field will be set as 2 till the user clicks on the opt-out link. |
TargetedAdvertisingOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of Processing of the Consumer's Personal Data for Targeted Advertising
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SensitiveDataProcessingOptOutNotice |
Int(2) |
Notice of the Opportunity to Opt Out of the Processing of the Consumer's Sensitive Data
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SaleOptOut | Int(2) |
Opt-Out of the Sale of the Consumer's Personal Information
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. |
This field will be set as Once the screen is triggered successfully, based on the user's opt-out value, this field is updated accordingly. |
TargetedAdvertisingOptOut | Int(2) |
Opt-Out of Processing the Consumer's Personal Data for Targeted Advertising
2 Did Not Opt Out |
Once the consent screen auto-triggers, based on the opt-out value updated by the user, this field is updated accordingly. | This field will be set as 0 - till the consent screen is triggered. |
SensitiveDataProcessing | N-Bitfield(2,8) |
Two bits for each Data Activity:
(1) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Racial or Ethnic Origin. (2) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Religious Beliefs. (3) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Sexual Orientation. (4) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Citizenship or Immigration Status. (5) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Medical History, Mental or Physical Health Condition, or Medical Treatment or Diagnosis by a Health Care Professional. (6) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Genetic Data for the Purpose of Identifying a Specific Individual. (7) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Biometric Data for the Purpose of Identifying a Specific Individual. (8) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Specific Geolocation Data. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
KnownChildSensitiveDataConsents |
Int(2) |
Consent to Process Sensitive Data from a Known Child
|
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
As per the law, data controllers must provide "clear and conspicuous" opt-out links on their websites.
Field name | GPP Field Type | Description | Auto-display consent screen | Do not Auto- display consent screen |
SaleOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of the Sale of the Consumer's Personal Information
2 No, notice was not provided |
This field will be set as |
This field will be set as |
SharingNotice | Int(2) |
Notice of the Sharing of Personal Data with Third Parties
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
TargetedAdvertisingOptOutNotice | Int(2) |
Notice of the Opportunity to Opt Out of Processing of the Consumer's Personal Data for Targeted Advertising
|
This field will be set as 1 . |
This field will be set as 2 till the user clicks on the opt-out link. |
SaleOptOut | Int(2) |
Opt-Out of the Sale of the Consumer's Personal Information
2 Did Not Opt Out |
This field will be set as 2 - Did Not opt-out as soon as the consent screen auto-triggers successfully. Based on the opt-out value updated by the user, this field is updated accordingly. |
This field will be set as Once the screen is triggered successfully, based on the user's opt-out value, this field is updated accordingly. |
TargetedAdvertisingOptOut | Int(2) |
Opt-Out of Processing the Consumer's Personal Data for Targeted Advertising
2 Did Not Opt Out |
This field will be set as 2 . |
This field will be set as 0 - till the consent screen is triggered.. |
SensitiveDataProcessing | N-Bitfield(2,8) |
Two bits for each Data Activity:
(1) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Racial or Ethnic Origin. (2) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Religious Beliefs. (3) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Sexual Orientation. (4) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Citizenship or Immigration Status. (5) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Personal Data Revealing Medical History, Mental or Physical Health Condition, or Medical Treatment or Diagnosis by a Health Care Professional. (6) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Genetic Data for the Purpose of Identifying a Specific Individual. (7) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Biometric Data for the Purpose of Identifying a Specific Individual. (8) Opt-Out of the Processing of the Consumer's Sensitive Data Consisting of Specific Geolocation Data. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
KnownChildSensitiveDataConsents |
N-Bitfield(2,3) |
Two bits for each Data Activity:
(1) Consent to Process Sensitive Data from a Known Child. (2) Consent to Sell the Personal Data of Consumers At Least 13 Years of Age but Younger Than 16 Years of Age. (3) Consent to Process the Personal Data of Consumers At Least 13 Years of Age but Younger Than 16 Years of Age for Purposes of Targeted Advertising. |
This field is set as opted-out by default. It will update immediately based on the end-user's preference. |
This field is set as opted-out by default. It will update based on the end-user's preference. |
Google Consent Mode (GCM) bridges the gap between data privacy regulations and digital advertising efficiency. It modifies the functionality of Google tags based on users' consent preferences, ensuring compliance without compromising valuable insights for campaign optimization and ad monetization.
Consent Types | Consent Mode | Consent Mode V2 | InMobi CMP (Web) | Description |
---|---|---|---|---|
ad_storage |
Mandatory | Mandatory | Supported | Enables storage for advertising, like web cookies or app device identifiers. |
analytics_storage |
Mandatory | Mandatory | Supported | Enables storage for analytics, e.g., visit duration cookies or app device identifiers. |
ad_user_data |
Optional | Mandatory | Supported | Consents to send user data to Google for online advertising. |
ad_personalization |
Optional | Mandatory | Supported | Consents to personalized advertising. |
functionality_storage |
Optional | Optional | Supported | Enables storage supporting website/app functionality, such as language settings. |
personalization_storage |
Optional | Optional | Supported | Enables storage for personalization, e.g., video recommendations. |
security_storage |
Optional | Optional | Supported | Enables storage for security, covering authentication, fraud prevention, and user protection. |
Google offers tags and SDKs for different products equipped with integrated consent verifications. These tags adapt their functionality and behavior according to consent statuses. Here are some of the supported products:
You can incorporate checks within Tag Manager when tags lack inherent consent verifications.
Google Analytics introduces Consent Mode v2, providing a streamlined approach to adjust your SDK's behavior based on user consent status. This feature lets you easily indicate whether consent has been granted for Analytics and Ads cookies. To implement Consent Mode v2 for your apps, follow these straightforward steps:
For more information, see Consent mode on websites and mobile apps.
Consent Types | Consent Mode V2 | InMobi CMP (Web) | Description |
---|---|---|---|
ad_storage |
Mandatory | Supported | Enables storage for advertising, like web cookies or app device identifiers. |
analytics_storage |
Mandatory | Supported | Enables storage for analytics, e.g., visit duration cookies or app device identifiers. |
ad_user_data |
Mandatory | Supported | Consent is required to send user data to Google for online advertising. |
ad_personalization |
Mandatory | Supported | Consents to personalized advertising. |
By default, the Google basic consent feature is disabled within the portal. Enable it manually to activate.
To configure Google Consent Mode, follow the instructions below:
Info.plist
file since no consent mode values are pre-configured by default.
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE</key> <true/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE</key> <true/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA</key> <true/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS</key> <true/>
gbcDelegate
parameter in the startChoice
method to facilitate the retrieval of GBC callbacks.
func startChoice() {
// Use the ChoiceStyle class to set the light and dark themes
let style = ChoiceStyle(preferredThemeMode: .auto, lightThemeStyleSheet: "LightStyleSheet", darkThemeStyleSheet: "DarkStyleSheet")
// Initialise InMobi CMP
ChoiceCmp.shared.startChoice(pcode: "<YOUR PCODE>", delegate: self, gbcDelegate: self, style: style)
}
-(void) startChoice {
// Use the ChoiceStyle class to set the light and dark themes
ChoiceStyle *style = [[ChoiceStyle alloc] initWithPreferredThemeMode: CMPUserInterfaceStyleAuto lightThemeStyleSheet: @"LightStyleSheet" darkThemeStyleSheet:@"DarkStyleSheet"];
// Initialise InMobi CMP
[[ChoiceCmp shared] startChoiceWithPcode:@"<YOUR PCODE>" delegate: self ccpaDelegate: self gbcDelegate: self shouldDisplayIDFA:true style: style];
}
showGoogleBasicConsent(delegate:)
API to present the standalone popup.
func showGoogleConsent() {
// Show Google basic consent
ChoiceCmp.shared.showGoogleBasicConsent(delegate: self)
}
-(void) showGoogleConsent {
// Show Google basic consent
[[ChoiceCmp shared] showGoogleBasicConsentWithDelegate: self];
}
import InMobiCMP
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, ChoiceCmpDelegate, CCPADelegate, GoogleBasicConsentDelegate {
…
}
#import "AppDelegate.h"
@import InMobiCMP;
@interface AppDelegate ()<ChoiceCmpDelegate,CCPADelegate, GoogleBasicConsentDelegate>
@end
didReceiveGoogleBasicConsentChange(consents:)
callback function.
func didReceiveGoogleBasicConsentChange(consents: GoogleBasicConsents) {
print(AdStorage value: \(consents.adStorage)")
print("AdUserData value: \(consents.adUserData)")
print("AdPersonalization value: \(consents.adPersonalization)")
print("AnalyticsStorage value: \(consents.analyticsStorage)")
}
-(void) didReceiveGoogleBasicConsentChangeWithConsents:(GoogleBasicConsents * _Nonnull)consents {
NSLog(@"Ad storage value: %ld", consents.adStorage);
NSLog(@"Ad user data value: %ld", consents.adUserData);
NSLog(@"Ad personalization value: %ld", consents.adPersonalization);
NSLog(@"Analytics storage value: %ld", consents.analyticsStorage);
}
didReceiveGoogleBasicConsentChange(consents: )
callback and set the consent using the setConsent
method of Google’s Analytics API. The callback will be initiated only when you enable Google consent in the portal, and the user gives consent. You will be unable to initiate it during the consecutive app launches.
You must use the setConsent
method to set the consent provided by the callback API as InMobi CMP doesn't automatically set it.
func didReceiveGoogleBasicConsentChange(consents: GoogleBasicConsents) {
Analytics.setConsent([
.analyticsStorage: consents.analyticsStorage == .granted ? .granted : .denied,
.adStorage: consents.adStorage == .granted ? .granted : .denied,
.adUserData: consents.adUserData == .granted ? .granted : .denied,
.adPersonalization: consents.adPersonalization == .granted ? .granted : .denied
])
}
- (void)didReceiveGoogleBasicConsentChangeWithConsents:(GoogleBasicConsents * _Nonnull)consents {
[FIRAnalytics setConsent:@{
FIRConsentTypeAnalyticsStorage :
[consents analyticsStorage] == GoogleBasicConsentValueGranted ? FIRConsentStatusGranted : FIRConsentStatusDenied,
FIRConsentTypeAdStorage :
[consents adStorage] == GoogleBasicConsentValueGranted ? FIRConsentStatusGranted : FIRConsentStatusDenied,
FIRConsentTypeAdUserData :
[consents adUserData] == GoogleBasicConsentValueGranted ? FIRConsentStatusGranted : FIRConsentStatusDenied,
FIRConsentTypeAdPersonalization :
[consents adPersonalization] == GoogleBasicConsentValueGranted ? FIRConsentStatusGranted : FIRConsentStatusDenied,
}];
}
The value set by the setConsent
method persists across app executions and overrides the default values configured through the Info.plist
file. The value remains in that state until you call the setConsent
method again, even if a user closes and reopens the app.
This topic provides detailed instructions for implementing Google Basic Consent using the InMobi CMP. By integrating Google Basic Consent, you can manage user preferences compliantly and enhance ad personalization based on user consent status.
GCM is compatible exclusively with gtag.js
. Advertisers must ensure the use of gtag.js
for tag management. Legacy tags such as ga.js
, analytics.js
, or conversion.js
are not supported.
You must mention version 52 or above in the CMP VERSION field to view the ENABLE GOOGLE BASIC CONSENT field.
After selecting GBC on the portal for the AMP sites and saving it, you should copy the final AMP tag and update it on your AMP site. Unlike the non-AMP sites, you should manually update the AMP sites' tags after any configuration changes.
There are two methods to verify your Google consent mode.
To verify your Google Consent mode setup, open your browser's console and use window.dataLayer = window.dataLayer || [];
.You should find the consent
and update
.
{
"0": "consent",
"1": "update",
"2": {
"ad_storage": "granted",
"ad_user_data": "granted",
"analytics_storage": "granted",
"functionality_storage": "granted",
"personalization_storage": "granted",
"ad_personalization": "granted",
"security_storage": "granted"
}
}
Whenever a user updates or modifies their consents, the InMobi CMP generates a new event called cookie_consent_update
. This event serves as a custom trigger that publishers can utilize to trigger other events.
To implement this trigger, follow the instructions:
cookie_consent_update
.cookie_consent_update
.`ChoiceCmp.forceDisplayUI()`
.getSDKVersion()
to get current sdk version.onCmpUIShown(info: PingReturn)
callback and added a callback onCMPUIStatusChanged(status: DisplayInfo)
to inform when the CMP UI status is changed.usRegulationApplies
flag in the PingReturn model to inform whether the US regulations is applicable at any point of time.onUserMovedToOtherState
callback in MSPA is triggering when the user is moving to another state and regulation is changing.getTCData()
. Use getGDPRData()
instead.
ChoiceCmp.getGDPRData()
override fun onReceiveUSRegulationsConsent(usRegulationData: USRegulationData) {}
override fun onUserMovedToOtherState() {}
implementation 'com.iabgpp:iabgpp-encoder:3.1.1'
ChoiceStyle.Builder().setThemeMode(ThemeMode.AUTO). setLightModeColors(ChoiceColor()). setDarkModeColors(ChoiceColor()).build()
showGBCScreen(activity: Activity)
.onGoogleBasicConsentChange(consents: GoogleBasicConsents)
will trigger, providing the consent values.build.gradle
of your application: implementation 'com.google.code.gson:gson:2.8.8'ChoiceStyleSheet
to suit the given fields in UI in a more appropriate way.ChoiceStyleSheet
while passing in startChoice
method for customisation:
tabForegroundColor
infoButtonForegroundColor
infoScreenBackgroundColor
infoScreenForegroundColor
globalTextColor
listTextColor
ChoiceStyleSheet
.
ChoiceCmp.startChoice(
app = application,
packageId = packageId,
pCode = <YOUR PCODE>,
callback= choiceCmpCallback,
resources = ChoiceStyleResources(themeMode = ThemeMode.AUTO,
styleId = R.raw.choice_style_sheet,
styleIdNight = R.raw.choice_style_sheet_dark)
)
`ChoiceCmp.shared.forceDisplayUI()`
.cmpUIStatusChanged(info: DisplayInfo)
to inform when the CMP UI status is changed.ChoiceCmp.shared.sdkVersion
.usRegulationApplies
in the PingResponse
model to inform whether the US regulation is applicable at any point of time.cmpDidShow(info:PingResponse)
callback. Use cmpUIStatusChanged(info: DisplayInfo)
instead.GDPRData
in an asynchronous manner.
ChoiceCmp.shared.getGDPRData { gdprData in
print(gdprData.tcString)
print(gdprData.gppString)
}
getTCString
and getGPPString
API, use getGDPRData
API instead.showUSRegulations(ccpaDelegate: )
.didReceiveUSRegulationsConsent(usRegData: )
to retrieve the MSPA consent values.userDidMoveToOtherState()
. This callback will be triggered when the user moves to a different state accompanied by a change of regulations.didReceiveIABVendorConsent
callback has been updated to didReceiveIABVendorConsent(gdprData: GDPRData, updated: Bool)
. GDPRData
will entail both TC String
and GPP String
.GPP String
in GDPRData
, privacyEncodingMode
has also been added to indicate which encoding mode has been set in the portal.ChoiceStyle
API has been updated to accept dark and light mode colors using ChoiceColor
API:
let colors = ChoiceColor()
colors.dividerColor = "#CCBBFF"
ChoiceStyle(preferredThemeMode: .auto, lightModeColors: colors, darkModeColors: colors)
showCCPA(ccpaDelegate: )
API for displaying CCPA popup. Use showUSRegulations(ccpaDelegate: )
instead.showGoogleBasicConsent(delegate: )
.didReceiveGoogleBasicConsentChange(consents: )
, which will trigger and provide the consent values.startChoice
API by incorporating the gbcDelegate
parameter. Setting this delegate to receive the corresponding callback is imperative.showCCPA(ccpaDelegate: )
.startCCPA(pcode: , ccpaDelegate: )
API for displaying CCPA popup. You should use showCCPA(ccpaDelegate: )
instead.didReceiveIABVendorConsent
callback. This enhancement ensures a more seamless and predictable execution of concurrent tasks, contributing to a smoother user experience.
let style = ChoiceStyle(preferredThemeMode: .auto, lightThemeStyleSheet: "LightStyleSheet", darkThemeStyleSheet: "DarkStyleSheet")
ChoiceCmp.shared.startChoice(pcode: "< YOUR PCODE >", delegate: self, style: style)
consent_cookie_update
gtm custom event firing on page refresh.