A module for Godot Engine that provides a selection of functionalities
from Google AdMob, Google Analytics and Consent Library (GDPR)
This module is compatible with Godot 3.1.1 (AndroidX Mod) and Android v19+
- Godot Engine π‘ https://github.com/godotengine/godot
- AndroidX Mod π‘ https://github.com/SimBotBiz/Godot-Engine-for-AndroidX
- Google AdMob π‘ https://developers.google.com/admob/android/quick-start
- Google AdMob (Firebase) π‘ https://firebase.google.com/docs/admob/android/quick-start
- Google Analytics (Firebase) π‘ https://firebase.google.com/docs/analytics
- Consent Library π‘ https://developers.google.com/admob/android/eu-consent
π§ Only Rewarded Ad format is implemented, other formats will come next (no ETA) π§
β This project is in alpha state, use at your own risk, you have been warned! β
If you need something more complete and stable please check this awesome module
from Kloder Games -> https://github.com/kloder-games/godot-admob
-
Support for Play Services Ads (AdMob) v18.3.0
https://developers.google.com/admob/android/rel-notes/#18.3.0 -
Integration with Consent Library v1.0.7
https://developers.google.com/admob/android/eu-consent -
Targeting configuration via RequestConfiguration
https://developers.google.com/admob/android/targeting -
Support for the newest Rewarded Ads API
https://developers.google.com/admob/android/rewarded-ads
To use this module you need to build your own custom template for Android.
-
Get and setup the Godot Engine AndroidX Mod
https://github.com/SimBotBiz/Godot-Engine-for-AndroidX -
Before going any further, I strongly advise to do a test build to be sure everything is working fine.
-
Clone or download this repo
-
Copy sbb_ads and sbb_cmn to the
modules\
folder of Godot Engine source -
If you want to use the Firebase Analytics service copy also sbb_firebase
and add your own google-services.json toplatform\android\java\
-
Check and edit configuration files:
-
modules\sbb_ads\config.py
You can enable or disable functionalities in the artifacts dictionary.
If you are using the Firebase module you should pick thefirebase-ads
over theplay-services-ads
-
modules\sbb_ads\play-services-ads\AndroidManifestChunk.xml
You need to put there your AdMob App ID -> (more infos) -
modules\sbb_firebase\config.py
Put your App ID (aka package_name) in ->env.android_add_default_config("applicationId 'my.app.id'")
this value must be the same of the one on your google-services.json
-
-
Rebuild the export templates
-
Use the export templates in your Godot App https://docs.godotengine.org/en/3.1/development/compiling/compiling_for_android.html#using-the-export-templates
-
Add the modules in the [android] section of your
project.godot
file[android] modules="org/godotengine/godot/SBBPlayServicesAds,org/godotengine/godot/SBBConsent"
A working Godot example is provided in the example folder of this repo,
if you want to play with it remember that you need to:
-
Update the paths for the export templates and the debug keystore.
You can do that easily editing the
export_presets.cfg
file:[preset.0.options] custom_package/debug="C:/my/path/to/android_debug.apk" custom_package/release="C:/my/path/to/android_release.apk" keystore/debug="C:/my/path/to/debug.keystore"
-
Use your Publisher Id in
ConsentTest.gd
var publisher_ids: Array = ["pub-0123456789012345"]
# Play Services Ads Init
#
# @param int instanceId
# @param Dictionary options a dictionary of options, available values are:
#
# - FORCE_TEST_DEVICE [bool] (true, false)
# Flag the device as a test device (or not), this will overwrite the
# default behavior (test device true if a debug build or runs on AVD).
# https://developers.google.com/admob/android/test-ads#enable_test_devices
#
# - USE_TEST_ADS [bool] (true, false)
# Provided ad UID will be replaced by the appropriate test UID,
# using these test ads gives a more consistent behavior,
# ads are always show, that's not true with only the test device flag.
# https://developers.google.com/admob/android/test-ads#sample_ad_units
#
# - NON_PERSONALIZED_ADS [bool] (true, false),
# This is what you need to set if using also the consent module!
# https://developers.google.com/admob/android/eu-consent#forward_consent_to_the_google_mobile_ads_sdk
#
# - TAG_FOR_CHILD_DIRECTED_TREATMENT [int] (1 = true, 0 = false, -1 = unspecified)
# https://developers.google.com/admob/android/targeting#child-directed_setting
#
# - TAG_FOR_UNDER_AGE_OF_CONSENT [int] (1 = true, 0 = false, -1 = unspecified)
# https://developers.google.com/admob/android/targeting#users_under_the_age_of_consent
#
# - MAX_AD_CONTENT_RATING [String] ('', 'G', 'PG', 'T', 'MA')
# https://developers.google.com/admob/android/targeting#ad_content_filtering
#
init(instanceId: int, options: Dictionary)
# Play Services Ads Init Callbacks
_on_initialization_complete()
_on_rewarded_ad_loaded()
_on_rewarded_ad_failed_to_loaded(error_code: int)
# Load Rewarded Ad
#
# @param String adUnitId ie ca-app-pub-3940256099942544/5224354917
#
loadRewardedAd(adUnitId)
# Load Rewarded Ad Callbacks
_on_rewarded_ad_loaded()
_on_rewarded_ad_failed_to_loaded(error_code: int)
# Show Rewarded Ad
#
showRewardedAd()
# Show Rewarded Ad Callbacks
_on_rewarded_ad_opened()
_on_rewarded_ad_closed()
_on_user_earned_reward(currency: String, amount: int)
_on_rewarded_ad_failed_to_show(error_code: int)
# Consent Library Init
#
# @param int instanceId
# @param Dictionary options a dictionary of options, available values are:
#
# - FORCE_TEST_DEVICE [bool] (true, false)
# Flag the device as a test device (or not), this will overwrite the
# default behavior (test device true if a debug build or runs on AVD).
# https://developers.google.com/admob/android/eu-consent#testing
#
# - DEBUG_GEOGRAPHY [String] ('DEBUG_GEOGRAPHY_DISABLED', 'DEBUG_GEOGRAPHY_EEA', 'DEBUG_GEOGRAPHY_NOT_EEA')
# https://developers.google.com/admob/android/eu-consent#testing
#
# - TAG_FOR_UNDER_AGE_OF_CONSENT [bool] (true, false)
# If a publisher is aware that the user is under the age of consent,
# all ad requests must set TFUA (Tag For Users under the Age of Consent in Europe).
# This setting takes effect for all future ad requests.
# Once the TFUA setting is enabled, the Google-rendered consent form will fail to load.
# https://developers.google.com/admob/android/eu-consent#users_under_the_age_of_consent
#
init(instanceId: int, options: Dictionary)
# Request Consent Info Update
#
# @param Array[String] publisherIds https://support.google.com/admob/answer/2784578
#
# If the consent information is successfully updated, the updated consent
# status and the request location are provided via the
# _on_consent_info_updated(String consentStatus, Boolean isRequestLocationInEeaOrUnknown) callback.
#
# The returned consentStatus may have the values listed below:
# - PERSONALIZED (The user has granted consent for personalized ads)
# - NON_PERSONALIZED (The user has granted consent for non-personalized ads)
# - UNKNOWN (The user has neither granted nor declined consent for personalized or non-personalized ads)
#
# If isRequestLocationInEeaOrUnknown is false, the user is not located in the European Economic Area and consent
# is not required under the EU User Consent Policy. You can make ad requests to the Google Mobile Ads SDK.
#
# If isRequestLocationInEeaOrUnknown is true:
# - If the returned ConsentStatus is PERSONALIZED or NON_PERSONALIZED,
# the user has already provided consent.
# You can now forward consent to the Google Mobile Ads SDK.
#
# - If the returned ConsentStatus is UNKNOWN, use collectConsent() to collect
# consent from the user.
#
# https://developers.google.com/admob/android/eu-consent#update_consent_status
#
requestConsentInfoUpdate(publisherIds: Array)
# Request Consent Info Update Callbacks
_on_consent_info_updated(consent_status: String, isrlin_eea_or_unknown: bool)
_on_failed_to_update_consent_info(error_description: String)
# Collect Consent
#
# @param String privacyUrl
# @param Dictionary options a dictionary of options, available values are:
#
# - PERSONALIZED_ADS [bool] (true, false)
# - NON_PERSONALIZED_ADS [bool] (true, false)
# - AD_FREE [bool] (true, false)
# https://developers.google.com/admob/android/eu-consent#google_rendered_consent_form
#
collectConsent(privacyUrl: String, options: Dictionary)
# Collect Consent Callbacks
_on_consent_form_loaded()
_on_consent_form_opened()
_on_consent_form_closed(consent_status: String, user_prefer_adfree: bool)
_on_consent_form_error(error_description: String)