{"id":25936863,"url":"https://github.com/chartboost/chartboost-mediation-android-adapter-reference","last_synced_at":"2026-01-16T18:30:07.953Z","repository":{"id":143389764,"uuid":"503862147","full_name":"ChartBoost/chartboost-mediation-android-adapter-reference","owner":"ChartBoost","description":"Chartboost Mediation Android SDK Reference adapter","archived":false,"fork":false,"pushed_at":"2024-12-13T12:45:49.000Z","size":195,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-12-18T17:01:55.340Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ChartBoost.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-15T17:29:37.000Z","updated_at":"2024-09-25T17:06:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"679b5630-bb1d-4609-8449-2c3dae995b9d","html_url":"https://github.com/ChartBoost/chartboost-mediation-android-adapter-reference","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChartBoost%2Fchartboost-mediation-android-adapter-reference","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChartBoost%2Fchartboost-mediation-android-adapter-reference/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChartBoost%2Fchartboost-mediation-android-adapter-reference/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChartBoost%2Fchartboost-mediation-android-adapter-reference/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ChartBoost","download_url":"https://codeload.github.com/ChartBoost/chartboost-mediation-android-adapter-reference/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241773261,"owners_count":20018065,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-04T02:54:56.215Z","updated_at":"2026-01-16T18:30:07.894Z","avatar_url":"https://github.com/ChartBoost.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chartboost Mediation Reference Adapter\n\nThe Chartboost Mediation Reference adapter mediates the Reference SDK via the Chartboost Mediation SDK.\n\n## Minimum Requirements\n\n| Plugin                   | Version |\n| ------------------------ |---------|\n| Chartboost Mediation SDK | 5.0.0+  |\n| Android API              | 21+     |\n\n## Integration\n\nIn your `build.gradle`, add the following entry:\n```\n    implementation \"com.chartboost:chartboost-mediation-adapter-reference:5.1.0.1.0\"\n```\n\n## Chartboost Mediation Custom Adapter Implementation Guidelines\n\nThis guide is intended to help you implement custom mediation adapters that work with the Chartboost\nMediation SDK on Android.\n\n\u003e [!IMPORTANT]\n\u003e Chartboost Mediation will not be providing official support for any custom adapters. For official adapters that we develop and support, [visit this site](https://adapters.chartboost.com).\n\n\u003e [!NOTE]\n\u003e The following instructions are available in Kotlin. If your adapter is going to be published and maintained by Chartboost Mediation, ensure that it is written in Kotlin.\n\n1. Create a new class and implement Chartboost Mediation's `PartnerAdapter` interface.\n\n    ```kotlin\n    class ReferenceAdapter : PartnerAdapter\n    ```\n\n2. Override `val partnerSdkVersion: String` with the version of the partner SDK.\n\n    ```kotlin\n    override val partnerSdkVersion: String\n        get() = ReferenceSdk.REFERENCE_SDK_VERSION\n    ```\n\n3. Override `val adapterVersion: String` with the version of the mediation adapter.\n    - You may version the adapter using any preferred convention, but it is recommended to apply the following format if the adapter will be published by Chartboost Mediation: `[Chartboost Mediation][Partner][Adapter]`, where `[Chartboost Mediation]` represents the Chartboost Mediation SDK’s major version that is compatible with this adapter, `[Partner]` represents the partner SDK’s version, and `[Adapter]` represents this adapter’s version (starting with 0).\n        - For example, if this adapter is compatible with Chartboost Mediation SDK 4.x and partner SDK 1.2.3.x (where x is optional), and this is its initial release, then adapterVersion is 4.1.2.3.x.0.\n\n    ```kotlin\n    override val adapterVersion: String\n        get() = BuildConfig.CHARTBOOST_MEDIATION_REFERENCE_ADAPTER_VERSION\n    ```\n\n4. Override `val partnerId: String` with the internal identifier that the Chartboost Mediation SDK can use to refer to the current partner.\n\n    ```kotlin\n    override val partnerId: String\n        get() = \"reference\"\n    ```\n\n5. Override `val partnerDisplayName: String` with the official/external name of the current partner.\n\n    ```kotlin\n    override val partnerDisplayName: String\n        get() = \"Reference\"\n    ```\n\n6. Override `fun setGdpr(context: Context, applies: Boolean?, gdprConsentStatus: GdprConsentStatus)` to notify the partner SDK of the GDPR applicability as needed and to notify the partner SDK of the GDPR consent status as needed.\n\n    ```kotlin\n    override fun setGdpr(\n        context: Context,\n        applies: Boolean?,\n        gdprConsentStatus: GdprConsentStatus\n    ) {\n        PartnerLogController.log(\n            when (applies) {\n                true -\u003e GDPR_APPLICABLE\n                false -\u003e GDPR_NOT_APPLICABLE\n                else -\u003e GDPR_UNKNOWN\n            }\n        )\n\n        PartnerLogController.log(\n            when (gdprConsentStatus) {\n                GdprConsentStatus.GDPR_CONSENT_UNKNOWN -\u003e GDPR_CONSENT_UNKNOWN\n                GdprConsentStatus.GDPR_CONSENT_GRANTED -\u003e GDPR_CONSENT_GRANTED\n                GdprConsentStatus.GDPR_CONSENT_DENIED -\u003e GDPR_CONSENT_DENIED\n            }\n        )\n\n        // Implement your SDK's GDPR methods here.\n    }\n    ```\n\n7. Override `fun setCcpaConsent(context: Context, hasGrantedCcpaConsent: Boolean, privacyString: String)` to notify the partner SDK of the CCPA consent as needed.\n\n    ```kotlin\n    override fun setCcpaConsent(\n        context: Context,\n        hasGrantedCcpaConsent: Boolean,\n        privacyString: String\n    ) {\n        PartnerLogController.log(\n            if (hasGrantedCcpaConsent) CCPA_CONSENT_GRANTED\n            else CCPA_CONSENT_DENIED\n        )\n\n        // Implement your SDK's CCPA consent methods here.\n    }\n    ```\n\n8. Override `fun setUserSubjectToCoppa(context: Context, isSubjectToCoppa: Boolean)` to notify the partner SDK of whether the user is subject to COPPA as needed.\n\n    ```kotlin\n    override fun setUserSubjectToCoppa(context: Context, isSubjectToCoppa: Boolean) {\n        PartnerLogController.log(\n            if (isSubjectToCoppa) COPPA_SUBJECT\n            else COPPA_NOT_SUBJECT\n        )\n        \n        // Implement your SDK's COPPA methods here.\n    }\n    ```\n\n9. Override `suspend fun setUp(context: Context, partnerConfiguration: PartnerConfiguration): Result\u003cUnit\u003e` to initialize the partner SDK and perform any necessary setup in order to request and serve ads.\n    - If the operation succeeds, return `Result.success`. Otherwise, return `Result.failure(Exception)`.\n\n    \u003e [!NOTE]\n    \u003e This operation may time out as deemed necessary by the Chartboost Mediation SDK. However, the partner SDK’s initialization attempt will not be canceled and may continue until completion.\n\n    ```kotlin\n    override suspend fun setUp(\n        context: Context,\n        partnerConfiguration: PartnerConfiguration\n    ): Result\u003cUnit\u003e {\n        PartnerLogController.log(SETUP_STARTED)\n\n        return ReferenceSdk.initialize().fold(\n            onSuccess = {\n                Result.success(PartnerLogController.log(SETUP_SUCCEEDED))\n            },\n            onFailure = {\n                PartnerLogController.log(SETUP_FAILED)\n                Result.failure(it)\n            }\n        )\n    }\n    ```\n\n10. Override `suspend fun fetchBidderInformation(context: Context, request: PreBidRequest): Map\u003cString, String\u003e` to compute and return a `Map\u003cString, String\u003e` of biddable token Strings. If network bidding is not supported by the current partner, return an empty `Map`.\n\n    \u003e [!NOTE]\n    \u003e This operation may time out as deemed necessary by the Chartboost Mediation SDK.\n\n    ```kotlin\n    override suspend fun fetchBidderInformation(\n        context: Context,\n        request: PreBidRequest\n    ): Map\u003cString, String\u003e {\n        PartnerLogController.log(BIDDER_INFO_FETCH_STARTED)\n\n        val token = ReferenceSdk.getBidToken()\n\n        PartnerLogController.log(if (token.isNotEmpty()) BIDDER_INFO_FETCH_SUCCEEDED else BIDDER_INFO_FETCH_FAILED)\n        return mapOf(\"bid_token\" to token)\n    }\n    ```\n\n11. Override `suspend fun load(context: Context, request: PartnerAdLoadRequest, partnerAdListener: PartnerAdListener): Result\u003cPartnerAd\u003e` to make an ad request.\n    - `PartnerAd(val ad: Any?, val details: Map\u003cString, String\u003e, val request: PartnerAdLoadRequest)` is a data class that holds your partner’s ad object along with data relevant to the current ad request. You may populate and pass a `Map\u003cString, String\u003e` of data that you’d like to persist between calls.\n    - If an ad is successfully loaded, return `Result.success(PartnerAd)`. Otherwise, return `Result.failure(Exception)`.\n\n    \u003e [!NOTE]\n    \u003e This operation may time out as deemed necessary by the Chartboost Mediation SDK.\n\n    ```kotlin\n    override suspend fun load(\n        context: Context,\n        request: PartnerAdLoadRequest,\n        partnerAdListener: PartnerAdListener\n    ): Result\u003cPartnerAd\u003e {\n        PartnerLogController.log(LOAD_STARTED)\n        // Implement your SDK load calls here.\n    }\n    ```\n\n12. Override `suspend fun show(context: Context, partnerAd: PartnerAd): Result\u003cPartnerAd\u003e` to show the loaded ad, if one is available.\n    - Since banner ads render upon load and do not have a separate “show” stage, you will only need to handle non-banner ads in this call.\n    - If an ad is successfully shown, return `Result.success(PartnerAd)`. Otherwise, return `Result.failure(Exception)`.\n\n    \u003e [!NOTE]\n    \u003e This operation may time out as deemed necessary by the Chartboost Mediation SDK.\n\n    ```kotlin\n    override suspend fun show(context: Context, partnerAd: PartnerAd): Result\u003cPartnerAd\u003e {\n        PartnerLogController.log(SHOW_STARTED)\n        // Implement your SDK show calls here.\n    }\n    ```\n\n13. Override `suspend fun invalidate(partnerAd: PartnerAd): Result\u003cPartnerAd\u003e` to discard unnecessary ad objects and release resources.\n    - This is required to destroy any `Views` from a specific `PartnerAd`, especially for banners.\n    - If the ad is successfully discarded, return `Result.success(PartnerAd)`. Otherwise, return `Result.failure(Exception)`.\n\n    ```kotlin\n    override suspend fun invalidate(partnerAd: PartnerAd): Result\u003cPartnerAd\u003e {\n        PartnerLogController.log(INVALIDATE_STARTED)\n        // Implement your SDK destroy calls here.\n    }\n    ```\n\n14. Notify the `PartnerAdListener` of the following ad lifecycle events as applicable:\n    - `onPartnerAdImpression(partnerAd: PartnerAd)` when the partner SDK registers an impression for the currently showing ad.\n    - `onPartnerAdClicked(partnerAd: PartnerAd)` when the partner ad has been clicked as the result of a user action.\n    - `onPartnerAdRewarded(partnerAd: PartnerAd, reward: Reward)` when a reward has been given for watching a video ad.\n    - `onPartnerAdDismissed(partnerAd: PartnerAd, error: ChartboostMediationAdException?)` when the partner ad has been dismissed as the result of a user action.\n    - `onPartnerAdExpired(partnerAd: PartnerAd)` when the partner ad has expired as determined by the partner SDK.\n\n    ```kotlin\n    interface PartnerAdListener {\n        fun onPartnerAdImpression(partnerAd: PartnerAd)\n        fun onPartnerAdClicked(partnerAd: PartnerAd)\n        fun onPartnerAdRewarded(partnerAd: PartnerAd)\n        fun onPartnerAdDismissed(partnerAd: PartnerAd, error: ChartboostMediationAdException?)\n        fun onPartnerAdExpired(partnerAd: PartnerAd)\n    }\n    ```\n\n15. Refer to the Chartboost Mediation SDK’s PartnerAdapterEvents enum for a complete list of log events to be used.\n\n## Custom Mediation Adapter Best Practices\n\n1. Ensure that your adapter follows a similar structure:\n   - Adapter Class\n     - Companion Object\n     - Private Values and Variables\n     - Overridden Chartboost Mediation APIs\n     - Private Functions\n\n2. Use the companion object to expose your public SDK APIs to publishers that are integrating your adapter.\n    - Some usages include enabling/disabling test modes, logging, SDK settings, or other SDK methods you want to expose to publishers.\n\n    ```kotlin\n        companion object {\n            /**\n            * Sample code for an SDK that has a test mode API.\n            */\n            var testMode = SampleSDK.getTestMode()\n                set(value) {\n                    field = value\n                    SampleSDK.setTestMode(value)\n                    PartnerLogController.log(\n                        CUSTOM,\n                        \"SampleSDK test mode is ${if (value) \"enabled\" else \"disabled\"}.\"\n                    )\n                }\n\n            /**\n            * Sample code for an SDK that has a Log level option.\n            */\n            var logLevel = Logger.Level.info\n                set(value) {\n                    SampleSDK.setLogLevel(value)\n                    field = value\n                    PartnerLogController.log(CUSTOM, \"Sample SDK log level set to $value.\")\n                }\n        }\n    ```\n\n3. Determine if your SDK will be integrated with Mediation, Programmatic Bidding, or both.\n    - This will determine if you need to implement the `fetchBidderInformation` as well as passing the adm from the request returned. Otherwise, you simply just need to pass the placement to your SDK.\n\n    \u003e [!WARNING]\n    \u003e This is sample code, don't use the code below for your own adapter. Please refer to the code in our actual adapters for real usage samples.\n\n    ```kotlin\n    // Example in which a distinction is made for a programmatic or mediation ad load request.\n    // Make the load distinction at load time.\n        if (request.adm.isNullOrEmpty()) {\n            // This is a mediation request. Pass the partner placement name to your sdk.\n            PartnerSDK.load(request.partnerPlacement)\n        } else {\n            // This is a programmatic request. Pass the returned adm to your sdk.\n            PartnerSDK.load(request.adm)\n        }\n    ```\n\n4. Determine if your SDK supports the currently supported Chartboost Mediation ad formats:\n    - Banner\n    - Interstitial\n    - Rewarded\n    - Rewarded Interstitial\n\n        \u003e [!IMPORTANT]\n        \u003e To determine the ad format for Rewarded Interstitial, you will need to do the following check:\n        \u003e\n        \u003e ```kotlin\n        \u003e request.format.key == \"rewarded_interstitial\"\n        \u003e```\n\n5. Log your adapter with the `PartnerLogController` class and its appropriate `PartnerAdapterEvents` enums.\n\n6. When using suspendable coroutines, it is preferable to use the `CancellableCoroutine` class and provide a `continuation.isActive` check to prevent continuation crashes on multiple calls.\n\n    \u003e [!WARNING]\n    \u003e This is sample code, don't use the code below for your own adapter. Please refer to the code in our actual adapters for real usage samples.\n\n    ```kotlin\n    /**\n     * Example usage of a suspendable coroutine.\n     */\n    override suspend fun setUp(\n        context: Context,\n        partnerConfiguration: PartnerConfiguration\n    ): Result\u003cUnit\u003e {\n        PartnerLogController.log(SETUP_STARTED)\n\n        return suspendCancellableCoroutine { continuation -\u003e\n            fun resumeOnce(result: Result\u003cUnit\u003e) {\n                if (continuation.isActive) {\n                    continuation.resume(result)\n                }\n            }\n\n            Chartboost.startWithAppId(\n                context.applicationContext,\n                appId,\n                app_signature,\n            ) { startError -\u003e\n\n                startError?.let {\n                    PartnerLogController.log(SETUP_FAILED, \"${it.code}\")\n                    resumeOnce(\n                        Result.failure(\n                            ChartboostMediationAdException(\n                                getChartboostMediationError(it),\n                            )\n                        )\n                    )\n                } ?: run {\n                    PartnerLogController.log(SETUP_SUCCEEDED)\n                    resumeOnce(\n                        Result.success(PartnerLogController.log(SETUP_SUCCEEDED))\n                    )\n                }\n            }\n        }\n    }\n    ```\n\n7. Depending on your SDK, if you have show callbacks that need to be mapped with Chartboost Mediation's callbacks at show time, you will need to save the `PartnerAdListener` listener you used at load time.\n    - It is recommended to map the `PartnerAdListener` listener with the appropriate load identifier to prevent listeners from being lost or being triggered wrongly. To get the request identifier, it can be found via `PartnerAdLoadRequest.identifier`\n\n    \u003e [!WARNING]\n    \u003e This is sample code, don't use the code below for your own adapter. Please refer to the code in our actual adapters for real usage samples.\n\n    ```kotlin\n    /**\n     * A map of Chartboost Mediation's listeners for the corresponding load identifier.\n     */\n    private val listeners = mutableMapOf\u003cString, PartnerAdListener\u003e()\n\n    // During setup, clear the map.\n    override suspend fun setUp(\n        context: Context,\n        partnerConfiguration: PartnerConfiguration\n    ): Result\u003cUnit\u003e {\n        // ...\n        listeners.clear()\n        // ...\n    }\n\n    // During load, save the listener.\n    override suspend fun load(\n        context: Context,\n        request: PartnerAdLoadRequest,\n        partnerAdListener: PartnerAdListener\n    ): Result\u003cPartnerAd\u003e {\n        // ... \n        // Save the listener for later usage.\n        listeners[request.identifier] = partnerAdListener\n        // ...\n    }\n\n    // During show, get the listener from the map and invoke it where it will be used.\n    override suspend fun load(\n        context: Context,\n        request: PartnerAdLoadRequest,\n        partnerAdListener: PartnerAdListener\n    ): Result\u003cPartnerAd\u003e {\n        // ... \n         val listener = listeners[partnerAd.request.identifier]\n         val partnerSDKShowListener = object : ShowListener() {\n            override fun onAdImpression() {\n                PartnerLogController.log(DID_TRACK_IMPRESSION)\n                listener?.onPartnerAdImpression(partnerAd) ?: PartnerLogController.log(\n                    CUSTOM,\n                    \"Unable to fire onPartnerAdImpression for sample adapter.\"\n                )\n            }\n         }\n         // ...\n    }\n\n    // Once you have or done and destroyed an ad, remove the listener from the map.\n    override suspend fun invalidate(partnerAd: PartnerAd): Result\u003cPartnerAd\u003e {\n        // ...\n        listeners.remove(partnerAd.request.identifier)\n        // ...\n    }\n    ```\n\n8. Map your SDK's error codes with Chartboost Mediation's in a separate function and as relevant as possible.\n\n    \u003e [!WARNING]\n    \u003e This is sample code, don't use the code below for your own adapter. Please refer to the code in our actual adapters for real usage samples.\n\n    ```kotlin\n    /**\n     * Example usage from the Chartboost Monetization Adapter.\n     */\n    private fun getChartboostMediationError(error: CBError) = when (error) {\n        is StartError -\u003e {\n            when (error.code) {\n                StartError.Code.INVALID_CREDENTIALS -\u003e ChartboostMediationError.CM_INITIALIZATION_FAILURE_INVALID_CREDENTIALS\n                StartError.Code.NETWORK_FAILURE -\u003e ChartboostMediationError.CM_AD_SERVER_ERROR\n                else -\u003e ChartboostMediationError.CM_INITIALIZATION_FAILURE_UNKNOWN\n            }\n        }\n        is CacheError -\u003e {\n            when (error.code) {\n                CacheError.Code.INTERNET_UNAVAILABLE -\u003e ChartboostMediationError.CM_NO_CONNECTIVITY\n                CacheError.Code.NO_AD_FOUND -\u003e ChartboostMediationError.CM_LOAD_FAILURE_NO_FILL\n                CacheError.Code.SESSION_NOT_STARTED -\u003e ChartboostMediationError.CM_INITIALIZATION_FAILURE_UNKNOWN\n                CacheError.Code.NETWORK_FAILURE, CacheError.Code.SERVER_ERROR -\u003e ChartboostMediationError.CM_AD_SERVER_ERROR\n                else -\u003e ChartboostMediationError.CM_PARTNER_ERROR\n            }\n        }\n        is ShowError -\u003e {\n            when (error.code) {\n                ShowError.Code.INTERNET_UNAVAILABLE -\u003e ChartboostMediationError.CM_NO_CONNECTIVITY\n                ShowError.Code.NO_CACHED_AD -\u003e ChartboostMediationError.CM_SHOW_FAILURE_AD_NOT_READY\n                ShowError.Code.SESSION_NOT_STARTED -\u003e ChartboostMediationError.CM_SHOW_FAILURE_NOT_INITIALIZED\n                else -\u003e ChartboostMediationError.CM_PARTNER_ERROR\n            }\n        }\n        else -\u003e ChartboostMediationError.CM_UNKNOWN_ERROR\n    }\n    ```\n\n9. Convert requested Chartboost Mediation banner sizes to those with your SDK banner sizes.\n\n    \u003e [!WARNING]\n    \u003e This is sample code, don't use the code below for your own adapter. Please refer to the code in our actual adapters for real usage samples.\n\n    ```kotlin\n    /**\n     * Map Chartboost Mediation's banner sizes to the reference SDK's supported sizes.\n     *\n     * @param size The Chartboost Mediation banner [Size]\n     *\n     * @return The reference SDK's equivalent [ReferenceBanner.Size].\n     */\n    private fun chartboostMediationToReferenceBannerSize(size: Size?): ReferenceBanner.Size {\n        return size?.height?.let {\n            when {\n                it in 50 until 90 -\u003e ReferenceBanner.Size.BANNER\n                it in 90 until 250 -\u003e ReferenceBanner.Size.LEADERBOARD\n                it \u003e= 250 -\u003e ReferenceBanner.Size.MEDIUM_RECTANGLE\n                else -\u003e ReferenceBanner.Size.BANNER\n            }\n        } ?: ReferenceBanner.Size.BANNER\n    }\n    ```\n\n10. Use the currently supported Chartboost Mediation SDK's gradle and Kotlin version. Any higher gradle \u0026 Kotlin versions are currently not supported.\n\n    ```text\n    Current Gradle Version: 7.6.0\n    Current Kotlin Version: 1.7.20\n    ```\n\n## Contributions\n\nWe are committed to a fully transparent development process and highly appreciate any contributions. Our team regularly monitors and investigates all submissions for the inclusion in our official adapter releases.\n\nPlease refer to our [CONTRIBUTING](https://github.com/ChartBoost/chartboost-mediation-android-adapter-reference/blob/main/CONTRIBUTING.md) file for more information on how to contribute.\n\n## License\n\nPlease refer to our [LICENSE](https://github.com/ChartBoost/chartboost-mediation-android-adapter-reference/blob/main/LICENSE.md) file for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchartboost%2Fchartboost-mediation-android-adapter-reference","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchartboost%2Fchartboost-mediation-android-adapter-reference","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchartboost%2Fchartboost-mediation-android-adapter-reference/lists"}