Skip to content

Commit decf1a4

Browse files
authored
Merge pull request #59 from defold/mediation
Mediation support for android (except Chartboost)
2 parents 151beb7 + beee6b1 commit decf1a4

11 files changed

Lines changed: 938 additions & 26 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ builtins
1313
/debug.keystore.pass.txt
1414
/.editor_settings
1515
/.vscode
16+
*.eclipse.buildship.core.prefs

docs/index.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ The extension can be configured by adding the following fields to `game.project`
2828
[admob]
2929
app_id_ios = ca-app-pub-3940256099942544~1458002511
3030
app_id_android = ca-app-pub-3940256099942544~3347511713
31+
test_ads_in_debug = 1
3132
app_open_android = ca-app-pub-3940256099942544/9257395921
3233
app_open_ios = ca-app-pub-3940256099942544/5575463023
3334
ios_tracking_usage_description = Your data will be used to provide you a better and personalized ad experience.
@@ -39,6 +40,9 @@ This is your iOS AdMob app ID. An app ID is a unique ID number assigned to your
3940
### app_id_android
4041
This is your Android AdMob app ID. An app ID is a unique ID number assigned to your apps when they're added to AdMob. The app ID is used to identify your apps.
4142

43+
### test_ads_in_debug
44+
Android only. When set to `1`, the extension enables test ads in non-release builds.
45+
4246
### app_open_android
4347
Ad unit to use for App Open ads on Android. If this value is set App Open Ads will be shown when the app is brought to the foreground.
4448

@@ -52,6 +56,17 @@ Before requesting the unique IDFA string for a device on iOS 14 the application
5256
Apple documentation: https://developer.apple.com/documentation/apptrackingtransparency?language=objc
5357

5458

59+
## Mediation (Android)
60+
61+
For now mediation is supported on Android only. To enable it:
62+
63+
- Enable the adapters you need in the `[admob]` section of `game.project` (for example `unity_android = 1`).
64+
- Follow [each network’s official mediation guide](https://developers.google.com/admob/android/mediation/applovin) end-to-end. There is no partial “adapter added but not initialized” state.
65+
- You must use your own ad unit IDs. Google’s demo IDs only show Google ads and won’t exercise mediation.
66+
- If something is missing in the dashboard configuration, there may be no logs or Ad Inspector hints; when it is correct it simply reports as working.
67+
- For testing the AdMob network, set `admob.test_ads_in_debug = 1` to mark the device as a test device in debug builds.
68+
- The extension supports all officially supported adapters, except for Chartboost.
69+
5570
## Usage
5671

5772
### Setup

extension-admob/ext.properties

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[admob]
2-
group = Runtime
32
title = AdMob
3+
group = Runtime
44
help = Settings for AdMob extension
55

66
app_id_ios.type = string
@@ -9,9 +9,72 @@ app_id_ios.label = App ID iOS
99
app_id_android.type = string
1010
app_id_android.label = App ID Android
1111

12+
test_ads_in_debug.type = bool
13+
test_ads_in_debug.label = Testable In Debug
14+
1215
app_open_android.type = string
1316

1417
app_open_ios.type = string
1518
app_open_ios.label = App Open iOS
1619

1720
ios_tracking_usage_description.type = string
21+
22+
applovin_android.type = bool
23+
applovin_android.label = AppLovin Android
24+
applovin_android.private = 1
25+
26+
dt_exchange_android.type = bool
27+
dt_exchange_android.label = DT Exchange Android
28+
dt_exchange_android.private = 1
29+
30+
imobile_android.type = bool
31+
imobile_android.label = i-mobile Android
32+
imobile_android.private = 1
33+
34+
inmobi_android.type = bool
35+
inmobi_android.label = InMobi Android
36+
inmobi_android.private = 1
37+
38+
ironsource_android.type = bool
39+
ironsource_android.label = ironSource Android
40+
ironsource_android.private = 1
41+
42+
liftoff_android.type = bool
43+
liftoff_android.label = Liftoff Monetize (Vungle) Android
44+
liftoff_android.private = 1
45+
46+
line_android.type = bool
47+
line_android.label = Line Ads Android
48+
line_android.private = 1
49+
50+
maio_android.type = bool
51+
maio_android.label = maio Android
52+
maio_android.private = 1
53+
54+
meta_android.type = bool
55+
meta_android.label = Meta Android
56+
meta_android.private = 1
57+
58+
mintegral_android.type = bool
59+
mintegral_android.label = Mintegral Android
60+
mintegral_android.private = 1
61+
62+
moloco_android.type = bool
63+
moloco_android.label = Moloco Android
64+
moloco_android.private = 1
65+
66+
mytarget_android.type = bool
67+
mytarget_android.label = MyTarget Android
68+
mytarget_android.private = 1
69+
70+
pangle_android.type = bool
71+
pangle_android.label = Pangle Android
72+
pangle_android.private = 1
73+
74+
pubmatic_android.type = bool
75+
pubmatic_android.label = PubMatic Android
76+
pubmatic_android.private = 1
77+
78+
unity_android.type = bool
79+
unity_android.label = Unity Ads Android
80+
unity_android.private = 1
Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,98 @@
1+
// Auto-generated by updater/android.py. Do not edit by hand.
12
repositories {
23
mavenCentral()
4+
google()
5+
{{#admob.chartboost_android}}
6+
maven { url 'https://cboost.jfrog.io/artifactory/chartboost-ads/' }
7+
{{/admob.chartboost_android}}
8+
{{#admob.imobile_android}}
9+
maven { url 'https://imobile.github.io/adnw-sdk-android'}
10+
{{/admob.imobile_android}}
11+
{{#admob.ironsource_android}}
12+
maven { url 'https://android-sdk.is.com/'}
13+
{{/admob.ironsource_android}}
14+
{{#admob.maio_android}}
15+
maven { url 'https://imobile-maio.github.io/maven'}
16+
{{/admob.maio_android}}
17+
{{#admob.mintegral_android}}
18+
maven { url 'https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea'}
19+
{{/admob.mintegral_android}}
20+
{{#admob.pangle_android}}
21+
maven { url 'https://artifact.bytedance.com/repository/pangle/'}
22+
{{/admob.pangle_android}}
23+
{{#admob.pubmatic_android}}
24+
maven { url 'https://repo.pubmatic.com/artifactory/public-repos'}
25+
{{/admob.pubmatic_android}}
326
}
427

528
dependencies {
6-
// https://developers.google.com/admob/android/quick-start#example_app-level_buildgradle_excerpt
7-
implementation "com.google.android.gms:play-services-ads:24.5.0"
29+
implementation "com.google.android.gms:play-services-ads:24.9.0"
830
implementation "androidx.lifecycle:lifecycle-common:2.8.3"
931
implementation "androidx.lifecycle:lifecycle-process:2.8.3"
1032
annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.8.3"
33+
34+
{{#admob.applovin_android}}
35+
implementation 'com.google.ads.mediation:applovin:13.5.1.0'
36+
{{/admob.applovin_android}}
37+
38+
{{#admob.chartboost_android}}
39+
implementation 'com.google.ads.mediation:chartboost:9.11.0.0'
40+
{{/admob.chartboost_android}}
41+
42+
{{#admob.dt_exchange_android}}
43+
implementation 'com.google.ads.mediation:fyber:8.4.2.0'
44+
{{/admob.dt_exchange_android}}
45+
46+
{{#admob.imobile_android}}
47+
implementation 'com.google.ads.mediation:imobile:2.3.2.1'
48+
{{/admob.imobile_android}}
49+
50+
{{#admob.inmobi_android}}
51+
implementation 'com.google.ads.mediation:inmobi:11.1.0.0'
52+
{{/admob.inmobi_android}}
53+
54+
{{#admob.ironsource_android}}
55+
implementation 'com.google.ads.mediation:ironsource:9.2.0.0'
56+
{{/admob.ironsource_android}}
57+
58+
{{#admob.liftoff_android}}
59+
implementation 'com.google.ads.mediation:vungle:7.6.3.0'
60+
{{/admob.liftoff_android}}
61+
62+
{{#admob.line_android}}
63+
implementation 'com.google.ads.mediation:line:3.0.0.0'
64+
{{/admob.line_android}}
65+
66+
{{#admob.maio_android}}
67+
implementation 'com.google.ads.mediation:maio:2.0.8.0'
68+
{{/admob.maio_android}}
69+
70+
{{#admob.meta_android}}
71+
implementation 'com.google.ads.mediation:facebook:6.21.0.0'
72+
{{/admob.meta_android}}
73+
74+
{{#admob.mintegral_android}}
75+
implementation 'com.google.ads.mediation:mintegral:17.0.61.0'
76+
{{/admob.mintegral_android}}
77+
78+
{{#admob.moloco_android}}
79+
implementation 'com.google.ads.mediation:moloco:4.4.0.0'
80+
{{/admob.moloco_android}}
81+
82+
{{#admob.mytarget_android}}
83+
implementation 'com.google.ads.mediation:mytarget:5.27.4.0'
84+
{{/admob.mytarget_android}}
85+
86+
{{#admob.pangle_android}}
87+
implementation 'com.google.ads.mediation:pangle:7.8.5.2.0'
88+
{{/admob.pangle_android}}
89+
90+
{{#admob.pubmatic_android}}
91+
implementation 'com.google.ads.mediation:pubmatic:4.11.0.1'
92+
{{/admob.pubmatic_android}}
93+
94+
{{#admob.unity_android}}
95+
implementation 'com.unity3d.ads:unity-ads:4.16.5'
96+
implementation 'com.google.ads.mediation:unity:4.16.5.0'
97+
{{/admob.unity_android}}
1198
}
Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,67 @@
1+
# Auto-generated by updater/ios.py. Do not edit by hand.
12
platform :ios, '12.0'
2-
pod 'Google-Mobile-Ads-SDK', '12.9.0'
3+
pod 'Google-Mobile-Ads-SDK', '12.14.0'
4+
5+
{{#admob.applovin_ios}}
6+
pod 'GoogleMobileAdsMediationAppLovin'
7+
{{/admob.applovin_ios}}
8+
9+
{{#admob.chartboost_ios}}
10+
pod 'GoogleMobileAdsMediationChartboost'
11+
{{/admob.chartboost_ios}}
12+
13+
{{#admob.dt_exchange_ios}}
14+
pod 'GoogleMobileAdsMediationFyber'
15+
{{/admob.dt_exchange_ios}}
16+
17+
{{#admob.imobile_ios}}
18+
pod 'GoogleMobileAdsMediationIMobile'
19+
{{/admob.imobile_ios}}
20+
21+
{{#admob.inmobi_ios}}
22+
pod 'GoogleMobileAdsMediationInMobi'
23+
{{/admob.inmobi_ios}}
24+
25+
{{#admob.ironsource_ios}}
26+
pod 'GoogleMobileAdsMediationIronSource'
27+
{{/admob.ironsource_ios}}
28+
29+
{{#admob.liftoff_ios}}
30+
pod 'GoogleMobileAdsMediationVungle'
31+
{{/admob.liftoff_ios}}
32+
33+
{{#admob.line_ios}}
34+
pod 'GoogleMobileAdsMediationLine'
35+
{{/admob.line_ios}}
36+
37+
{{#admob.maio_ios}}
38+
pod 'GoogleMobileAdsMediationMaio'
39+
{{/admob.maio_ios}}
40+
41+
{{#admob.meta_ios}}
42+
pod 'GoogleMobileAdsMediationFacebook'
43+
{{/admob.meta_ios}}
44+
45+
{{#admob.mintegral_ios}}
46+
pod 'GoogleMobileAdsMediationMintegral'
47+
{{/admob.mintegral_ios}}
48+
49+
{{#admob.moloco_ios}}
50+
pod 'GoogleMobileAdsMediationMoloco'
51+
{{/admob.moloco_ios}}
52+
53+
{{#admob.mytarget_ios}}
54+
pod 'GoogleMobileAdsMediationMyTarget'
55+
{{/admob.mytarget_ios}}
56+
57+
{{#admob.pangle_ios}}
58+
pod 'GoogleMobileAdsMediationPangle'
59+
{{/admob.pangle_ios}}
60+
61+
{{#admob.pubmatic_ios}}
62+
pod 'GoogleMobileAdsMediationPubMatic'
63+
{{/admob.pubmatic_ios}}
64+
65+
{{#admob.unity_ios}}
66+
pod 'GoogleMobileAdsMediationUnity'
67+
{{/admob.unity_ios}}

extension-admob/src/admob_android.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,16 @@ void Initialize_Ext(dmExtension::Params* params, const char* defoldUserAgent)
159159

160160
InitJNIMethods(env, cls);
161161

162+
bool enableTestAds = false;
163+
#ifdef DM_DEBUG
164+
enableTestAds = dmConfigFile::GetInt(params->m_ConfigFile, "admob.test_ads_in_debug", 0) != 0;
165+
#endif
166+
162167
const char* appOpenAdUnitId = dmConfigFile::GetString(params->m_ConfigFile, "admob.app_open_android", 0);
163168
jstring jappOpenAdUnitId = env->NewStringUTF(appOpenAdUnitId);
164169
jstring jdefoldUserAgent = env->NewStringUTF(defoldUserAgent);
165-
jmethodID jni_constructor = env->GetMethodID(cls, "<init>", "(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;)V");
166-
g_admob.m_AdmobJNI = env->NewGlobalRef(env->NewObject(cls, jni_constructor, threadAttacher.GetActivity()->clazz, jappOpenAdUnitId, jdefoldUserAgent));
170+
jmethodID jni_constructor = env->GetMethodID(cls, "<init>", "(Landroid/app/Activity;Ljava/lang/String;Ljava/lang/String;Z)V");
171+
g_admob.m_AdmobJNI = env->NewGlobalRef(env->NewObject(cls, jni_constructor, threadAttacher.GetActivity()->clazz, jappOpenAdUnitId, jdefoldUserAgent, (jboolean)enableTestAds));
167172
env->DeleteLocalRef(jappOpenAdUnitId);
168173
env->DeleteLocalRef(jdefoldUserAgent);
169174
}

0 commit comments

Comments
 (0)