@vynix-org/react-native-ads-sdk 0.1.1
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/AdsSdk.podspec +52 -0
- package/LICENSE +20 -0
- package/README.md +95 -0
- package/android/build.gradle +108 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +5 -0
- package/android/src/main/java/com/adssdk/AdsSdkModule.kt +23 -0
- package/android/src/main/java/com/adssdk/AdsSdkPackage.kt +33 -0
- package/ios/AdsSdk.h +5 -0
- package/ios/AdsSdk.mm +18 -0
- package/lib/module/ads-manager/AppOpenAdsManager.js +131 -0
- package/lib/module/ads-manager/AppOpenAdsManager.js.map +1 -0
- package/lib/module/ads-manager/GoogleMobileAdsManager.js +62 -0
- package/lib/module/ads-manager/GoogleMobileAdsManager.js.map +1 -0
- package/lib/module/ads-manager/InterstitialAdsManager.js +291 -0
- package/lib/module/ads-manager/InterstitialAdsManager.js.map +1 -0
- package/lib/module/ads-manager/NativeAdsManager.js +405 -0
- package/lib/module/ads-manager/NativeAdsManager.js.map +1 -0
- package/lib/module/ads-manager/RewardedAdsManager.js +328 -0
- package/lib/module/ads-manager/RewardedAdsManager.js.map +1 -0
- package/lib/module/ads-manager/RewardedInterstitialAdsManager.js +328 -0
- package/lib/module/ads-manager/RewardedInterstitialAdsManager.js.map +1 -0
- package/lib/module/components/BannerAdComponent.js +159 -0
- package/lib/module/components/BannerAdComponent.js.map +1 -0
- package/lib/module/components/FullscreenStyles.js +162 -0
- package/lib/module/components/FullscreenStyles.js.map +1 -0
- package/lib/module/components/NativeAdComponent.js +172 -0
- package/lib/module/components/NativeAdComponent.js.map +1 -0
- package/lib/module/components/NativeAdFullscreenComponent.js +205 -0
- package/lib/module/components/NativeAdFullscreenComponent.js.map +1 -0
- package/lib/module/components/NativeStyles.js +143 -0
- package/lib/module/components/NativeStyles.js.map +1 -0
- package/lib/module/event/custom-event.js +29 -0
- package/lib/module/event/custom-event.js.map +1 -0
- package/lib/module/hook/useAppOpenAd.js +138 -0
- package/lib/module/hook/useAppOpenAd.js.map +1 -0
- package/lib/module/hook/useInterstitialAd.js +157 -0
- package/lib/module/hook/useInterstitialAd.js.map +1 -0
- package/lib/module/hook/useNativeAd.js +147 -0
- package/lib/module/hook/useNativeAd.js.map +1 -0
- package/lib/module/hook/useRewardedAd.js +166 -0
- package/lib/module/hook/useRewardedAd.js.map +1 -0
- package/lib/module/hook/useRewardedInterstitialAd.js +166 -0
- package/lib/module/hook/useRewardedInterstitialAd.js.map +1 -0
- package/lib/module/index.js +14 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/stores/interstitial-ads-store.js +205 -0
- package/lib/module/stores/interstitial-ads-store.js.map +1 -0
- package/lib/module/stores/native-ads-store.js +204 -0
- package/lib/module/stores/native-ads-store.js.map +1 -0
- package/lib/module/stores/rewarded-ads-store.js +216 -0
- package/lib/module/stores/rewarded-ads-store.js.map +1 -0
- package/lib/module/stores/rewarded-interstitial-ads-store.js +216 -0
- package/lib/module/stores/rewarded-interstitial-ads-store.js.map +1 -0
- package/lib/module/types/ads-types.js +25 -0
- package/lib/module/types/ads-types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/ads-manager/AppOpenAdsManager.d.ts +38 -0
- package/lib/typescript/src/ads-manager/AppOpenAdsManager.d.ts.map +1 -0
- package/lib/typescript/src/ads-manager/GoogleMobileAdsManager.d.ts +22 -0
- package/lib/typescript/src/ads-manager/GoogleMobileAdsManager.d.ts.map +1 -0
- package/lib/typescript/src/ads-manager/InterstitialAdsManager.d.ts +22 -0
- package/lib/typescript/src/ads-manager/InterstitialAdsManager.d.ts.map +1 -0
- package/lib/typescript/src/ads-manager/NativeAdsManager.d.ts +59 -0
- package/lib/typescript/src/ads-manager/NativeAdsManager.d.ts.map +1 -0
- package/lib/typescript/src/ads-manager/RewardedAdsManager.d.ts +25 -0
- package/lib/typescript/src/ads-manager/RewardedAdsManager.d.ts.map +1 -0
- package/lib/typescript/src/ads-manager/RewardedInterstitialAdsManager.d.ts +25 -0
- package/lib/typescript/src/ads-manager/RewardedInterstitialAdsManager.d.ts.map +1 -0
- package/lib/typescript/src/components/BannerAdComponent.d.ts +22 -0
- package/lib/typescript/src/components/BannerAdComponent.d.ts.map +1 -0
- package/lib/typescript/src/components/FullscreenStyles.d.ts +155 -0
- package/lib/typescript/src/components/FullscreenStyles.d.ts.map +1 -0
- package/lib/typescript/src/components/NativeAdComponent.d.ts +24 -0
- package/lib/typescript/src/components/NativeAdComponent.d.ts.map +1 -0
- package/lib/typescript/src/components/NativeAdFullscreenComponent.d.ts +26 -0
- package/lib/typescript/src/components/NativeAdFullscreenComponent.d.ts.map +1 -0
- package/lib/typescript/src/components/NativeStyles.d.ts +139 -0
- package/lib/typescript/src/components/NativeStyles.d.ts.map +1 -0
- package/lib/typescript/src/event/custom-event.d.ts +8 -0
- package/lib/typescript/src/event/custom-event.d.ts.map +1 -0
- package/lib/typescript/src/hook/useAppOpenAd.d.ts +19 -0
- package/lib/typescript/src/hook/useAppOpenAd.d.ts.map +1 -0
- package/lib/typescript/src/hook/useInterstitialAd.d.ts +20 -0
- package/lib/typescript/src/hook/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/src/hook/useNativeAd.d.ts +20 -0
- package/lib/typescript/src/hook/useNativeAd.d.ts.map +1 -0
- package/lib/typescript/src/hook/useRewardedAd.d.ts +27 -0
- package/lib/typescript/src/hook/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/src/hook/useRewardedInterstitialAd.d.ts +27 -0
- package/lib/typescript/src/hook/useRewardedInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +10 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/stores/interstitial-ads-store.d.ts +36 -0
- package/lib/typescript/src/stores/interstitial-ads-store.d.ts.map +1 -0
- package/lib/typescript/src/stores/native-ads-store.d.ts +36 -0
- package/lib/typescript/src/stores/native-ads-store.d.ts.map +1 -0
- package/lib/typescript/src/stores/rewarded-ads-store.d.ts +39 -0
- package/lib/typescript/src/stores/rewarded-ads-store.d.ts.map +1 -0
- package/lib/typescript/src/stores/rewarded-interstitial-ads-store.d.ts +39 -0
- package/lib/typescript/src/stores/rewarded-interstitial-ads-store.d.ts.map +1 -0
- package/lib/typescript/src/types/ads-types.d.ts +164 -0
- package/lib/typescript/src/types/ads-types.d.ts.map +1 -0
- package/package.json +177 -0
- package/src/ads-manager/AppOpenAdsManager.ts +155 -0
- package/src/ads-manager/GoogleMobileAdsManager.ts +68 -0
- package/src/ads-manager/InterstitialAdsManager.ts +371 -0
- package/src/ads-manager/NativeAdsManager.ts +445 -0
- package/src/ads-manager/RewardedAdsManager.ts +383 -0
- package/src/ads-manager/RewardedInterstitialAdsManager.ts +410 -0
- package/src/components/BannerAdComponent.tsx +205 -0
- package/src/components/FullscreenStyles.ts +158 -0
- package/src/components/NativeAdComponent.tsx +208 -0
- package/src/components/NativeAdFullscreenComponent.tsx +261 -0
- package/src/components/NativeStyles.ts +141 -0
- package/src/event/custom-event.ts +30 -0
- package/src/hook/useAppOpenAd.ts +161 -0
- package/src/hook/useInterstitialAd.ts +195 -0
- package/src/hook/useNativeAd.ts +173 -0
- package/src/hook/useRewardedAd.ts +205 -0
- package/src/hook/useRewardedInterstitialAd.ts +212 -0
- package/src/index.tsx +33 -0
- package/src/stores/interstitial-ads-store.ts +287 -0
- package/src/stores/native-ads-store.ts +272 -0
- package/src/stores/rewarded-ads-store.ts +290 -0
- package/src/stores/rewarded-interstitial-ads-store.ts +318 -0
- package/src/types/ads-types.ts +239 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useCallback } from 'react';
|
|
4
|
+
import { useInterstitialAdStore } from "../stores/interstitial-ads-store.js";
|
|
5
|
+
import { AdStatus } from "../types/ads-types.js";
|
|
6
|
+
import { interstitialAdsManager } from "../ads-manager/InterstitialAdsManager.js";
|
|
7
|
+
|
|
8
|
+
// Merge InterstitialAdConfig với UseInterstitialAdOptions
|
|
9
|
+
|
|
10
|
+
export const useInterstitialAd = config => {
|
|
11
|
+
const {
|
|
12
|
+
adKey,
|
|
13
|
+
adId,
|
|
14
|
+
timeout,
|
|
15
|
+
maxRetries,
|
|
16
|
+
adHighpriorityId,
|
|
17
|
+
showOnAppStateChange,
|
|
18
|
+
// UseInterstitialAdOptions fields
|
|
19
|
+
autoLoad = false,
|
|
20
|
+
onLoad,
|
|
21
|
+
onDisplay,
|
|
22
|
+
onError,
|
|
23
|
+
onClosed,
|
|
24
|
+
onOpened,
|
|
25
|
+
onClicked
|
|
26
|
+
} = config;
|
|
27
|
+
|
|
28
|
+
// Zustand selectors
|
|
29
|
+
const ad = useInterstitialAdStore(state => state.getAd(adKey));
|
|
30
|
+
const isLoading = useInterstitialAdStore(state => state.isLoading(adKey));
|
|
31
|
+
const error = useInterstitialAdStore(state => state.getError(adKey));
|
|
32
|
+
const isUsingHighPriority = useInterstitialAdStore(state => state.isUsingHighPriority(adKey));
|
|
33
|
+
const hasTriedHighPriority = useInterstitialAdStore(state => state.hasTriedHighPriority(adKey));
|
|
34
|
+
|
|
35
|
+
// Zustand actions
|
|
36
|
+
const preloadAd = useInterstitialAdStore(state => state.preloadAd);
|
|
37
|
+
const loadAd = useInterstitialAdStore(state => state.loadAd);
|
|
38
|
+
const displayAd = useInterstitialAdStore(state => state.displayAd);
|
|
39
|
+
const removeAd = useInterstitialAdStore(state => state.removeAd);
|
|
40
|
+
const refreshAd = useInterstitialAdStore(state => state.refreshAd);
|
|
41
|
+
|
|
42
|
+
// Memoized callbacks
|
|
43
|
+
const handleLoadAd = useCallback(async customConfig => {
|
|
44
|
+
const finalConfig = {
|
|
45
|
+
adKey,
|
|
46
|
+
adId,
|
|
47
|
+
showOnAppStateChange,
|
|
48
|
+
timeout,
|
|
49
|
+
maxRetries,
|
|
50
|
+
adHighpriorityId,
|
|
51
|
+
...customConfig
|
|
52
|
+
};
|
|
53
|
+
await loadAd(finalConfig);
|
|
54
|
+
}, [adKey, adId, loadAd, showOnAppStateChange, timeout, maxRetries, adHighpriorityId]);
|
|
55
|
+
const handlePreloadAd = useCallback(async customConfig => {
|
|
56
|
+
const finalConfig = {
|
|
57
|
+
adKey,
|
|
58
|
+
adId,
|
|
59
|
+
showOnAppStateChange,
|
|
60
|
+
timeout,
|
|
61
|
+
maxRetries,
|
|
62
|
+
adHighpriorityId,
|
|
63
|
+
...customConfig
|
|
64
|
+
};
|
|
65
|
+
await preloadAd(finalConfig);
|
|
66
|
+
}, [adKey, adId, preloadAd, showOnAppStateChange, timeout, maxRetries, adHighpriorityId]);
|
|
67
|
+
const handleDisplayAd = useCallback(async () => {
|
|
68
|
+
const displayedAd = await displayAd(adKey);
|
|
69
|
+
if (displayedAd && onDisplay) {
|
|
70
|
+
onDisplay(displayedAd);
|
|
71
|
+
}
|
|
72
|
+
return displayedAd;
|
|
73
|
+
}, [adKey, displayAd, onDisplay]);
|
|
74
|
+
const handleRemoveAd = useCallback(() => {
|
|
75
|
+
removeAd(adKey);
|
|
76
|
+
}, [adKey, removeAd]);
|
|
77
|
+
const handleRefreshAd = useCallback(async () => {
|
|
78
|
+
await refreshAd(adKey);
|
|
79
|
+
}, [adKey, refreshAd]);
|
|
80
|
+
|
|
81
|
+
// Auto load effect
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
if (autoLoad && !ad) {
|
|
84
|
+
handleLoadAd();
|
|
85
|
+
}
|
|
86
|
+
}, [autoLoad, ad, handleLoadAd]);
|
|
87
|
+
|
|
88
|
+
// Event callbacks
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (ad?.status === AdStatus.LOADED && onLoad) {
|
|
91
|
+
onLoad(ad);
|
|
92
|
+
}
|
|
93
|
+
}, [ad?.status, ad, onLoad]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (ad?.status === AdStatus.DISPLAYED && onDisplay) {
|
|
96
|
+
onDisplay(ad);
|
|
97
|
+
}
|
|
98
|
+
}, [ad?.status, ad, onDisplay]);
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (ad?.status === AdStatus.ERROR && ad.error && onError) {
|
|
101
|
+
onError(ad.error, ad);
|
|
102
|
+
}
|
|
103
|
+
}, [ad?.status, ad, onError]);
|
|
104
|
+
|
|
105
|
+
// Thêm các event listeners mới cho các sự kiện từ Google Mobile Ads
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (!ad) return;
|
|
108
|
+
|
|
109
|
+
// Lắng nghe sự kiện từ InterstitialAdsManager
|
|
110
|
+
const handleAdOpened = openedAd => {
|
|
111
|
+
if (openedAd.adKey === adKey && onOpened) {
|
|
112
|
+
onOpened(openedAd);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const handleAdClicked = clickedAd => {
|
|
116
|
+
if (clickedAd.adKey === adKey && onClicked) {
|
|
117
|
+
onClicked(clickedAd);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const handleAdClosed = closedAd => {
|
|
121
|
+
if (closedAd.adKey === adKey && onClosed) {
|
|
122
|
+
onClosed(closedAd);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// Đăng ký event listeners
|
|
127
|
+
interstitialAdsManager.on('adOpened', handleAdOpened);
|
|
128
|
+
interstitialAdsManager.on('adClicked', handleAdClicked);
|
|
129
|
+
interstitialAdsManager.on('adClosed', handleAdClosed);
|
|
130
|
+
|
|
131
|
+
// Cleanup listeners khi component unmount
|
|
132
|
+
return () => {
|
|
133
|
+
interstitialAdsManager.off('adOpened', handleAdOpened);
|
|
134
|
+
interstitialAdsManager.off('adClicked', handleAdClicked);
|
|
135
|
+
interstitialAdsManager.off('adClosed', handleAdClosed);
|
|
136
|
+
};
|
|
137
|
+
}, [adKey, onOpened, onClicked, onClosed, ad]);
|
|
138
|
+
return {
|
|
139
|
+
// State
|
|
140
|
+
ad,
|
|
141
|
+
isLoading,
|
|
142
|
+
error,
|
|
143
|
+
status: ad?.status || AdStatus.IDLE,
|
|
144
|
+
isLoaded: ad?.status === AdStatus.LOADED,
|
|
145
|
+
isDisplayed: ad?.status === AdStatus.DISPLAYED,
|
|
146
|
+
hasError: ad?.status === AdStatus.ERROR,
|
|
147
|
+
isUsingHighPriority,
|
|
148
|
+
hasTriedHighPriority,
|
|
149
|
+
// Actions
|
|
150
|
+
loadAd: handleLoadAd,
|
|
151
|
+
preloadAd: handlePreloadAd,
|
|
152
|
+
displayAd: handleDisplayAd,
|
|
153
|
+
removeAd: handleRemoveAd,
|
|
154
|
+
refreshAd: handleRefreshAd
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=useInterstitialAd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useCallback","useInterstitialAdStore","AdStatus","interstitialAdsManager","useInterstitialAd","config","adKey","adId","timeout","maxRetries","adHighpriorityId","showOnAppStateChange","autoLoad","onLoad","onDisplay","onError","onClosed","onOpened","onClicked","ad","state","getAd","isLoading","error","getError","isUsingHighPriority","hasTriedHighPriority","preloadAd","loadAd","displayAd","removeAd","refreshAd","handleLoadAd","customConfig","finalConfig","handlePreloadAd","handleDisplayAd","displayedAd","handleRemoveAd","handleRefreshAd","status","LOADED","DISPLAYED","ERROR","handleAdOpened","openedAd","handleAdClicked","clickedAd","handleAdClosed","closedAd","on","off","IDLE","isLoaded","isDisplayed","hasError"],"sourceRoot":"../../../src","sources":["hook/useInterstitialAd.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useCallback } from 'react';
|
|
4
|
+
import { useNativeAdStore } from "../stores/native-ads-store.js";
|
|
5
|
+
import { AdStatus } from "../types/ads-types.js";
|
|
6
|
+
import { nativeAdsManager } from "../ads-manager/NativeAdsManager.js";
|
|
7
|
+
|
|
8
|
+
// Merge AdConfig với UseNativeAdOptions
|
|
9
|
+
|
|
10
|
+
export const useNativeAd = config => {
|
|
11
|
+
const {
|
|
12
|
+
adKey,
|
|
13
|
+
adId,
|
|
14
|
+
timeout,
|
|
15
|
+
maxRetries,
|
|
16
|
+
adHighpriorityId,
|
|
17
|
+
// UseNativeAdOptions fields
|
|
18
|
+
autoLoad = false,
|
|
19
|
+
onLoad,
|
|
20
|
+
onDisplay,
|
|
21
|
+
onError,
|
|
22
|
+
onClicked,
|
|
23
|
+
onImpression
|
|
24
|
+
} = config;
|
|
25
|
+
|
|
26
|
+
// Zustand selectors
|
|
27
|
+
const ad = useNativeAdStore(state => state.getAd(adKey));
|
|
28
|
+
const isLoading = useNativeAdStore(state => state.isLoading(adKey));
|
|
29
|
+
const error = useNativeAdStore(state => state.getError(adKey));
|
|
30
|
+
const isUsingHighPriority = useNativeAdStore(state => state.isUsingHighPriority(adKey));
|
|
31
|
+
const hasTriedHighPriority = useNativeAdStore(state => state.hasTriedHighPriority(adKey));
|
|
32
|
+
|
|
33
|
+
// Zustand actions
|
|
34
|
+
const preloadAd = useNativeAdStore(state => state.preloadAd);
|
|
35
|
+
const loadAd = useNativeAdStore(state => state.loadAd);
|
|
36
|
+
const displayAd = useNativeAdStore(state => state.displayAd);
|
|
37
|
+
const removeAd = useNativeAdStore(state => state.removeAd);
|
|
38
|
+
const refreshAd = useNativeAdStore(state => state.refreshAd);
|
|
39
|
+
|
|
40
|
+
// Memoized callbacks
|
|
41
|
+
const handleLoadAd = useCallback(async customConfig => {
|
|
42
|
+
const finalConfig = {
|
|
43
|
+
adKey,
|
|
44
|
+
adId,
|
|
45
|
+
timeout,
|
|
46
|
+
maxRetries,
|
|
47
|
+
adHighpriorityId,
|
|
48
|
+
...customConfig
|
|
49
|
+
};
|
|
50
|
+
await loadAd(finalConfig);
|
|
51
|
+
}, [adKey, adId, timeout, maxRetries, adHighpriorityId, loadAd]);
|
|
52
|
+
const handlePreloadAd = useCallback(async customConfig => {
|
|
53
|
+
const finalConfig = {
|
|
54
|
+
adKey,
|
|
55
|
+
adId,
|
|
56
|
+
timeout,
|
|
57
|
+
maxRetries,
|
|
58
|
+
adHighpriorityId,
|
|
59
|
+
...customConfig
|
|
60
|
+
};
|
|
61
|
+
await preloadAd(finalConfig);
|
|
62
|
+
}, [adKey, adId, timeout, maxRetries, adHighpriorityId, preloadAd]);
|
|
63
|
+
const handleDisplayAd = useCallback(async () => {
|
|
64
|
+
const displayedAd = await displayAd(adKey);
|
|
65
|
+
if (displayedAd && onDisplay) {
|
|
66
|
+
onDisplay(displayedAd);
|
|
67
|
+
}
|
|
68
|
+
return displayedAd;
|
|
69
|
+
}, [adKey, displayAd, onDisplay]);
|
|
70
|
+
const handleRemoveAd = useCallback(() => {
|
|
71
|
+
removeAd(adKey);
|
|
72
|
+
}, [adKey, removeAd]);
|
|
73
|
+
const handleRefreshAd = useCallback(async () => {
|
|
74
|
+
await refreshAd(adKey);
|
|
75
|
+
}, [adKey, refreshAd]);
|
|
76
|
+
|
|
77
|
+
// Auto load effect
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (autoLoad && !ad) {
|
|
80
|
+
handleLoadAd();
|
|
81
|
+
}
|
|
82
|
+
}, [autoLoad, ad, handleLoadAd]);
|
|
83
|
+
|
|
84
|
+
// Event callbacks
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
if (ad?.status === AdStatus.LOADED && onLoad) {
|
|
87
|
+
onLoad(ad);
|
|
88
|
+
}
|
|
89
|
+
}, [ad?.status, ad, onLoad]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (ad?.status === AdStatus.DISPLAYED && onDisplay) {
|
|
92
|
+
onDisplay(ad);
|
|
93
|
+
}
|
|
94
|
+
}, [ad?.status, ad, onDisplay]);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (ad?.status === AdStatus.ERROR && ad.error && onError) {
|
|
97
|
+
onError(ad.error, ad);
|
|
98
|
+
}
|
|
99
|
+
}, [ad?.status, ad, onError]);
|
|
100
|
+
|
|
101
|
+
// Click event listener
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
if (!ad || !onClicked) return;
|
|
104
|
+
const handleClick = data => {
|
|
105
|
+
if (data.adId === ad.adId) {
|
|
106
|
+
onClicked(ad);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
nativeAdsManager.on('adClicked', handleClick);
|
|
110
|
+
return () => {
|
|
111
|
+
nativeAdsManager.off('adClicked', handleClick);
|
|
112
|
+
};
|
|
113
|
+
}, [ad, onClicked]);
|
|
114
|
+
|
|
115
|
+
// Impression event listener
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
if (!ad || !onImpression) return;
|
|
118
|
+
const handleImpression = data => {
|
|
119
|
+
if (data.adId === ad.adId) {
|
|
120
|
+
onImpression(ad);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
nativeAdsManager.on('adImpression', handleImpression);
|
|
124
|
+
return () => {
|
|
125
|
+
nativeAdsManager.off('adImpression', handleImpression);
|
|
126
|
+
};
|
|
127
|
+
}, [ad, onImpression]);
|
|
128
|
+
return {
|
|
129
|
+
// State
|
|
130
|
+
ad,
|
|
131
|
+
isLoading,
|
|
132
|
+
error,
|
|
133
|
+
status: ad?.status || AdStatus.IDLE,
|
|
134
|
+
isLoaded: ad?.status === AdStatus.LOADED,
|
|
135
|
+
isDisplayed: ad?.status === AdStatus.DISPLAYED,
|
|
136
|
+
hasError: ad?.status === AdStatus.ERROR,
|
|
137
|
+
isUsingHighPriority,
|
|
138
|
+
hasTriedHighPriority,
|
|
139
|
+
// Actions
|
|
140
|
+
loadAd: handleLoadAd,
|
|
141
|
+
preloadAd: handlePreloadAd,
|
|
142
|
+
displayAd: handleDisplayAd,
|
|
143
|
+
removeAd: handleRemoveAd,
|
|
144
|
+
refreshAd: handleRefreshAd
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=useNativeAd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useCallback","useNativeAdStore","AdStatus","nativeAdsManager","useNativeAd","config","adKey","adId","timeout","maxRetries","adHighpriorityId","autoLoad","onLoad","onDisplay","onError","onClicked","onImpression","ad","state","getAd","isLoading","error","getError","isUsingHighPriority","hasTriedHighPriority","preloadAd","loadAd","displayAd","removeAd","refreshAd","handleLoadAd","customConfig","finalConfig","handlePreloadAd","handleDisplayAd","displayedAd","handleRemoveAd","handleRefreshAd","status","LOADED","DISPLAYED","ERROR","handleClick","data","on","off","handleImpression","IDLE","isLoaded","isDisplayed","hasError"],"sourceRoot":"../../../src","sources":["hook/useNativeAd.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useCallback } from 'react';
|
|
4
|
+
import { useRewardedAdStore } from "../stores/rewarded-ads-store.js";
|
|
5
|
+
import { AdStatus } from "../types/ads-types.js";
|
|
6
|
+
import { rewardedAdsManager } from "../ads-manager/RewardedAdsManager.js";
|
|
7
|
+
|
|
8
|
+
// Merge RewardedAdConfig với UseRewardedAdOptions
|
|
9
|
+
|
|
10
|
+
export const useRewardedAd = config => {
|
|
11
|
+
const {
|
|
12
|
+
adKey,
|
|
13
|
+
adId,
|
|
14
|
+
timeout,
|
|
15
|
+
maxRetries,
|
|
16
|
+
adHighpriorityId,
|
|
17
|
+
showOnAppStateChange,
|
|
18
|
+
// UseRewardedAdOptions fields
|
|
19
|
+
autoLoad = false,
|
|
20
|
+
onLoad,
|
|
21
|
+
onDisplay,
|
|
22
|
+
onError,
|
|
23
|
+
onReward,
|
|
24
|
+
onOpened,
|
|
25
|
+
onClicked,
|
|
26
|
+
onClosed
|
|
27
|
+
} = config;
|
|
28
|
+
|
|
29
|
+
// Zustand selectors
|
|
30
|
+
const ad = useRewardedAdStore(state => state.getAd(adKey));
|
|
31
|
+
const isLoading = useRewardedAdStore(state => state.isLoading(adKey));
|
|
32
|
+
const error = useRewardedAdStore(state => state.getError(adKey));
|
|
33
|
+
const isUsingHighPriority = useRewardedAdStore(state => state.isUsingHighPriority(adKey));
|
|
34
|
+
const hasTriedHighPriority = useRewardedAdStore(state => state.hasTriedHighPriority(adKey));
|
|
35
|
+
|
|
36
|
+
// Zustand actions
|
|
37
|
+
const preloadAd = useRewardedAdStore(state => state.preloadAd);
|
|
38
|
+
const loadAd = useRewardedAdStore(state => state.loadAd);
|
|
39
|
+
const displayAd = useRewardedAdStore(state => state.displayAd);
|
|
40
|
+
const removeAd = useRewardedAdStore(state => state.removeAd);
|
|
41
|
+
const refreshAd = useRewardedAdStore(state => state.refreshAd);
|
|
42
|
+
|
|
43
|
+
// Memoized callbacks
|
|
44
|
+
const handleLoadAd = useCallback(async customConfig => {
|
|
45
|
+
const finalConfig = {
|
|
46
|
+
adKey,
|
|
47
|
+
adId,
|
|
48
|
+
showOnAppStateChange,
|
|
49
|
+
timeout,
|
|
50
|
+
maxRetries,
|
|
51
|
+
adHighpriorityId,
|
|
52
|
+
...customConfig
|
|
53
|
+
};
|
|
54
|
+
await loadAd(finalConfig);
|
|
55
|
+
}, [adKey, adId, loadAd, showOnAppStateChange, timeout, maxRetries, adHighpriorityId]);
|
|
56
|
+
const handlePreloadAd = useCallback(async customConfig => {
|
|
57
|
+
const finalConfig = {
|
|
58
|
+
adKey,
|
|
59
|
+
adId,
|
|
60
|
+
showOnAppStateChange,
|
|
61
|
+
timeout,
|
|
62
|
+
maxRetries,
|
|
63
|
+
adHighpriorityId,
|
|
64
|
+
...customConfig
|
|
65
|
+
};
|
|
66
|
+
await preloadAd(finalConfig);
|
|
67
|
+
}, [adKey, adId, preloadAd, showOnAppStateChange, timeout, maxRetries, adHighpriorityId]);
|
|
68
|
+
const handleDisplayAd = useCallback(async () => {
|
|
69
|
+
const result = await displayAd(adKey);
|
|
70
|
+
if (result.ad && onDisplay) {
|
|
71
|
+
onDisplay(result.ad);
|
|
72
|
+
}
|
|
73
|
+
if (result.reward && onReward) {
|
|
74
|
+
onReward(result.reward);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}, [adKey, displayAd, onDisplay, onReward]);
|
|
78
|
+
const handleRemoveAd = useCallback(() => {
|
|
79
|
+
removeAd(adKey);
|
|
80
|
+
}, [adKey, removeAd]);
|
|
81
|
+
const handleRefreshAd = useCallback(async () => {
|
|
82
|
+
await refreshAd(adKey);
|
|
83
|
+
}, [adKey, refreshAd]);
|
|
84
|
+
|
|
85
|
+
// Auto load effect
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (autoLoad && !ad) {
|
|
88
|
+
handleLoadAd();
|
|
89
|
+
}
|
|
90
|
+
}, [autoLoad, ad, handleLoadAd]);
|
|
91
|
+
|
|
92
|
+
// Event callbacks
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
if (ad?.status === AdStatus.LOADED && onLoad) {
|
|
95
|
+
onLoad(ad);
|
|
96
|
+
}
|
|
97
|
+
}, [ad?.status, ad, onLoad]);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (ad?.status === AdStatus.DISPLAYED && onDisplay) {
|
|
100
|
+
onDisplay(ad);
|
|
101
|
+
}
|
|
102
|
+
}, [ad?.status, ad, onDisplay]);
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
if (ad?.status === AdStatus.ERROR && ad.error && onError) {
|
|
105
|
+
onError(ad.error, ad);
|
|
106
|
+
}
|
|
107
|
+
}, [ad?.status, ad, onError]);
|
|
108
|
+
|
|
109
|
+
// Lắng nghe các sự kiện từ RewardedAdsManager
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
if (!ad) return;
|
|
112
|
+
const handleAdOpened = openedAd => {
|
|
113
|
+
if (openedAd.adKey === adKey && onOpened) {
|
|
114
|
+
onOpened(openedAd);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const handleAdClicked = clickedAd => {
|
|
118
|
+
if (clickedAd.adKey === adKey && onClicked) {
|
|
119
|
+
onClicked(clickedAd);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const handleAdClosed = closedAd => {
|
|
123
|
+
if (closedAd.adKey === adKey && onClosed) {
|
|
124
|
+
onClosed(closedAd);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const handleEarnedReward = ({
|
|
128
|
+
ad: rewardAd,
|
|
129
|
+
reward
|
|
130
|
+
}) => {
|
|
131
|
+
if (rewardAd.adKey === adKey && onReward) {
|
|
132
|
+
onReward(reward);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
rewardedAdsManager.on('adOpened', handleAdOpened);
|
|
136
|
+
rewardedAdsManager.on('adClicked', handleAdClicked);
|
|
137
|
+
rewardedAdsManager.on('adClosed', handleAdClosed);
|
|
138
|
+
rewardedAdsManager.on('adEarnedReward', handleEarnedReward);
|
|
139
|
+
return () => {
|
|
140
|
+
rewardedAdsManager.off('adOpened', handleAdOpened);
|
|
141
|
+
rewardedAdsManager.off('adClicked', handleAdClicked);
|
|
142
|
+
rewardedAdsManager.off('adClosed', handleAdClosed);
|
|
143
|
+
rewardedAdsManager.off('adEarnedReward', handleEarnedReward);
|
|
144
|
+
};
|
|
145
|
+
}, [adKey, onOpened, onClicked, onClosed, onReward, ad]);
|
|
146
|
+
return {
|
|
147
|
+
// State
|
|
148
|
+
ad,
|
|
149
|
+
isLoading,
|
|
150
|
+
error,
|
|
151
|
+
status: ad?.status || AdStatus.IDLE,
|
|
152
|
+
isLoaded: ad?.status === AdStatus.LOADED,
|
|
153
|
+
isDisplayed: ad?.status === AdStatus.DISPLAYED,
|
|
154
|
+
hasError: ad?.status === AdStatus.ERROR,
|
|
155
|
+
reward: ad?.reward,
|
|
156
|
+
isUsingHighPriority,
|
|
157
|
+
hasTriedHighPriority,
|
|
158
|
+
// Actions
|
|
159
|
+
loadAd: handleLoadAd,
|
|
160
|
+
preloadAd: handlePreloadAd,
|
|
161
|
+
displayAd: handleDisplayAd,
|
|
162
|
+
removeAd: handleRemoveAd,
|
|
163
|
+
refreshAd: handleRefreshAd
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=useRewardedAd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useCallback","useRewardedAdStore","AdStatus","rewardedAdsManager","useRewardedAd","config","adKey","adId","timeout","maxRetries","adHighpriorityId","showOnAppStateChange","autoLoad","onLoad","onDisplay","onError","onReward","onOpened","onClicked","onClosed","ad","state","getAd","isLoading","error","getError","isUsingHighPriority","hasTriedHighPriority","preloadAd","loadAd","displayAd","removeAd","refreshAd","handleLoadAd","customConfig","finalConfig","handlePreloadAd","handleDisplayAd","result","reward","handleRemoveAd","handleRefreshAd","status","LOADED","DISPLAYED","ERROR","handleAdOpened","openedAd","handleAdClicked","clickedAd","handleAdClosed","closedAd","handleEarnedReward","rewardAd","on","off","IDLE","isLoaded","isDisplayed","hasError"],"sourceRoot":"../../../src","sources":["hook/useRewardedAd.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useCallback } from 'react';
|
|
4
|
+
import { useRewardedInterstitialAdStore } from "../stores/rewarded-interstitial-ads-store.js";
|
|
5
|
+
import { AdStatus } from "../types/ads-types.js";
|
|
6
|
+
import { rewardedInterstitialAdsManager } from "../ads-manager/RewardedInterstitialAdsManager.js";
|
|
7
|
+
|
|
8
|
+
// Merge RewardedInterstitialAdConfig với UseRewardedInterstitialAdOptions
|
|
9
|
+
|
|
10
|
+
export const useRewardedInterstitialAd = config => {
|
|
11
|
+
const {
|
|
12
|
+
adKey,
|
|
13
|
+
adId,
|
|
14
|
+
timeout,
|
|
15
|
+
maxRetries,
|
|
16
|
+
adHighpriorityId,
|
|
17
|
+
showOnAppStateChange,
|
|
18
|
+
// UseRewardedInterstitialAdOptions fields
|
|
19
|
+
autoLoad = false,
|
|
20
|
+
onLoad,
|
|
21
|
+
onDisplay,
|
|
22
|
+
onError,
|
|
23
|
+
onReward,
|
|
24
|
+
onOpened,
|
|
25
|
+
onClicked,
|
|
26
|
+
onClosed
|
|
27
|
+
} = config;
|
|
28
|
+
|
|
29
|
+
// Zustand selectors
|
|
30
|
+
const ad = useRewardedInterstitialAdStore(state => state.getAd(adKey));
|
|
31
|
+
const isLoading = useRewardedInterstitialAdStore(state => state.isLoading(adKey));
|
|
32
|
+
const error = useRewardedInterstitialAdStore(state => state.getError(adKey));
|
|
33
|
+
const isUsingHighPriority = useRewardedInterstitialAdStore(state => state.isUsingHighPriority(adKey));
|
|
34
|
+
const hasTriedHighPriority = useRewardedInterstitialAdStore(state => state.hasTriedHighPriority(adKey));
|
|
35
|
+
|
|
36
|
+
// Zustand actions
|
|
37
|
+
const preloadAd = useRewardedInterstitialAdStore(state => state.preloadAd);
|
|
38
|
+
const loadAd = useRewardedInterstitialAdStore(state => state.loadAd);
|
|
39
|
+
const displayAd = useRewardedInterstitialAdStore(state => state.displayAd);
|
|
40
|
+
const removeAd = useRewardedInterstitialAdStore(state => state.removeAd);
|
|
41
|
+
const refreshAd = useRewardedInterstitialAdStore(state => state.refreshAd);
|
|
42
|
+
|
|
43
|
+
// Memoized callbacks
|
|
44
|
+
const handleLoadAd = useCallback(async customConfig => {
|
|
45
|
+
const finalConfig = {
|
|
46
|
+
adKey,
|
|
47
|
+
adId,
|
|
48
|
+
showOnAppStateChange,
|
|
49
|
+
timeout,
|
|
50
|
+
maxRetries,
|
|
51
|
+
adHighpriorityId,
|
|
52
|
+
...customConfig
|
|
53
|
+
};
|
|
54
|
+
await loadAd(finalConfig);
|
|
55
|
+
}, [adKey, adId, loadAd, showOnAppStateChange, timeout, maxRetries, adHighpriorityId]);
|
|
56
|
+
const handlePreloadAd = useCallback(async customConfig => {
|
|
57
|
+
const finalConfig = {
|
|
58
|
+
adKey,
|
|
59
|
+
adId,
|
|
60
|
+
showOnAppStateChange,
|
|
61
|
+
timeout,
|
|
62
|
+
maxRetries,
|
|
63
|
+
adHighpriorityId,
|
|
64
|
+
...customConfig
|
|
65
|
+
};
|
|
66
|
+
await preloadAd(finalConfig);
|
|
67
|
+
}, [adKey, adId, preloadAd, showOnAppStateChange, timeout, maxRetries, adHighpriorityId]);
|
|
68
|
+
const handleDisplayAd = useCallback(async () => {
|
|
69
|
+
const result = await displayAd(adKey);
|
|
70
|
+
if (result.ad && onDisplay) {
|
|
71
|
+
onDisplay(result.ad);
|
|
72
|
+
}
|
|
73
|
+
if (result.reward && onReward) {
|
|
74
|
+
onReward(result.reward);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}, [adKey, displayAd, onDisplay, onReward]);
|
|
78
|
+
const handleRemoveAd = useCallback(() => {
|
|
79
|
+
removeAd(adKey);
|
|
80
|
+
}, [adKey, removeAd]);
|
|
81
|
+
const handleRefreshAd = useCallback(async () => {
|
|
82
|
+
await refreshAd(adKey);
|
|
83
|
+
}, [adKey, refreshAd]);
|
|
84
|
+
|
|
85
|
+
// Auto load effect
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (autoLoad && !ad) {
|
|
88
|
+
handleLoadAd();
|
|
89
|
+
}
|
|
90
|
+
}, [autoLoad, ad, handleLoadAd]);
|
|
91
|
+
|
|
92
|
+
// Event callbacks
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
if (ad?.status === AdStatus.LOADED && onLoad) {
|
|
95
|
+
onLoad(ad);
|
|
96
|
+
}
|
|
97
|
+
}, [ad?.status, ad, onLoad]);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (ad?.status === AdStatus.DISPLAYED && onDisplay) {
|
|
100
|
+
onDisplay(ad);
|
|
101
|
+
}
|
|
102
|
+
}, [ad?.status, ad, onDisplay]);
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
if (ad?.status === AdStatus.ERROR && ad.error && onError) {
|
|
105
|
+
onError(ad.error, ad);
|
|
106
|
+
}
|
|
107
|
+
}, [ad?.status, ad, onError]);
|
|
108
|
+
|
|
109
|
+
// Lắng nghe các sự kiện từ RewardedInterstitialAdsManager
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
if (!ad) return;
|
|
112
|
+
const handleAdOpened = openedAd => {
|
|
113
|
+
if (openedAd.adKey === adKey && onOpened) {
|
|
114
|
+
onOpened(openedAd);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const handleAdClicked = clickedAd => {
|
|
118
|
+
if (clickedAd.adKey === adKey && onClicked) {
|
|
119
|
+
onClicked(clickedAd);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const handleAdClosed = closedAd => {
|
|
123
|
+
if (closedAd.adKey === adKey && onClosed) {
|
|
124
|
+
onClosed(closedAd);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const handleEarnedReward = ({
|
|
128
|
+
ad: rewardAd,
|
|
129
|
+
reward
|
|
130
|
+
}) => {
|
|
131
|
+
if (rewardAd.adKey === adKey && onReward) {
|
|
132
|
+
onReward(reward);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
rewardedInterstitialAdsManager.on('adOpened', handleAdOpened);
|
|
136
|
+
rewardedInterstitialAdsManager.on('adClicked', handleAdClicked);
|
|
137
|
+
rewardedInterstitialAdsManager.on('adClosed', handleAdClosed);
|
|
138
|
+
rewardedInterstitialAdsManager.on('adEarnedReward', handleEarnedReward);
|
|
139
|
+
return () => {
|
|
140
|
+
rewardedInterstitialAdsManager.off('adOpened', handleAdOpened);
|
|
141
|
+
rewardedInterstitialAdsManager.off('adClicked', handleAdClicked);
|
|
142
|
+
rewardedInterstitialAdsManager.off('adClosed', handleAdClosed);
|
|
143
|
+
rewardedInterstitialAdsManager.off('adEarnedReward', handleEarnedReward);
|
|
144
|
+
};
|
|
145
|
+
}, [adKey, onOpened, onClicked, onClosed, onReward, ad]);
|
|
146
|
+
return {
|
|
147
|
+
// State
|
|
148
|
+
ad,
|
|
149
|
+
isLoading,
|
|
150
|
+
error,
|
|
151
|
+
status: ad?.status || AdStatus.IDLE,
|
|
152
|
+
isLoaded: ad?.status === AdStatus.LOADED,
|
|
153
|
+
isDisplayed: ad?.status === AdStatus.DISPLAYED,
|
|
154
|
+
hasError: ad?.status === AdStatus.ERROR,
|
|
155
|
+
reward: ad?.reward,
|
|
156
|
+
isUsingHighPriority,
|
|
157
|
+
hasTriedHighPriority,
|
|
158
|
+
// Actions
|
|
159
|
+
loadAd: handleLoadAd,
|
|
160
|
+
preloadAd: handlePreloadAd,
|
|
161
|
+
displayAd: handleDisplayAd,
|
|
162
|
+
removeAd: handleRemoveAd,
|
|
163
|
+
refreshAd: handleRefreshAd
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=useRewardedInterstitialAd.js.map
|