emi-indo-cordova-plugin-admob 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/capacitor-hook-admob-ids.js +148 -0
- package/example/capacitor.config.json +12 -0
- package/example/config.xml +11 -0
- package/example/package.json +30 -0
- package/example/www/js/bannerAd.js +5 -0
- package/example/www/js/deviceready.js +8 -1
- package/package.json +7 -3
- package/plugin.xml +1 -1
- package/.vscode/settings.json +0 -3
package/README.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
|
2
|
+
## New feature suggestion
|
3
|
+
> [!TIP]
|
4
|
+
> - Funding is needed to add a new feature of native ads that can be scrolled within html content elements.
|
5
|
+
> - I will not settle how much funding is needed to add this feature.
|
6
|
+
|
2
7
|
|
3
8
|
# emi-indo-cordova-plugin-admob
|
4
9
|
Cordova Plugin Admob Android and IOS
|
@@ -11,11 +16,15 @@
|
|
11
16
|
### User Messaging Platform (UMP IOS: 2.6.0) [Release Notes:](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/privacy/download)
|
12
17
|
### IAB Europe Transparency & Consent Framework (CPM: 2.2.0)
|
13
18
|
|
14
|
-
|
15
19
|
## New example
|
16
20
|
- https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/tree/main/example/www
|
17
21
|
|
18
22
|
|
23
|
+
## Documentation Capacitor example
|
24
|
+
- [Documentation Capacitor example: ](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/discussions/29)
|
25
|
+
|
26
|
+
|
27
|
+
|
19
28
|
## Minimum Cordova Engines
|
20
29
|
- cordova-android version = 12.0.0
|
21
30
|
- cordova-ios version = 7.0.0
|
@@ -333,7 +342,7 @@ document.addEventListener('on.appOpenAd.loaded', () => {
|
|
333
342
|
</pre>
|
334
343
|
</details>
|
335
344
|
|
336
|
-
- [FULL AppOpenAd basic:](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/
|
345
|
+
- [FULL AppOpenAd basic:](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/Example/www/js/appOpenAd.js)
|
337
346
|
|
338
347
|
|
339
348
|
|
@@ -436,7 +445,7 @@ console.log("Collapsible Status: " + event.collapsible);
|
|
436
445
|
</pre>
|
437
446
|
</details>
|
438
447
|
|
439
|
-
[FULL Banner basic:](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/
|
448
|
+
[FULL Banner basic:](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/Example/www/js/bannerAd.js)
|
440
449
|
|
441
450
|
|
442
451
|
## Interstitial ADS
|
@@ -499,7 +508,7 @@ document.addEventListener('on.interstitial.dismissed', () => {
|
|
499
508
|
</details>
|
500
509
|
|
501
510
|
|
502
|
-
[FULL Interstitial basic: ](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/
|
511
|
+
[FULL Interstitial basic: ](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/Example/www/js/interstitialAd.js)
|
503
512
|
|
504
513
|
|
505
514
|
|
@@ -628,7 +637,7 @@ document.addEventListener('on.rewarded.dismissed', () => {
|
|
628
637
|
</pre>
|
629
638
|
</details>
|
630
639
|
|
631
|
-
[FULL Rewarded basic: ](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/
|
640
|
+
[FULL Rewarded basic: ](https://github.com/EMI-INDO/emi-indo-cordova-plugin-admob/blob/main/Example/www/js/rewardedAd.js)
|
632
641
|
|
633
642
|
|
634
643
|
|
@@ -0,0 +1,148 @@
|
|
1
|
+
const fs = require('fs');
|
2
|
+
const path = require('path');
|
3
|
+
const plist = require('plist');
|
4
|
+
|
5
|
+
const configPath = path.join(process.cwd(), 'capacitor.config.json');
|
6
|
+
const androidPlatformPath = path.join(process.cwd(), 'android');
|
7
|
+
const iosPlatformPath = path.join(process.cwd(), 'ios');
|
8
|
+
const pluginPath = path.join(process.cwd(), 'node_modules', 'emi-indo-cordova-plugin-admob', 'plugin.xml');
|
9
|
+
const infoPlistPath = path.join(process.cwd(), 'ios', 'App', 'App', 'Info.plist');
|
10
|
+
|
11
|
+
|
12
|
+
function fileExists(filePath) {
|
13
|
+
return fs.existsSync(filePath);
|
14
|
+
}
|
15
|
+
|
16
|
+
|
17
|
+
function getAdMobConfig() {
|
18
|
+
if (!fileExists(configPath)) {
|
19
|
+
throw new Error('capacitor.config.json not found. Ensure this is a Capacitor project.');
|
20
|
+
}
|
21
|
+
|
22
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
23
|
+
const admobConfig = config.plugins?.AdMob;
|
24
|
+
|
25
|
+
if (!admobConfig || !admobConfig.APP_ID_ANDROID || !admobConfig.APP_ID_IOS) {
|
26
|
+
throw new Error('AdMob configuration is missing in capacitor.config.json. Ensure APP_ID_ANDROID and APP_ID_IOS are defined.');
|
27
|
+
}
|
28
|
+
|
29
|
+
return {
|
30
|
+
APP_ID_ANDROID: admobConfig.APP_ID_ANDROID,
|
31
|
+
APP_ID_IOS: admobConfig.APP_ID_IOS,
|
32
|
+
};
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
function updatePluginXml(admobConfig) {
|
37
|
+
if (!fileExists(pluginPath)) {
|
38
|
+
console.error('plugin.xml not found. Ensure the plugin is installed.');
|
39
|
+
return;
|
40
|
+
}
|
41
|
+
|
42
|
+
let pluginContent = fs.readFileSync(pluginPath, 'utf8');
|
43
|
+
|
44
|
+
pluginContent = pluginContent
|
45
|
+
.replace(/<preference name="APP_ID_ANDROID" default=".*?" \/>/, `<preference name="APP_ID_ANDROID" default="${admobConfig.APP_ID_ANDROID}" />`)
|
46
|
+
.replace(/<preference name="APP_ID_IOS" default=".*?" \/>/, `<preference name="APP_ID_IOS" default="${admobConfig.APP_ID_IOS}" />`);
|
47
|
+
|
48
|
+
fs.writeFileSync(pluginPath, pluginContent, 'utf8');
|
49
|
+
console.log('AdMob IDs successfully updated in plugin.xml');
|
50
|
+
}
|
51
|
+
|
52
|
+
|
53
|
+
function updateInfoPlist(admobConfig) {
|
54
|
+
if (!fileExists(infoPlistPath)) {
|
55
|
+
console.error('Info.plist not found. Ensure you have built the iOS project.');
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
|
59
|
+
const plistContent = fs.readFileSync(infoPlistPath, 'utf8');
|
60
|
+
const plistData = plist.parse(plistContent);
|
61
|
+
|
62
|
+
|
63
|
+
plistData.GADApplicationIdentifier = admobConfig.APP_ID_IOS;
|
64
|
+
|
65
|
+
|
66
|
+
plistData.NSUserTrackingUsageDescription = 'This identifier will be used to deliver personalized ads to you.';
|
67
|
+
|
68
|
+
|
69
|
+
plistData.GADDelayAppMeasurementInit = true;
|
70
|
+
|
71
|
+
// https://developers.google.com/admob/ios/quick-start
|
72
|
+
plistData.SKAdNetworkItems = [
|
73
|
+
{ SKAdNetworkIdentifier: 'cstr6suwn9.skadnetwork' }, // Google
|
74
|
+
{ SKAdNetworkIdentifier: '4fzdc2evr5.skadnetwork' }, // Aarki
|
75
|
+
{ SKAdNetworkIdentifier: '2fnua5tdw4.skadnetwork' }, // Adform
|
76
|
+
{ SKAdNetworkIdentifier: 'ydx93a7ass.skadnetwork' }, // Adikteev
|
77
|
+
{ SKAdNetworkIdentifier: 'p78axxw29g.skadnetwork' }, // Amazon
|
78
|
+
{ SKAdNetworkIdentifier: 'v72qych5uu.skadnetwork' }, // Appier
|
79
|
+
{ SKAdNetworkIdentifier: 'ludvb6z3bs.skadnetwork' }, // Applovin
|
80
|
+
{ SKAdNetworkIdentifier: 'cp8zw746q7.skadnetwork' }, // Arpeely
|
81
|
+
{ SKAdNetworkIdentifier: '3sh42y64q3.skadnetwork' }, // Basis
|
82
|
+
{ SKAdNetworkIdentifier: 'c6k4g5qg8m.skadnetwork' }, // Beeswax.io
|
83
|
+
{ SKAdNetworkIdentifier: 's39g8k73mm.skadnetwork' }, // Bidease
|
84
|
+
{ SKAdNetworkIdentifier: '3qy4746246.skadnetwork' }, // Bigabid
|
85
|
+
{ SKAdNetworkIdentifier: 'hs6bdukanm.skadnetwork' }, // Criteo
|
86
|
+
{ SKAdNetworkIdentifier: 'mlmmfzh3r3.skadnetwork' }, // Digital Turbine DSP
|
87
|
+
{ SKAdNetworkIdentifier: 'v4nxqhlyqp.skadnetwork' }, // i-mobile
|
88
|
+
{ SKAdNetworkIdentifier: 'wzmmz9fp6w.skadnetwork' }, // InMobi
|
89
|
+
{ SKAdNetworkIdentifier: 'su67r6k2v3.skadnetwork' }, // ironSource Ads
|
90
|
+
{ SKAdNetworkIdentifier: 'yclnxrl5pm.skadnetwork' }, // Jampp
|
91
|
+
{ SKAdNetworkIdentifier: '7ug5zh24hu.skadnetwork' }, // Liftoff
|
92
|
+
{ SKAdNetworkIdentifier: 'gta9lk7p23.skadnetwork' }, // Liftoff Monetize
|
93
|
+
{ SKAdNetworkIdentifier: 'vutu7akeur.skadnetwork' }, // LINE
|
94
|
+
{ SKAdNetworkIdentifier: 'y5ghdn5j9k.skadnetwork' }, // Mediaforce
|
95
|
+
{ SKAdNetworkIdentifier: 'v9wttpbfk9.skadnetwork' }, // Meta (1 of 2)
|
96
|
+
{ SKAdNetworkIdentifier: 'n38lu8286q.skadnetwork' }, // Meta (2 of 2)
|
97
|
+
{ SKAdNetworkIdentifier: '47vhws6wlr.skadnetwork' }, // MicroAd
|
98
|
+
{ SKAdNetworkIdentifier: 'kbd757ywx3.skadnetwork' }, // Mintegral / Mobvista
|
99
|
+
{ SKAdNetworkIdentifier: '9t245vhmpl.skadnetwork' }, // Moloco
|
100
|
+
{ SKAdNetworkIdentifier: 'a2p9lx4jpn.skadnetwork' }, // Opera
|
101
|
+
{ SKAdNetworkIdentifier: '22mmun2rn5.skadnetwork' }, // Pangle
|
102
|
+
{ SKAdNetworkIdentifier: '4468km3ulz.skadnetwork' }, // Realtime Technologies GmbH
|
103
|
+
{ SKAdNetworkIdentifier: '2u9pt9hc89.skadnetwork' }, // Remerge
|
104
|
+
{ SKAdNetworkIdentifier: '8s468mfl3y.skadnetwork' }, // RTB House
|
105
|
+
{ SKAdNetworkIdentifier: 'ppxm28t8ap.skadnetwork' }, // Smadex
|
106
|
+
{ SKAdNetworkIdentifier: 'uw77j35x4d.skadnetwork' }, // The Trade Desk
|
107
|
+
{ SKAdNetworkIdentifier: 'pwa73g5rt2.skadnetwork' }, // Tremor
|
108
|
+
{ SKAdNetworkIdentifier: '578prtvx9j.skadnetwork' }, // Unicorn
|
109
|
+
{ SKAdNetworkIdentifier: '4dzt52r2t5.skadnetwork' }, // Unity Ads
|
110
|
+
{ SKAdNetworkIdentifier: 'tl55sbb4fm.skadnetwork' }, // Verve
|
111
|
+
{ SKAdNetworkIdentifier: 'e5fvkxwrpn.skadnetwork' }, // Yahoo!
|
112
|
+
{ SKAdNetworkIdentifier: '8c4e2ghe7u.skadnetwork' }, // Yahoo! Japan Ads
|
113
|
+
{ SKAdNetworkIdentifier: '3rd42ekr43.skadnetwork' }, // YouAppi
|
114
|
+
{ SKAdNetworkIdentifier: '3qcr597p9d.skadnetwork' }, // Zucks
|
115
|
+
];
|
116
|
+
|
117
|
+
|
118
|
+
const updatedPlistContent = plist.build(plistData);
|
119
|
+
fs.writeFileSync(infoPlistPath, updatedPlistContent, 'utf8');
|
120
|
+
console.log('AdMob IDs and additional configurations successfully updated in Info.plist');
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
try {
|
125
|
+
|
126
|
+
if (!fileExists(configPath)) {
|
127
|
+
throw new Error('capacitor.config.json not found. Skipping setup.');
|
128
|
+
}
|
129
|
+
|
130
|
+
if (!fileExists(androidPlatformPath) && !fileExists(iosPlatformPath)) {
|
131
|
+
throw new Error('Neither Android nor iOS platforms are found. Ensure platforms are added to your Capacitor project.');
|
132
|
+
}
|
133
|
+
|
134
|
+
|
135
|
+
const admobConfig = getAdMobConfig();
|
136
|
+
|
137
|
+
|
138
|
+
if (fileExists(androidPlatformPath)) {
|
139
|
+
updatePluginXml(admobConfig);
|
140
|
+
}
|
141
|
+
|
142
|
+
|
143
|
+
if (fileExists(iosPlatformPath)) {
|
144
|
+
updateInfoPlist(admobConfig);
|
145
|
+
}
|
146
|
+
} catch (error) {
|
147
|
+
console.error(error.message);
|
148
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"appId": "io.cordova.hellocordova",
|
3
|
+
"appName": "HelloCordova",
|
4
|
+
"webDir": "www",
|
5
|
+
"bundledWebRuntime": false,
|
6
|
+
"plugins": {
|
7
|
+
"AdMob": {
|
8
|
+
"APP_ID_ANDROID": "ca-app-pub-3940256099942544~3347511713",
|
9
|
+
"APP_ID_IOS": "ca-app-pub-3940256099942544~1458002511"
|
10
|
+
}
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version='1.0' encoding='utf-8'?>
|
2
|
+
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
3
|
+
<name>HelloCordova</name>
|
4
|
+
<description>Sample Apache Cordova App</description>
|
5
|
+
<author email="dev@cordova.apache.org" href="https://cordova.apache.org">
|
6
|
+
Apache Cordova Team
|
7
|
+
</author>
|
8
|
+
<content src="index.html" />
|
9
|
+
<allow-intent href="http://*/*" />
|
10
|
+
<allow-intent href="https://*/*" />
|
11
|
+
</widget>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
{
|
2
|
+
"name": "io.cordova.hellocordova",
|
3
|
+
"displayName": "HelloCordova",
|
4
|
+
"version": "1.0.0",
|
5
|
+
"description": "A sample Apache Cordova application that responds to the deviceready event.",
|
6
|
+
"main": "index.js",
|
7
|
+
"scripts": {
|
8
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
9
|
+
"update-admob": "node node_modules/emi-indo-cordova-plugin-admob/capacitor-hook-admob-ids.js"
|
10
|
+
},
|
11
|
+
"keywords": [
|
12
|
+
"ecosystem:cordova"
|
13
|
+
],
|
14
|
+
"author": "Apache Cordova Team",
|
15
|
+
"license": "Apache-2.0",
|
16
|
+
"devDependencies": {
|
17
|
+
"emi-indo-cordova-plugin-admob": "^1.6.1"
|
18
|
+
},
|
19
|
+
"cordova": {
|
20
|
+
"plugins": {
|
21
|
+
"emi-indo-cordova-plugin-admob": {}
|
22
|
+
}
|
23
|
+
},
|
24
|
+
"dependencies": {
|
25
|
+
"@capacitor/android": "^6.2.0",
|
26
|
+
"@capacitor/ios": "^6.2.0",
|
27
|
+
"@capacitor/cli": "^6.2.0",
|
28
|
+
"@capacitor/core": "^6.2.0"
|
29
|
+
}
|
30
|
+
}
|
@@ -10,12 +10,17 @@ function loadBanner() {
|
|
10
10
|
|
11
11
|
if (typeof cordova !== 'undefined') {
|
12
12
|
|
13
|
+
if (!isPlatformIOS){
|
14
|
+
|
13
15
|
cordova.plugins.emiAdmobPlugin.styleBannerAd({
|
14
16
|
isOverlapping: true,
|
15
17
|
overlappingHeight: 5,
|
16
18
|
padding: 0,
|
17
19
|
margins: 0
|
18
20
|
});
|
21
|
+
|
22
|
+
}
|
23
|
+
|
19
24
|
|
20
25
|
cordova.plugins.emiAdmobPlugin.loadBannerAd({
|
21
26
|
adUnitId: Banner_ID, //Banner_ID,
|
@@ -20,7 +20,7 @@ otherwise you may be subject to ad serving restrictions,
|
|
20
20
|
if it happens often, it is possible that your admob account will be permanently disabled.
|
21
21
|
*/
|
22
22
|
|
23
|
-
|
23
|
+
let isPlatformIOS = false;
|
24
24
|
|
25
25
|
if (window.cordova.platformId === 'ios') {
|
26
26
|
|
@@ -30,6 +30,8 @@ if (window.cordova.platformId === 'ios') {
|
|
30
30
|
Rewarded_ID = 'ca-app-pub-3940256099942544/1712485313';
|
31
31
|
Rewarded_Interstitial_ID = 'ca-app-pub-3940256099942544/6978759866';
|
32
32
|
|
33
|
+
isPlatformIOS = true;
|
34
|
+
|
33
35
|
} else {
|
34
36
|
// Assume Android
|
35
37
|
App_Open_ID = 'ca-app-pub-3940256099942544/9257395921';
|
@@ -74,6 +76,11 @@ document.addEventListener("deviceready", function () {
|
|
74
76
|
|
75
77
|
|
76
78
|
|
79
|
+
if (isPlatformIOS){
|
80
|
+
|
81
|
+
cordova.plugins.emiAdmobPlugin.requestIDFA(); // requestTrackingAuthorization
|
82
|
+
|
83
|
+
}
|
77
84
|
|
78
85
|
|
79
86
|
// AdMob Sdk initialize
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "emi-indo-cordova-plugin-admob",
|
3
|
-
"version": "1.6.
|
4
|
-
"description": "Cordova Plugin Admob Android IOS",
|
3
|
+
"version": "1.6.2",
|
4
|
+
"description": "Cordova Plugin Admob Android IOS Support Capacitor",
|
5
5
|
"cordova": {
|
6
6
|
"id": "emi-indo-cordova-plugin-admob",
|
7
7
|
"platforms": [
|
@@ -20,7 +20,11 @@
|
|
20
20
|
"admob-plus-cordova",
|
21
21
|
"cordova-admob-pro",
|
22
22
|
"cordova-admob-ios",
|
23
|
-
"cordova-admob-android"
|
23
|
+
"cordova-admob-android",
|
24
|
+
"capacitor",
|
25
|
+
"capacitor-admob",
|
26
|
+
"capacitor-android",
|
27
|
+
"capacitor-ios"
|
24
28
|
],
|
25
29
|
"author": "EMI INDO",
|
26
30
|
"email": "cordova.c3addon@gmail.com",
|
package/plugin.xml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
2
2
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
3
|
-
id="emi-indo-cordova-plugin-admob" version="1.6.
|
3
|
+
id="emi-indo-cordova-plugin-admob" version="1.6.2">
|
4
4
|
|
5
5
|
<name>emiAdmobPlugin</name>
|
6
6
|
<description>Cordova Plugin Admob Android IOS</description>
|
package/.vscode/settings.json
DELETED