@capacitor-community/admob 8.1.0 → 8.2.0
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 +129 -324
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/getcapacitor/community/admob/AdMob.java +13 -3
- package/android/src/main/java/com/getcapacitor/community/admob/banner/BannerExecutor.java +261 -141
- package/android/src/main/java/com/getcapacitor/community/admob/helpers/FullscreenPluginCallback.kt +5 -1
- package/android/src/main/java/com/getcapacitor/community/admob/interstitial/AdInterstitialExecutor.java +27 -31
- package/android/src/main/java/com/getcapacitor/community/admob/interstitial/InterstitialAdCallbackAndListeners.kt +1 -1
- package/android/src/main/java/com/getcapacitor/community/admob/models/LoadPluginEventNames.kt +2 -1
- package/android/src/main/java/com/getcapacitor/community/admob/rewarded/AdRewardExecutor.java +29 -33
- package/android/src/main/java/com/getcapacitor/community/admob/rewarded/RewardAdPluginEvents.kt +2 -1
- package/android/src/main/java/com/getcapacitor/community/admob/rewarded/RewardedAdCallbackAndListeners.kt +1 -1
- package/android/src/main/java/com/getcapacitor/community/admob/rewardedinterstitial/AdRewardInterstitialExecutor.java +29 -37
- package/android/src/main/java/com/getcapacitor/community/admob/rewardedinterstitial/RewardedInterstitialAdCallbackAndListeners.kt +1 -1
- package/dist/docs.json +33 -3
- package/dist/esm/interstitial/interstitial-definitions.interface.d.ts +3 -0
- package/dist/esm/reward/reward-ad-plugin-events.enum.d.ts +4 -0
- package/dist/esm/reward/reward-ad-plugin-events.enum.js +4 -0
- package/dist/esm/reward/reward-ad-plugin-events.enum.js.map +1 -1
- package/dist/esm/reward/reward-definitions.interface.d.ts +8 -0
- package/dist/esm/reward-interstitial/reward-interstitial-definitions.interface.d.ts +3 -0
- package/dist/plugin.cjs.js +4 -0
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +4 -0
- package/dist/plugin.js.map +1 -1
- package/docs/app-open.md +53 -0
- package/docs/banner.md +100 -0
- package/docs/configuration.md +30 -0
- package/docs/consent.md +80 -0
- package/docs/events.md +75 -0
- package/docs/interstitial.md +47 -0
- package/docs/migration.md +126 -0
- package/docs/rewarded.md +135 -0
- package/docs/testing.md +67 -0
- package/ios/Sources/AdMobPlugin/AdMobPlugin.swift +4 -1
- package/ios/Sources/AdMobPlugin/AppOpen/AppOpenAdManager.swift +1 -1
- package/ios/Sources/AdMobPlugin/Banner/BannerExecutor.swift +1 -1
- package/ios/Sources/AdMobPlugin/Interstitial/AdInterstitialExecutor.swift +3 -3
- package/ios/Sources/AdMobPlugin/Rewarded/AdRewardExecutor.swift +7 -3
- package/ios/Sources/AdMobPlugin/Rewarded/RewardAdPluginEvents.swift +1 -0
- package/ios/Sources/AdMobPlugin/RewardedInterstitial/AdRewardInterstitialExecutor.swift +3 -3
- package/package.json +3 -1
package/docs/rewarded.md
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Rewarded Ads
|
|
2
|
+
|
|
3
|
+
Rewarded ads let you give in-app items for interacting with video ads, playable ads, or surveys. Google's rewarded guides for [Android](https://developers.google.com/admob/android/rewarded) and [iOS](https://developers.google.com/admob/ios/rewarded) explain the format.
|
|
4
|
+
|
|
5
|
+
Treat rewarded ads as a reward flow, not as another non-rewarded interstitial. Call this after [initialize](https://docs.rdlabo.dev/projects/capacitor-admob/docs/configuration) and [consent](https://docs.rdlabo.dev/projects/capacitor-admob/docs/consent). Grant the reward only from the returned result or the `Rewarded` event, not from `Dismissed`.
|
|
6
|
+
|
|
7
|
+
## Rewarded video
|
|
8
|
+
|
|
9
|
+
Use a rewarded ad for a dedicated reward flow.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import {
|
|
13
|
+
AdLoadInfo,
|
|
14
|
+
AdMob,
|
|
15
|
+
AdMobRevenueData,
|
|
16
|
+
AdMobRewardItem,
|
|
17
|
+
RewardAdOptions,
|
|
18
|
+
RewardAdPluginEvents,
|
|
19
|
+
} from '@capacitor-community/admob';
|
|
20
|
+
|
|
21
|
+
await AdMob.addListener(RewardAdPluginEvents.Loaded, (info: AdLoadInfo) => {
|
|
22
|
+
console.log('Rewarded ad loaded', info.adUnitId);
|
|
23
|
+
});
|
|
24
|
+
await AdMob.addListener(RewardAdPluginEvents.FailedToLoad, console.error);
|
|
25
|
+
await AdMob.addListener(RewardAdPluginEvents.Rewarded, (reward: AdMobRewardItem) => {
|
|
26
|
+
console.log('Reward earned', reward.amount, reward.type);
|
|
27
|
+
});
|
|
28
|
+
await AdMob.addListener(RewardAdPluginEvents.AdImpression, (data: AdMobRevenueData) => {
|
|
29
|
+
console.log(data);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const options: RewardAdOptions = {
|
|
33
|
+
adId: 'YOUR_AD_UNIT_ID',
|
|
34
|
+
// isTesting: true,
|
|
35
|
+
// npa: true,
|
|
36
|
+
// immersiveMode: true,
|
|
37
|
+
// ssv: {
|
|
38
|
+
// userId: 'USER_ID',
|
|
39
|
+
// customData: JSON.stringify({ placement: 'bonus' }),
|
|
40
|
+
// },
|
|
41
|
+
};
|
|
42
|
+
await AdMob.prepareRewardVideoAd(options);
|
|
43
|
+
const rewardItem = await AdMob.showRewardVideoAd();
|
|
44
|
+
// Grant the reward once, using this result or the Rewarded event — not both.
|
|
45
|
+
console.log(rewardItem);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
<!-- !::prepareRewardVideoAd:: -->
|
|
49
|
+
|
|
50
|
+
<!-- !::showRewardVideoAd:: -->
|
|
51
|
+
|
|
52
|
+
<!-- !::RewardAdOptions:: -->
|
|
53
|
+
|
|
54
|
+
<!-- !::AdMobRewardItem:: -->
|
|
55
|
+
|
|
56
|
+
When no `adId` is passed to `showRewardVideoAd()`, the most recently prepared ad is shown.
|
|
57
|
+
|
|
58
|
+
### Prepare more than one ad
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
await AdMob.prepareRewardVideoAd({ adId: 'ca-app-pub-xxx/reward-1' });
|
|
62
|
+
await AdMob.prepareRewardVideoAd({ adId: 'ca-app-pub-xxx/reward-2' });
|
|
63
|
+
|
|
64
|
+
const reward = await AdMob.showRewardVideoAd({ adId: 'ca-app-pub-xxx/reward-1' });
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Rewarded interstitial
|
|
68
|
+
|
|
69
|
+
Rewarded interstitial ads are incentivized full-screen ads that appear during natural app transitions. Unlike rewarded video, the user does not opt in first. Google's rewarded interstitial guides for [Android](https://developers.google.com/admob/android/rewarded-interstitial) and [iOS](https://developers.google.com/admob/ios/rewarded-interstitial) explain the format.
|
|
70
|
+
|
|
71
|
+
Use a rewarded interstitial when the rewarded experience belongs at a natural transition in the app.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import {
|
|
75
|
+
AdMob,
|
|
76
|
+
AdMobRewardInterstitialItem,
|
|
77
|
+
RewardInterstitialAdOptions,
|
|
78
|
+
RewardInterstitialAdPluginEvents,
|
|
79
|
+
} from '@capacitor-community/admob';
|
|
80
|
+
|
|
81
|
+
await AdMob.addListener(RewardInterstitialAdPluginEvents.FailedToLoad, console.error);
|
|
82
|
+
|
|
83
|
+
const options: RewardInterstitialAdOptions = {
|
|
84
|
+
adId: 'YOUR_AD_UNIT_ID',
|
|
85
|
+
};
|
|
86
|
+
const { adUnitId } = await AdMob.prepareRewardInterstitialAd(options);
|
|
87
|
+
const rewardItem: AdMobRewardInterstitialItem = await AdMob.showRewardInterstitialAd({
|
|
88
|
+
adId: adUnitId,
|
|
89
|
+
});
|
|
90
|
+
console.log(rewardItem);
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
<!-- !::prepareRewardInterstitialAd:: -->
|
|
94
|
+
|
|
95
|
+
<!-- !::showRewardInterstitialAd:: -->
|
|
96
|
+
|
|
97
|
+
<!-- !::RewardInterstitialAdOptions:: -->
|
|
98
|
+
|
|
99
|
+
<!-- !::AdMobRewardInterstitialItem:: -->
|
|
100
|
+
|
|
101
|
+
See [Testing](https://docs.rdlabo.dev/projects/capacitor-admob/docs/testing) for `isTesting`.
|
|
102
|
+
|
|
103
|
+
## Server-side verification
|
|
104
|
+
|
|
105
|
+
Server-side verification (SSV) lets your backend confirm that a reward was earned. See Google's [SSV documentation](https://support.google.com/admob/answer/9603226). Callbacks fire only for production ads; test ads do not invoke your SSV endpoint.
|
|
106
|
+
|
|
107
|
+
For local validation of the `ssv` payload, you can send a mock request after `RewardAdPluginEvents.Rewarded`. Replace `ENVIRONMENT_IS_DEVELOPMENT` with your own development flag:
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
const userId = 'USER_ID';
|
|
111
|
+
const customData = JSON.stringify({ placement: 'bonus' });
|
|
112
|
+
|
|
113
|
+
await AdMob.addListener(RewardAdPluginEvents.Rewarded, async () => {
|
|
114
|
+
if (!ENVIRONMENT_IS_DEVELOPMENT) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const params = new URLSearchParams({
|
|
119
|
+
ad_network: 'TEST',
|
|
120
|
+
ad_unit: 'TEST',
|
|
121
|
+
custom_data: customData,
|
|
122
|
+
reward_amount: 'TEST',
|
|
123
|
+
reward_item: 'TEST',
|
|
124
|
+
timestamp: 'TEST',
|
|
125
|
+
transaction_id: 'TEST',
|
|
126
|
+
user_id: userId,
|
|
127
|
+
signature: 'TEST',
|
|
128
|
+
key_id: 'TEST',
|
|
129
|
+
});
|
|
130
|
+
await fetch(`https://your-staging-ssv-endpoint?${params.toString()}`);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
console.error(err);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
```
|
package/docs/testing.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Testing
|
|
2
|
+
|
|
3
|
+
Use test ads during development so you can click ads without charging advertisers or flagging the account for invalid traffic. Google's test ads guides for [Android](https://developers.google.com/admob/android/test-ads) and [iOS](https://developers.google.com/admob/ios/test-ads) explain demo ad units and test devices.
|
|
4
|
+
|
|
5
|
+
This plugin can request those demo units or register a device through `initialize`.
|
|
6
|
+
|
|
7
|
+
## Demo ad units
|
|
8
|
+
|
|
9
|
+
Google provides [demo ad units](https://developers.google.com/admob/android/test-ads#demo_ad_units) that always return test ads. Prefer these during development. This plugin supports native iOS and Android only—use the matching platform ID.
|
|
10
|
+
|
|
11
|
+
Banner demo units used by this plugin and its demo:
|
|
12
|
+
|
|
13
|
+
| Platform | Banner `adId` |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| Android | `ca-app-pub-3940256099942544/6300978111` |
|
|
16
|
+
| iOS | `ca-app-pub-3940256099942544/2934735716` |
|
|
17
|
+
|
|
18
|
+
Other format demo IDs are listed in Google's test-ads guides linked above. You can also set `isTesting: true` on banner, interstitial, rewarded, and rewarded interstitial requests. App Open ads have no `isTesting` option; pass a demo ad unit as `adId`.
|
|
19
|
+
|
|
20
|
+
## Test devices
|
|
21
|
+
|
|
22
|
+
To request production-like ads on a physical device without generating invalid traffic, register the device with `AdMob.initialize()`:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
await AdMob.initialize({
|
|
26
|
+
testingDevices: ['YOUR_TEST_DEVICE_ID'],
|
|
27
|
+
initializeForTesting: true,
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
<!-- !::initialize:: -->
|
|
32
|
+
|
|
33
|
+
<!-- !::AdMobInitializationOptions:: -->
|
|
34
|
+
|
|
35
|
+
Find the device ID in the native logs after the first ad request:
|
|
36
|
+
|
|
37
|
+
- Android: Logcat, typically on the `Ads` tag (`Use RequestConfiguration.Builder.setTestDeviceIds(...)`).
|
|
38
|
+
- iOS: Xcode console (`To get test ads on this device, set:`).
|
|
39
|
+
|
|
40
|
+
See Google's [enable test devices](https://developers.google.com/admob/android/test-ads#enable_test_devices) guide.
|
|
41
|
+
|
|
42
|
+
## Consent debug geography
|
|
43
|
+
|
|
44
|
+
On a real device, set `debugGeography` and include the device ID in `testDeviceIdentifiers`. `EEA` makes the form behave as if the device were in the European Economic Area, so you can test GDPR messaging. Use this only on registered test devices.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { AdMob, AdmobConsentDebugGeography } from '@capacitor-community/admob';
|
|
48
|
+
|
|
49
|
+
const consentInfo = await AdMob.requestConsentInfo({
|
|
50
|
+
debugGeography: AdmobConsentDebugGeography.EEA,
|
|
51
|
+
testDeviceIdentifiers: ['YOUR_TEST_DEVICE_ID'],
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
<!-- !::requestConsentInfo:: -->
|
|
56
|
+
|
|
57
|
+
<!-- !::AdmobConsentRequestOptions:: -->
|
|
58
|
+
|
|
59
|
+
<!-- !::AdmobConsentDebugGeography:: -->
|
|
60
|
+
|
|
61
|
+
If you decline consent in the test form (Manage → Confirm Choices), ads may not load. That is expected in a test environment and does not predict production behavior after a user consents.
|
|
62
|
+
|
|
63
|
+
`resetConsentInfo()` is for tests only. See [Consent](https://docs.rdlabo.dev/projects/capacitor-admob/docs/consent).
|
|
64
|
+
|
|
65
|
+
## Server-side verification
|
|
66
|
+
|
|
67
|
+
Server-side verification (SSV) callbacks fire only for production ads. Test ads will not hit your SSV endpoint. For a mock request example, see [Rewarded Ads](https://docs.rdlabo.dev/projects/capacitor-admob/docs/rewarded).
|
|
@@ -65,6 +65,10 @@ public class AdMobPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
65
65
|
private let adRewardInterstitialExecutor = AdRewardInterstitialExecutor()
|
|
66
66
|
private let consentExecutor = ConsentExecutor()
|
|
67
67
|
|
|
68
|
+
public override func load() {
|
|
69
|
+
self.consentExecutor.plugin = self
|
|
70
|
+
}
|
|
71
|
+
|
|
68
72
|
/**
|
|
69
73
|
* Enable SKAdNetwork to track conversions
|
|
70
74
|
* https://developers.google.com/admob/ios/ios14
|
|
@@ -75,7 +79,6 @@ public class AdMobPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
75
79
|
self.adRewardExecutor.plugin = self
|
|
76
80
|
self.adRewardInterstitialExecutor.plugin = self
|
|
77
81
|
self.adInterstitialExecutor.plugin = self
|
|
78
|
-
self.consentExecutor.plugin = self
|
|
79
82
|
self.setRequestConfiguration(call)
|
|
80
83
|
|
|
81
84
|
MobileAds.shared.start(completionHandler: nil)
|
|
@@ -38,7 +38,7 @@ import UIKit
|
|
|
38
38
|
let networkName = ad.responseInfo.loadedAdNetworkResponseInfo?.adNetworkClassName ?? ""
|
|
39
39
|
let impressionId = ad.responseInfo.responseIdentifier ?? ""
|
|
40
40
|
onPaidEvent(
|
|
41
|
-
adValue.value.int64Value,
|
|
41
|
+
adValue.value.multiplying(byPowerOf10: 6).int64Value,
|
|
42
42
|
adValue.currencyCode,
|
|
43
43
|
adValue.precision.rawValue,
|
|
44
44
|
networkName,
|
|
@@ -55,7 +55,7 @@ class BannerExecutor: NSObject, BannerViewDelegate {
|
|
|
55
55
|
let impressionId = self.bannerView.responseInfo?.responseIdentifier ?? ""
|
|
56
56
|
self.plugin?.notifyListeners(BannerAdPluginEvents.AdPaid.rawValue, data: [
|
|
57
57
|
"adUnitId": self.bannerView.adUnitID ?? "",
|
|
58
|
-
"valueMicros": adValue.value.int64Value,
|
|
58
|
+
"valueMicros": adValue.value.multiplying(byPowerOf10: 6).int64Value,
|
|
59
59
|
"currencyCode": adValue.currencyCode,
|
|
60
60
|
"precision": adValue.precision.rawValue,
|
|
61
61
|
"networkName": networkName,
|
|
@@ -16,10 +16,10 @@ class AdInterstitialExecutor: NSObject, FullScreenContentDelegate {
|
|
|
16
16
|
if let error = error {
|
|
17
17
|
NSLog("Interstitial ad failed to load with error: \(error.localizedDescription)")
|
|
18
18
|
self.plugin?.notifyListeners(InterstitialAdPluginEvents.FailedToLoad.rawValue, data: [
|
|
19
|
-
"code":
|
|
19
|
+
"code": (error as NSError).code,
|
|
20
20
|
"message": error.localizedDescription
|
|
21
21
|
])
|
|
22
|
-
call.reject(
|
|
22
|
+
call.reject(error.localizedDescription, String((error as NSError).code), error)
|
|
23
23
|
return
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -30,7 +30,7 @@ class AdInterstitialExecutor: NSObject, FullScreenContentDelegate {
|
|
|
30
30
|
let impressionId = ad.responseInfo.responseIdentifier ?? ""
|
|
31
31
|
self.plugin?.notifyListeners(InterstitialAdPluginEvents.AdImpression.rawValue, data: [
|
|
32
32
|
"adUnitId": adUnitID,
|
|
33
|
-
"valueMicros": adValue.value.int64Value,
|
|
33
|
+
"valueMicros": adValue.value.multiplying(byPowerOf10: 6).int64Value,
|
|
34
34
|
"currencyCode": adValue.currencyCode,
|
|
35
35
|
"precision": adValue.precision.rawValue,
|
|
36
36
|
"networkName": networkName,
|
|
@@ -16,10 +16,10 @@ class AdRewardExecutor: NSObject, FullScreenContentDelegate {
|
|
|
16
16
|
if let error = error {
|
|
17
17
|
NSLog("Rewarded ad failed to load with error: \(error.localizedDescription)")
|
|
18
18
|
self.plugin?.notifyListeners(RewardAdPluginEvents.FailedToLoad.rawValue, data: [
|
|
19
|
-
"code":
|
|
19
|
+
"code": (error as NSError).code,
|
|
20
20
|
"message": error.localizedDescription
|
|
21
21
|
])
|
|
22
|
-
call.reject(
|
|
22
|
+
call.reject(error.localizedDescription, String((error as NSError).code), error)
|
|
23
23
|
return
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -50,7 +50,7 @@ class AdRewardExecutor: NSObject, FullScreenContentDelegate {
|
|
|
50
50
|
let impressionId = ad.responseInfo.responseIdentifier ?? ""
|
|
51
51
|
self.plugin?.notifyListeners(RewardAdPluginEvents.AdImpression.rawValue, data: [
|
|
52
52
|
"adUnitId": adUnitID,
|
|
53
|
-
"valueMicros": adValue.value.int64Value,
|
|
53
|
+
"valueMicros": adValue.value.multiplying(byPowerOf10: 6).int64Value,
|
|
54
54
|
"currencyCode": adValue.currencyCode,
|
|
55
55
|
"precision": adValue.precision.rawValue,
|
|
56
56
|
"networkName": networkName,
|
|
@@ -110,6 +110,10 @@ class AdRewardExecutor: NSObject, FullScreenContentDelegate {
|
|
|
110
110
|
self.plugin?.notifyListeners(RewardAdPluginEvents.Showed.rawValue, data: [:])
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
func adDidRecordClick(_ advertisement: FullScreenPresentingAd) {
|
|
114
|
+
self.plugin?.notifyListeners(RewardAdPluginEvents.adClicked.rawValue, data: [:])
|
|
115
|
+
}
|
|
116
|
+
|
|
113
117
|
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
|
|
114
118
|
removeCurrentlyShowingAd()
|
|
115
119
|
NSLog("RewardFullScreenDelegate Ad did dismiss full screen content.")
|
|
@@ -16,10 +16,10 @@ class AdRewardInterstitialExecutor: NSObject, FullScreenContentDelegate {
|
|
|
16
16
|
if let error = error {
|
|
17
17
|
NSLog("Rewarded interstitial ad failed to load with error: \(error.localizedDescription)")
|
|
18
18
|
self.plugin?.notifyListeners(RewardInterstitialAdPluginEvents.FailedToLoad.rawValue, data: [
|
|
19
|
-
"code":
|
|
19
|
+
"code": (error as NSError).code,
|
|
20
20
|
"message": error.localizedDescription
|
|
21
21
|
])
|
|
22
|
-
call.reject(
|
|
22
|
+
call.reject(error.localizedDescription, String((error as NSError).code), error)
|
|
23
23
|
return
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -50,7 +50,7 @@ class AdRewardInterstitialExecutor: NSObject, FullScreenContentDelegate {
|
|
|
50
50
|
let impressionId = ad.responseInfo.responseIdentifier ?? ""
|
|
51
51
|
self.plugin?.notifyListeners(RewardInterstitialAdPluginEvents.AdImpression.rawValue, data: [
|
|
52
52
|
"adUnitId": adUnitID,
|
|
53
|
-
"valueMicros": adValue.value.int64Value,
|
|
53
|
+
"valueMicros": adValue.value.multiplying(byPowerOf10: 6).int64Value,
|
|
54
54
|
"currencyCode": adValue.currencyCode,
|
|
55
55
|
"precision": adValue.precision.rawValue,
|
|
56
56
|
"networkName": networkName,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor-community/admob",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "8.
|
|
4
|
+
"version": "8.2.0",
|
|
5
5
|
"description": "A native plugin for AdMob",
|
|
6
6
|
"main": "dist/plugin.cjs.js",
|
|
7
7
|
"module": "dist/esm/index.js",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"android/src/main/",
|
|
15
15
|
"android/build.gradle",
|
|
16
16
|
"dist/",
|
|
17
|
+
"docs/",
|
|
17
18
|
"ios/Sources",
|
|
18
19
|
"ios/Tests",
|
|
19
20
|
"Package.swift",
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
"bugs": {
|
|
29
30
|
"url": "git@github.com:capacitor-community/admob.git/issues"
|
|
30
31
|
},
|
|
32
|
+
"homepage": "https://docs.rdlabo.dev/projects/capacitor-admob",
|
|
31
33
|
"scripts": {
|
|
32
34
|
"verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
|
|
33
35
|
"verify:ios": "xcodebuild -scheme CapacitorCommunityAdmob -destination generic/platform=iOS",
|