@bigcrunch/react-native-ads 0.1.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 +417 -0
- package/android/build.gradle +70 -0
- package/android/settings.gradle +6 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/java/com/bigcrunch/ads/react/BigCrunchAdsModule.kt +653 -0
- package/android/src/main/java/com/bigcrunch/ads/react/BigCrunchAdsPackage.kt +20 -0
- package/android/src/main/java/com/bigcrunch/ads/react/BigCrunchBannerViewManager.kt +296 -0
- package/ios/BigCrunchAdsModule.swift +588 -0
- package/ios/BigCrunchBannerViewManager.swift +270 -0
- package/ios/react-native-bigcrunch-ads-Bridging-Header.h +8 -0
- package/lib/BigCrunchAds.d.ts +168 -0
- package/lib/BigCrunchAds.d.ts.map +1 -0
- package/lib/BigCrunchAds.js +241 -0
- package/lib/BigCrunchBannerView.d.ts +21 -0
- package/lib/BigCrunchBannerView.d.ts.map +1 -0
- package/lib/BigCrunchBannerView.js +176 -0
- package/lib/BigCrunchInterstitial.d.ts +66 -0
- package/lib/BigCrunchInterstitial.d.ts.map +1 -0
- package/lib/BigCrunchInterstitial.js +222 -0
- package/lib/BigCrunchRewarded.d.ts +85 -0
- package/lib/BigCrunchRewarded.d.ts.map +1 -0
- package/lib/BigCrunchRewarded.js +257 -0
- package/lib/NativeBigCrunchAds.d.ts +71 -0
- package/lib/NativeBigCrunchAds.d.ts.map +1 -0
- package/lib/NativeBigCrunchAds.js +54 -0
- package/lib/index.d.ts +28 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +32 -0
- package/lib/types/ads.d.ts +101 -0
- package/lib/types/ads.d.ts.map +1 -0
- package/lib/types/ads.js +4 -0
- package/lib/types/config.d.ts +137 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +4 -0
- package/lib/types/events.d.ts +306 -0
- package/lib/types/events.d.ts.map +1 -0
- package/lib/types/events.js +4 -0
- package/lib/types/index.d.ts +175 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +23 -0
- package/package.json +88 -0
- package/react-native-bigcrunch-ads.podspec +27 -0
- package/src/BigCrunchAds.ts +298 -0
- package/src/BigCrunchBannerView.tsx +262 -0
- package/src/BigCrunchInterstitial.ts +266 -0
- package/src/BigCrunchRewarded.ts +307 -0
- package/src/NativeBigCrunchAds.ts +120 -0
- package/src/index.ts +71 -0
- package/src/types/ads.ts +112 -0
- package/src/types/config.ts +145 -0
- package/src/types/events.ts +337 -0
- package/src/types/index.ts +193 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigCrunchRewarded - API for rewarded ads
|
|
3
|
+
*/
|
|
4
|
+
import { NativeBigCrunchAds, BigCrunchAdsEventEmitter, NativeEventNames } from './NativeBigCrunchAds';
|
|
5
|
+
/**
|
|
6
|
+
* Static API for BigCrunch rewarded ads
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Load a rewarded ad
|
|
11
|
+
* await BigCrunchRewarded.load({ placementId: 'rewarded-extra-life' });
|
|
12
|
+
*
|
|
13
|
+
* // Set up reward listener
|
|
14
|
+
* BigCrunchRewarded.addEventListener(
|
|
15
|
+
* 'rewarded-extra-life',
|
|
16
|
+
* 'rewardEarned',
|
|
17
|
+
* (event) => {
|
|
18
|
+
* console.log(`User earned ${event.rewardAmount} ${event.rewardType}`);
|
|
19
|
+
* }
|
|
20
|
+
* );
|
|
21
|
+
*
|
|
22
|
+
* // Show when ready
|
|
23
|
+
* if (await BigCrunchRewarded.isLoaded('rewarded-extra-life')) {
|
|
24
|
+
* await BigCrunchRewarded.show('rewarded-extra-life');
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class BigCrunchRewarded {
|
|
29
|
+
static instances = new Map();
|
|
30
|
+
/**
|
|
31
|
+
* Load a rewarded ad
|
|
32
|
+
*
|
|
33
|
+
* @param options - Ad request options including placementId
|
|
34
|
+
*/
|
|
35
|
+
static async load(options) {
|
|
36
|
+
const { placementId } = options;
|
|
37
|
+
// Create or get existing instance
|
|
38
|
+
let instance = this.instances.get(placementId);
|
|
39
|
+
if (!instance) {
|
|
40
|
+
instance = new RewardedAdInstance(placementId);
|
|
41
|
+
this.instances.set(placementId, instance);
|
|
42
|
+
}
|
|
43
|
+
return instance.load(options);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Show a loaded rewarded ad
|
|
47
|
+
*
|
|
48
|
+
* @param placementId - The placement ID of the ad to show
|
|
49
|
+
*/
|
|
50
|
+
static async show(placementId) {
|
|
51
|
+
const instance = this.instances.get(placementId);
|
|
52
|
+
if (!instance) {
|
|
53
|
+
throw new Error(`No rewarded ad loaded for placement: ${placementId}`);
|
|
54
|
+
}
|
|
55
|
+
return instance.show();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if a rewarded ad is loaded and ready to show
|
|
59
|
+
*
|
|
60
|
+
* @param placementId - The placement ID to check
|
|
61
|
+
*/
|
|
62
|
+
static async isLoaded(placementId) {
|
|
63
|
+
const instance = this.instances.get(placementId);
|
|
64
|
+
if (!instance) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return instance.isLoaded();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Destroy a rewarded ad instance
|
|
71
|
+
*
|
|
72
|
+
* @param placementId - The placement ID of the ad to destroy
|
|
73
|
+
*/
|
|
74
|
+
static destroy(placementId) {
|
|
75
|
+
const instance = this.instances.get(placementId);
|
|
76
|
+
if (instance) {
|
|
77
|
+
instance.destroy();
|
|
78
|
+
this.instances.delete(placementId);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Destroy all rewarded ad instances
|
|
83
|
+
*/
|
|
84
|
+
static destroyAll() {
|
|
85
|
+
this.instances.forEach(instance => instance.destroy());
|
|
86
|
+
this.instances.clear();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a rewarded ad instance
|
|
90
|
+
* Alternative to static methods for more control
|
|
91
|
+
*
|
|
92
|
+
* @param placementId - The placement ID for this ad
|
|
93
|
+
*/
|
|
94
|
+
static createAd(placementId) {
|
|
95
|
+
let instance = this.instances.get(placementId);
|
|
96
|
+
if (!instance) {
|
|
97
|
+
instance = new RewardedAdInstance(placementId);
|
|
98
|
+
this.instances.set(placementId, instance);
|
|
99
|
+
}
|
|
100
|
+
return instance;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Add event listener for a specific placement
|
|
104
|
+
*
|
|
105
|
+
* @param placementId - The placement ID to listen to
|
|
106
|
+
* @param eventType - The event type to listen for
|
|
107
|
+
* @param listener - The callback function
|
|
108
|
+
*/
|
|
109
|
+
static addEventListener(placementId, eventType, listener) {
|
|
110
|
+
const instance = this.instances.get(placementId);
|
|
111
|
+
if (!instance) {
|
|
112
|
+
const newInstance = new RewardedAdInstance(placementId);
|
|
113
|
+
this.instances.set(placementId, newInstance);
|
|
114
|
+
return newInstance.addEventListener(eventType, listener);
|
|
115
|
+
}
|
|
116
|
+
return instance.addEventListener(eventType, listener);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Convenience method to listen for reward earned events
|
|
120
|
+
*
|
|
121
|
+
* @param placementId - The placement ID to listen to
|
|
122
|
+
* @param listener - Callback when user earns reward
|
|
123
|
+
*/
|
|
124
|
+
static onRewardEarned(placementId, listener) {
|
|
125
|
+
return this.addEventListener(placementId, 'rewardEarned', (event) => {
|
|
126
|
+
const rewardEvent = event;
|
|
127
|
+
listener({
|
|
128
|
+
rewardType: rewardEvent.rewardType,
|
|
129
|
+
rewardAmount: rewardEvent.rewardAmount,
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Internal rewarded ad instance
|
|
136
|
+
*/
|
|
137
|
+
class RewardedAdInstance {
|
|
138
|
+
placementId;
|
|
139
|
+
subscriptions = [];
|
|
140
|
+
listeners = new Map();
|
|
141
|
+
constructor(placementId) {
|
|
142
|
+
this.placementId = placementId;
|
|
143
|
+
this.setupEventListeners();
|
|
144
|
+
}
|
|
145
|
+
async load(options) {
|
|
146
|
+
return NativeBigCrunchAds.loadRewarded(options);
|
|
147
|
+
}
|
|
148
|
+
async show() {
|
|
149
|
+
return NativeBigCrunchAds.showRewarded(this.placementId);
|
|
150
|
+
}
|
|
151
|
+
async isLoaded() {
|
|
152
|
+
return NativeBigCrunchAds.isRewardedLoaded(this.placementId);
|
|
153
|
+
}
|
|
154
|
+
destroy() {
|
|
155
|
+
this.removeAllListeners();
|
|
156
|
+
NativeBigCrunchAds.destroyRewarded(this.placementId).catch(console.error);
|
|
157
|
+
}
|
|
158
|
+
addEventListener(eventType, listener) {
|
|
159
|
+
// Add to local listeners
|
|
160
|
+
if (!this.listeners.has(eventType)) {
|
|
161
|
+
this.listeners.set(eventType, new Set());
|
|
162
|
+
}
|
|
163
|
+
// Cast listener to base type for storage - runtime behavior is the same
|
|
164
|
+
const typedListener = listener;
|
|
165
|
+
this.listeners.get(eventType).add(typedListener);
|
|
166
|
+
// Return subscription
|
|
167
|
+
return {
|
|
168
|
+
remove: () => {
|
|
169
|
+
const listeners = this.listeners.get(eventType);
|
|
170
|
+
if (listeners) {
|
|
171
|
+
listeners.delete(typedListener);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
removeAllListeners() {
|
|
177
|
+
this.subscriptions.forEach(sub => sub.remove());
|
|
178
|
+
this.subscriptions = [];
|
|
179
|
+
this.listeners.clear();
|
|
180
|
+
}
|
|
181
|
+
setupEventListeners() {
|
|
182
|
+
const eventMap = {
|
|
183
|
+
adLoaded: NativeEventNames.REWARDED_AD_LOADED,
|
|
184
|
+
adFailedToLoad: NativeEventNames.REWARDED_AD_FAILED_TO_LOAD,
|
|
185
|
+
adImpression: NativeEventNames.REWARDED_AD_IMPRESSION,
|
|
186
|
+
adClicked: NativeEventNames.REWARDED_AD_CLICKED,
|
|
187
|
+
adOpened: NativeEventNames.REWARDED_AD_OPENED,
|
|
188
|
+
adClosed: NativeEventNames.REWARDED_AD_CLOSED,
|
|
189
|
+
adRevenue: NativeEventNames.REWARDED_AD_REVENUE,
|
|
190
|
+
rewardEarned: NativeEventNames.REWARDED_AD_EARNED,
|
|
191
|
+
};
|
|
192
|
+
Object.entries(eventMap).forEach(([eventType, nativeEvent]) => {
|
|
193
|
+
const subscription = BigCrunchAdsEventEmitter.addListener(nativeEvent, (event) => {
|
|
194
|
+
// Check if event is for this placement
|
|
195
|
+
if (event.placementId === this.placementId) {
|
|
196
|
+
// Transform event data if needed
|
|
197
|
+
let transformedEvent;
|
|
198
|
+
switch (eventType) {
|
|
199
|
+
case 'adFailedToLoad':
|
|
200
|
+
transformedEvent = {
|
|
201
|
+
type: eventType,
|
|
202
|
+
placementId: this.placementId,
|
|
203
|
+
format: 'rewarded',
|
|
204
|
+
timestamp: Date.now(),
|
|
205
|
+
error: {
|
|
206
|
+
code: event.errorCode || 'UNKNOWN',
|
|
207
|
+
message: event.errorMessage || 'Ad failed to load',
|
|
208
|
+
underlyingError: event.underlyingError,
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
break;
|
|
212
|
+
case 'adRevenue':
|
|
213
|
+
transformedEvent = {
|
|
214
|
+
type: eventType,
|
|
215
|
+
placementId: this.placementId,
|
|
216
|
+
format: 'rewarded',
|
|
217
|
+
timestamp: Date.now(),
|
|
218
|
+
revenue: {
|
|
219
|
+
valueMicros: event.valueMicros,
|
|
220
|
+
currencyCode: event.currencyCode,
|
|
221
|
+
adUnitId: event.adUnitId,
|
|
222
|
+
precision: event.precision,
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
break;
|
|
226
|
+
case 'rewardEarned':
|
|
227
|
+
transformedEvent = {
|
|
228
|
+
type: eventType,
|
|
229
|
+
placementId: this.placementId,
|
|
230
|
+
format: 'rewarded',
|
|
231
|
+
timestamp: Date.now(),
|
|
232
|
+
rewardType: event.rewardType || 'default',
|
|
233
|
+
rewardAmount: event.rewardAmount || 1,
|
|
234
|
+
};
|
|
235
|
+
break;
|
|
236
|
+
default:
|
|
237
|
+
transformedEvent = {
|
|
238
|
+
type: eventType,
|
|
239
|
+
placementId: this.placementId,
|
|
240
|
+
format: 'rewarded',
|
|
241
|
+
timestamp: Date.now(),
|
|
242
|
+
...event,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// Notify local listeners
|
|
246
|
+
const listeners = this.listeners.get(eventType);
|
|
247
|
+
if (listeners) {
|
|
248
|
+
listeners.forEach(listener => listener(transformedEvent));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
this.subscriptions.push(subscription);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Export as default
|
|
257
|
+
export default BigCrunchRewarded;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native module interface for BigCrunch Ads
|
|
3
|
+
* This is the bridge to the native Android/iOS implementation
|
|
4
|
+
*/
|
|
5
|
+
import { NativeEventEmitter } from 'react-native';
|
|
6
|
+
import type { InitializationOptions, AdRequestOptions, SessionInfo, DeviceContext, AppConfig } from './types';
|
|
7
|
+
export interface NativeBigCrunchAdsModule {
|
|
8
|
+
initialize(options: InitializationOptions): Promise<void>;
|
|
9
|
+
isInitialized(): Promise<boolean>;
|
|
10
|
+
getAppConfig(): Promise<AppConfig | null>;
|
|
11
|
+
refreshConfig(): Promise<void>;
|
|
12
|
+
trackScreenView(screenName: string): Promise<void>;
|
|
13
|
+
loadInterstitial(options: AdRequestOptions): Promise<void>;
|
|
14
|
+
showInterstitial(placementId: string): Promise<void>;
|
|
15
|
+
isInterstitialLoaded(placementId: string): Promise<boolean>;
|
|
16
|
+
destroyInterstitial(placementId: string): Promise<void>;
|
|
17
|
+
loadRewarded(options: AdRequestOptions): Promise<void>;
|
|
18
|
+
showRewarded(placementId: string): Promise<void>;
|
|
19
|
+
isRewardedLoaded(placementId: string): Promise<boolean>;
|
|
20
|
+
destroyRewarded(placementId: string): Promise<void>;
|
|
21
|
+
getSessionInfo(): Promise<SessionInfo>;
|
|
22
|
+
startNewSession(): Promise<void>;
|
|
23
|
+
getDeviceContext(): Promise<DeviceContext>;
|
|
24
|
+
setGdprConsent(consent: string): Promise<void>;
|
|
25
|
+
setCcpaString(ccpaString: string): Promise<void>;
|
|
26
|
+
setCoppaCompliant(isCompliant: boolean): Promise<void>;
|
|
27
|
+
setDebugMode(enabled: boolean): Promise<void>;
|
|
28
|
+
addTestDevice(deviceId: string): Promise<void>;
|
|
29
|
+
removeTestDevice(deviceId: string): Promise<void>;
|
|
30
|
+
getTestDevices(): Promise<string[]>;
|
|
31
|
+
setUTMParameters(params: {
|
|
32
|
+
source?: string;
|
|
33
|
+
medium?: string;
|
|
34
|
+
campaign?: string;
|
|
35
|
+
term?: string;
|
|
36
|
+
content?: string;
|
|
37
|
+
}): Promise<void>;
|
|
38
|
+
clearUTMParameters(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare const NativeBigCrunchAds: NativeBigCrunchAdsModule;
|
|
41
|
+
export declare const BigCrunchAdsEventEmitter: NativeEventEmitter;
|
|
42
|
+
export declare const NativeEventNames: {
|
|
43
|
+
readonly BANNER_AD_LOADED: "BigCrunchBannerAdLoaded";
|
|
44
|
+
readonly BANNER_AD_FAILED_TO_LOAD: "BigCrunchBannerAdFailedToLoad";
|
|
45
|
+
readonly BANNER_AD_IMPRESSION: "BigCrunchBannerAdImpression";
|
|
46
|
+
readonly BANNER_AD_CLICKED: "BigCrunchBannerAdClicked";
|
|
47
|
+
readonly BANNER_AD_OPENED: "BigCrunchBannerAdOpened";
|
|
48
|
+
readonly BANNER_AD_CLOSED: "BigCrunchBannerAdClosed";
|
|
49
|
+
readonly BANNER_AD_REVENUE: "BigCrunchBannerAdRevenue";
|
|
50
|
+
readonly BANNER_AD_VIEWABLE: "BigCrunchBannerAdViewable";
|
|
51
|
+
readonly INTERSTITIAL_AD_LOADED: "BigCrunchInterstitialAdLoaded";
|
|
52
|
+
readonly INTERSTITIAL_AD_FAILED_TO_LOAD: "BigCrunchInterstitialAdFailedToLoad";
|
|
53
|
+
readonly INTERSTITIAL_AD_IMPRESSION: "BigCrunchInterstitialAdImpression";
|
|
54
|
+
readonly INTERSTITIAL_AD_CLICKED: "BigCrunchInterstitialAdClicked";
|
|
55
|
+
readonly INTERSTITIAL_AD_OPENED: "BigCrunchInterstitialAdOpened";
|
|
56
|
+
readonly INTERSTITIAL_AD_CLOSED: "BigCrunchInterstitialAdClosed";
|
|
57
|
+
readonly INTERSTITIAL_AD_REVENUE: "BigCrunchInterstitialAdRevenue";
|
|
58
|
+
readonly REWARDED_AD_LOADED: "BigCrunchRewardedAdLoaded";
|
|
59
|
+
readonly REWARDED_AD_FAILED_TO_LOAD: "BigCrunchRewardedAdFailedToLoad";
|
|
60
|
+
readonly REWARDED_AD_IMPRESSION: "BigCrunchRewardedAdImpression";
|
|
61
|
+
readonly REWARDED_AD_CLICKED: "BigCrunchRewardedAdClicked";
|
|
62
|
+
readonly REWARDED_AD_OPENED: "BigCrunchRewardedAdOpened";
|
|
63
|
+
readonly REWARDED_AD_CLOSED: "BigCrunchRewardedAdClosed";
|
|
64
|
+
readonly REWARDED_AD_REVENUE: "BigCrunchRewardedAdRevenue";
|
|
65
|
+
readonly REWARDED_AD_EARNED: "BigCrunchRewardedAdEarned";
|
|
66
|
+
readonly CONFIG_UPDATED: "BigCrunchConfigUpdated";
|
|
67
|
+
readonly CONFIG_FAILED: "BigCrunchConfigFailed";
|
|
68
|
+
readonly SESSION_STARTED: "BigCrunchSessionStarted";
|
|
69
|
+
readonly SESSION_ENDED: "BigCrunchSessionEnded";
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=NativeBigCrunchAds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeBigCrunchAds.d.ts","sourceRoot":"","sources":["../src/NativeBigCrunchAds.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAiB,kBAAkB,EAAY,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG9G,MAAM,WAAW,wBAAwB;IAEvC,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAGlC,YAAY,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC1C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/B,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGnD,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxD,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGpD,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjC,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAG3C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,iBAAiB,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvD,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAGpC,gBAAgB,CAAC,MAAM,EAAE;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAgBD,eAAO,MAAM,kBAAkB,EAAyB,wBAAwB,CAAC;AAGjF,eAAO,MAAM,wBAAwB,oBAA6C,CAAC;AAGnF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCnB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native module interface for BigCrunch Ads
|
|
3
|
+
* This is the bridge to the native Android/iOS implementation
|
|
4
|
+
*/
|
|
5
|
+
import { NativeModules, NativeEventEmitter, Platform } from 'react-native';
|
|
6
|
+
// Get the native module
|
|
7
|
+
const { BigCrunchAdsModule } = NativeModules;
|
|
8
|
+
if (!BigCrunchAdsModule) {
|
|
9
|
+
const errorMessage = Platform.select({
|
|
10
|
+
ios: 'BigCrunchAdsModule native module is not available on iOS. Make sure you have run `pod install` and rebuilt the app.',
|
|
11
|
+
android: 'BigCrunchAdsModule native module is not available on Android. Make sure you have rebuilt the app.',
|
|
12
|
+
default: 'BigCrunchAdsModule native module is not available. Make sure the library is properly linked.',
|
|
13
|
+
});
|
|
14
|
+
throw new Error(errorMessage);
|
|
15
|
+
}
|
|
16
|
+
// Export the native module with proper typing
|
|
17
|
+
export const NativeBigCrunchAds = BigCrunchAdsModule;
|
|
18
|
+
// Export the event emitter for the native module
|
|
19
|
+
export const BigCrunchAdsEventEmitter = new NativeEventEmitter(BigCrunchAdsModule);
|
|
20
|
+
// Event names used by the native module
|
|
21
|
+
export const NativeEventNames = {
|
|
22
|
+
// Banner events
|
|
23
|
+
BANNER_AD_LOADED: 'BigCrunchBannerAdLoaded',
|
|
24
|
+
BANNER_AD_FAILED_TO_LOAD: 'BigCrunchBannerAdFailedToLoad',
|
|
25
|
+
BANNER_AD_IMPRESSION: 'BigCrunchBannerAdImpression',
|
|
26
|
+
BANNER_AD_CLICKED: 'BigCrunchBannerAdClicked',
|
|
27
|
+
BANNER_AD_OPENED: 'BigCrunchBannerAdOpened',
|
|
28
|
+
BANNER_AD_CLOSED: 'BigCrunchBannerAdClosed',
|
|
29
|
+
BANNER_AD_REVENUE: 'BigCrunchBannerAdRevenue',
|
|
30
|
+
BANNER_AD_VIEWABLE: 'BigCrunchBannerAdViewable',
|
|
31
|
+
// Interstitial events
|
|
32
|
+
INTERSTITIAL_AD_LOADED: 'BigCrunchInterstitialAdLoaded',
|
|
33
|
+
INTERSTITIAL_AD_FAILED_TO_LOAD: 'BigCrunchInterstitialAdFailedToLoad',
|
|
34
|
+
INTERSTITIAL_AD_IMPRESSION: 'BigCrunchInterstitialAdImpression',
|
|
35
|
+
INTERSTITIAL_AD_CLICKED: 'BigCrunchInterstitialAdClicked',
|
|
36
|
+
INTERSTITIAL_AD_OPENED: 'BigCrunchInterstitialAdOpened',
|
|
37
|
+
INTERSTITIAL_AD_CLOSED: 'BigCrunchInterstitialAdClosed',
|
|
38
|
+
INTERSTITIAL_AD_REVENUE: 'BigCrunchInterstitialAdRevenue',
|
|
39
|
+
// Rewarded events
|
|
40
|
+
REWARDED_AD_LOADED: 'BigCrunchRewardedAdLoaded',
|
|
41
|
+
REWARDED_AD_FAILED_TO_LOAD: 'BigCrunchRewardedAdFailedToLoad',
|
|
42
|
+
REWARDED_AD_IMPRESSION: 'BigCrunchRewardedAdImpression',
|
|
43
|
+
REWARDED_AD_CLICKED: 'BigCrunchRewardedAdClicked',
|
|
44
|
+
REWARDED_AD_OPENED: 'BigCrunchRewardedAdOpened',
|
|
45
|
+
REWARDED_AD_CLOSED: 'BigCrunchRewardedAdClosed',
|
|
46
|
+
REWARDED_AD_REVENUE: 'BigCrunchRewardedAdRevenue',
|
|
47
|
+
REWARDED_AD_EARNED: 'BigCrunchRewardedAdEarned',
|
|
48
|
+
// Configuration events
|
|
49
|
+
CONFIG_UPDATED: 'BigCrunchConfigUpdated',
|
|
50
|
+
CONFIG_FAILED: 'BigCrunchConfigFailed',
|
|
51
|
+
// Session events
|
|
52
|
+
SESSION_STARTED: 'BigCrunchSessionStarted',
|
|
53
|
+
SESSION_ENDED: 'BigCrunchSessionEnded',
|
|
54
|
+
};
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigCrunch Mobile Ads SDK for React Native
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export { BigCrunchAds, default as BigCrunchAdsDefault } from './BigCrunchAds';
|
|
7
|
+
export { BigCrunchBannerView, default as BigCrunchBannerViewDefault } from './BigCrunchBannerView';
|
|
8
|
+
export { BigCrunchInterstitial, default as BigCrunchInterstitialDefault } from './BigCrunchInterstitial';
|
|
9
|
+
export { BigCrunchRewarded, default as BigCrunchRewardedDefault } from './BigCrunchRewarded';
|
|
10
|
+
import BigCrunchAds from './BigCrunchAds';
|
|
11
|
+
import BigCrunchInterstitial from './BigCrunchInterstitial';
|
|
12
|
+
import BigCrunchRewarded from './BigCrunchRewarded';
|
|
13
|
+
export * from './types';
|
|
14
|
+
export type { InitializationOptions, Environment, AdFormat, BannerSize, CustomSize, BigCrunchBannerViewProps, InterstitialAd, RewardedAd, AdEvent, AdEventListener, EventSubscription, AdError, AdRevenue, AppConfig, PlacementConfig, SessionInfo, DeviceContext, } from './types';
|
|
15
|
+
export { AdErrorCode } from './types';
|
|
16
|
+
export declare const SDK_VERSION = "0.1.0";
|
|
17
|
+
/**
|
|
18
|
+
* Default export for convenience
|
|
19
|
+
*/
|
|
20
|
+
declare const _default: {
|
|
21
|
+
BigCrunchAds: typeof BigCrunchAds;
|
|
22
|
+
BigCrunchBannerView: import("react").FC<import("./types").BigCrunchBannerViewProps>;
|
|
23
|
+
BigCrunchInterstitial: typeof BigCrunchInterstitial;
|
|
24
|
+
BigCrunchRewarded: typeof BigCrunchRewarded;
|
|
25
|
+
SDK_VERSION: string;
|
|
26
|
+
};
|
|
27
|
+
export default _default;
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,mBAAmB,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG7F,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAGpD,cAAc,SAAS,CAAC;AAGxB,YAAY,EAEV,qBAAqB,EACrB,WAAW,EAGX,QAAQ,EACR,UAAU,EACV,UAAU,EAGV,wBAAwB,EACxB,cAAc,EACd,UAAU,EAGV,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,SAAS,EAGT,SAAS,EACT,eAAe,EAGf,WAAW,EACX,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC;;GAEG;;;;;;;;AACH,wBAME"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigCrunch Mobile Ads SDK for React Native
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
// Main SDK API
|
|
7
|
+
export { BigCrunchAds, default as BigCrunchAdsDefault } from './BigCrunchAds';
|
|
8
|
+
// Ad Components and APIs
|
|
9
|
+
export { BigCrunchBannerView, default as BigCrunchBannerViewDefault } from './BigCrunchBannerView';
|
|
10
|
+
export { BigCrunchInterstitial, default as BigCrunchInterstitialDefault } from './BigCrunchInterstitial';
|
|
11
|
+
export { BigCrunchRewarded, default as BigCrunchRewardedDefault } from './BigCrunchRewarded';
|
|
12
|
+
// Import defaults for the default export
|
|
13
|
+
import BigCrunchAds from './BigCrunchAds';
|
|
14
|
+
import BigCrunchBannerView from './BigCrunchBannerView';
|
|
15
|
+
import BigCrunchInterstitial from './BigCrunchInterstitial';
|
|
16
|
+
import BigCrunchRewarded from './BigCrunchRewarded';
|
|
17
|
+
// Export all types
|
|
18
|
+
export * from './types';
|
|
19
|
+
// Export error codes enum
|
|
20
|
+
export { AdErrorCode } from './types';
|
|
21
|
+
// Version
|
|
22
|
+
export const SDK_VERSION = '0.1.0';
|
|
23
|
+
/**
|
|
24
|
+
* Default export for convenience
|
|
25
|
+
*/
|
|
26
|
+
export default {
|
|
27
|
+
BigCrunchAds,
|
|
28
|
+
BigCrunchBannerView,
|
|
29
|
+
BigCrunchInterstitial,
|
|
30
|
+
BigCrunchRewarded,
|
|
31
|
+
SDK_VERSION,
|
|
32
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ad-specific types for BigCrunch Mobile Ads SDK
|
|
3
|
+
*/
|
|
4
|
+
import { BannerSize, CustomSize, AdRequestOptions, AdEventListener, EventSubscription } from './index';
|
|
5
|
+
/**
|
|
6
|
+
* Banner view props for React component
|
|
7
|
+
*/
|
|
8
|
+
export interface BigCrunchBannerViewProps {
|
|
9
|
+
/** Placement ID configured in BigCrunch dashboard */
|
|
10
|
+
placementId: string;
|
|
11
|
+
/** Banner size (optional, will use placement config if not specified) */
|
|
12
|
+
size?: BannerSize | CustomSize;
|
|
13
|
+
/** Whether to load ad automatically when component mounts */
|
|
14
|
+
autoLoad?: boolean;
|
|
15
|
+
/** Auto-refresh interval in seconds (0 = disabled) */
|
|
16
|
+
refreshInterval?: number;
|
|
17
|
+
/** Custom targeting parameters */
|
|
18
|
+
customTargeting?: Record<string, string>;
|
|
19
|
+
/** Style for the banner container */
|
|
20
|
+
style?: any;
|
|
21
|
+
/** Callback when ad loads successfully */
|
|
22
|
+
onAdLoaded?: () => void;
|
|
23
|
+
/** Callback when ad fails to load */
|
|
24
|
+
onAdFailedToLoad?: (error: AdError) => void;
|
|
25
|
+
/** Callback when ad impression is recorded */
|
|
26
|
+
onAdImpression?: () => void;
|
|
27
|
+
/** Callback when ad is clicked */
|
|
28
|
+
onAdClicked?: () => void;
|
|
29
|
+
/** Callback when ad opens overlay */
|
|
30
|
+
onAdOpened?: () => void;
|
|
31
|
+
/** Callback when ad closes overlay */
|
|
32
|
+
onAdClosed?: () => void;
|
|
33
|
+
/** Callback when ad revenue is received */
|
|
34
|
+
onAdRevenue?: (revenue: AdRevenue) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Interstitial ad interface
|
|
38
|
+
*/
|
|
39
|
+
export interface InterstitialAd {
|
|
40
|
+
/** Load an interstitial ad */
|
|
41
|
+
load(options: AdRequestOptions): Promise<void>;
|
|
42
|
+
/** Show the loaded interstitial */
|
|
43
|
+
show(): Promise<void>;
|
|
44
|
+
/** Check if ad is loaded and ready to show */
|
|
45
|
+
isLoaded(): Promise<boolean>;
|
|
46
|
+
/** Destroy the ad instance */
|
|
47
|
+
destroy(): void;
|
|
48
|
+
/** Add event listener */
|
|
49
|
+
addEventListener<T extends AdEvent>(eventType: T['type'], listener: AdEventListener<T>): EventSubscription;
|
|
50
|
+
/** Remove all event listeners */
|
|
51
|
+
removeAllListeners(): void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Rewarded ad interface
|
|
55
|
+
*/
|
|
56
|
+
export interface RewardedAd {
|
|
57
|
+
/** Load a rewarded ad */
|
|
58
|
+
load(options: AdRequestOptions): Promise<void>;
|
|
59
|
+
/** Show the loaded rewarded ad */
|
|
60
|
+
show(): Promise<void>;
|
|
61
|
+
/** Check if ad is loaded and ready to show */
|
|
62
|
+
isLoaded(): Promise<boolean>;
|
|
63
|
+
/** Destroy the ad instance */
|
|
64
|
+
destroy(): void;
|
|
65
|
+
/** Add event listener */
|
|
66
|
+
addEventListener<T extends AdEvent>(eventType: T['type'], listener: AdEventListener<T>): EventSubscription;
|
|
67
|
+
/** Remove all event listeners */
|
|
68
|
+
removeAllListeners(): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Native ad data
|
|
72
|
+
*/
|
|
73
|
+
export interface NativeAdData {
|
|
74
|
+
/** Placement ID */
|
|
75
|
+
placementId: string;
|
|
76
|
+
/** Headline text */
|
|
77
|
+
headline?: string;
|
|
78
|
+
/** Body text */
|
|
79
|
+
body?: string;
|
|
80
|
+
/** Call to action text */
|
|
81
|
+
callToAction?: string;
|
|
82
|
+
/** Icon image URL */
|
|
83
|
+
icon?: string;
|
|
84
|
+
/** Main image URL */
|
|
85
|
+
image?: string;
|
|
86
|
+
/** Advertiser name */
|
|
87
|
+
advertiser?: string;
|
|
88
|
+
/** Star rating */
|
|
89
|
+
starRating?: number;
|
|
90
|
+
/** Price text */
|
|
91
|
+
price?: string;
|
|
92
|
+
/** Store name */
|
|
93
|
+
store?: string;
|
|
94
|
+
/** Ad choices icon URL */
|
|
95
|
+
adChoicesIcon?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Import required types
|
|
99
|
+
*/
|
|
100
|
+
import { AdError, AdRevenue, AdEvent } from './index';
|
|
101
|
+
//# sourceMappingURL=ads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../../src/types/ads.ts"],"names":[],"mappings":"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"}
|
package/lib/types/ads.js
ADDED