adwhale-sdk-react-native 2.7.204 → 2.7.400

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.
Files changed (109) hide show
  1. package/AdwhaleSdkReactNative.podspec +22 -0
  2. package/README.md +95 -91
  3. package/android/build.gradle +35 -1
  4. package/android/proguard-rules.pro +58 -0
  5. package/android/src/main/java/com/adwhalesdkreactnative/AdWhaleCustomNativeBinderFactory.java +18 -0
  6. package/android/src/main/java/com/adwhalesdkreactnative/AdwhaleSdkReactNativePackage.java +51 -6
  7. package/android/src/main/java/com/adwhalesdkreactnative/BinderFactory.java +9 -0
  8. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdSettingModule.java +148 -49
  9. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdView.java +46 -27
  10. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAppOpenAd.java +148 -0
  11. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationCustomNativeAdView.java +37 -46
  12. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationExitPopupAd.java +240 -0
  13. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java +205 -0
  14. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationLoggerModule.java +2 -1
  15. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationNativeAdViewListenerBridge.java +83 -0
  16. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationRewardAd.java +341 -6
  17. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTemplateNativeAdView.java +191 -70
  18. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTransitionPopupAd.java +218 -0
  19. package/android/src/main/java/com/adwhalesdkreactnative/RNWrapperView.java +137 -0
  20. package/android/src/main/java/com/adwhalesdkreactnative/SimpleBinderFactory.java +1 -1
  21. package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodArgConst.java +112 -0
  22. package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodCallConst.java +113 -0
  23. package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodResultConst.java +28 -0
  24. package/build/generated/ios/ReactAppDependencyProvider.podspec +34 -0
  25. package/ios/AdWhaleNativeCustomViewFactoryRegistry.swift +56 -0
  26. package/ios/AdwhaleSdkReactNative.mm +96 -5
  27. package/ios/AdwhaleSdkReactNativeModule.swift +148 -0
  28. package/ios/RNAdWhaleMediationAdViewManager.m +38 -0
  29. package/ios/RNAdWhaleMediationAdViewManager.swift +14 -0
  30. package/ios/RNAdWhaleMediationAppOpenAd.m +18 -0
  31. package/ios/RNAdWhaleMediationAppOpenAd.swift +175 -0
  32. package/ios/RNAdWhaleMediationCustomNativeAdViewManager.m +22 -0
  33. package/ios/RNAdWhaleMediationCustomNativeAdViewManager.swift +239 -0
  34. package/ios/RNAdWhaleMediationInterstitialAd.m +18 -0
  35. package/ios/RNAdWhaleMediationInterstitialAd.swift +161 -0
  36. package/ios/RNAdWhaleMediationRewardAd.m +22 -0
  37. package/ios/RNAdWhaleMediationRewardAd.swift +206 -0
  38. package/ios/WhaleMediationBannerContainer.swift +182 -0
  39. package/lib/module/AdWhaleAdView.js +58 -3
  40. package/lib/module/AdWhaleAdView.js.map +1 -1
  41. package/lib/module/AdWhaleAppOpenAd.js +223 -25
  42. package/lib/module/AdWhaleAppOpenAd.js.map +1 -1
  43. package/lib/module/AdWhaleExitPopupAd.js +93 -0
  44. package/lib/module/AdWhaleExitPopupAd.js.map +1 -0
  45. package/lib/module/AdWhaleInterstitialAd.js +146 -22
  46. package/lib/module/AdWhaleInterstitialAd.js.map +1 -1
  47. package/lib/module/AdWhaleMediationAds.js +75 -4
  48. package/lib/module/AdWhaleMediationAds.js.map +1 -1
  49. package/lib/module/AdWhaleNativeCustomView.js +59 -8
  50. package/lib/module/AdWhaleNativeCustomView.js.map +1 -1
  51. package/lib/module/AdWhaleNativeTemplateView.js +37 -19
  52. package/lib/module/AdWhaleNativeTemplateView.js.map +1 -1
  53. package/lib/module/AdWhaleRewardAd.js +221 -24
  54. package/lib/module/AdWhaleRewardAd.js.map +1 -1
  55. package/lib/module/AdWhaleTransitionPopupAd.js +87 -0
  56. package/lib/module/AdWhaleTransitionPopupAd.js.map +1 -0
  57. package/lib/module/NativeAdwhaleSdkReactNative.js +16 -1
  58. package/lib/module/NativeAdwhaleSdkReactNative.js.map +1 -1
  59. package/lib/module/constants/AdWhaleMethodArgConst.js +53 -0
  60. package/lib/module/constants/AdWhaleMethodArgConst.js.map +1 -0
  61. package/lib/module/constants/AdWhaleMethodCallConst.js +56 -0
  62. package/lib/module/constants/AdWhaleMethodCallConst.js.map +1 -0
  63. package/lib/module/constants/AdWhaleMethodResultConst.js +16 -0
  64. package/lib/module/constants/AdWhaleMethodResultConst.js.map +1 -0
  65. package/lib/module/index.js +10 -1
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/typescript/src/AdWhaleAdView.d.ts +20 -2
  68. package/lib/typescript/src/AdWhaleAdView.d.ts.map +1 -1
  69. package/lib/typescript/src/AdWhaleAppOpenAd.d.ts +10 -0
  70. package/lib/typescript/src/AdWhaleAppOpenAd.d.ts.map +1 -1
  71. package/lib/typescript/src/AdWhaleExitPopupAd.d.ts +36 -0
  72. package/lib/typescript/src/AdWhaleExitPopupAd.d.ts.map +1 -0
  73. package/lib/typescript/src/AdWhaleInterstitialAd.d.ts +16 -0
  74. package/lib/typescript/src/AdWhaleInterstitialAd.d.ts.map +1 -1
  75. package/lib/typescript/src/AdWhaleMediationAds.d.ts +13 -5
  76. package/lib/typescript/src/AdWhaleMediationAds.d.ts.map +1 -1
  77. package/lib/typescript/src/AdWhaleNativeCustomView.d.ts +7 -4
  78. package/lib/typescript/src/AdWhaleNativeCustomView.d.ts.map +1 -1
  79. package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts +20 -7
  80. package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts.map +1 -1
  81. package/lib/typescript/src/AdWhaleRewardAd.d.ts +63 -6
  82. package/lib/typescript/src/AdWhaleRewardAd.d.ts.map +1 -1
  83. package/lib/typescript/src/AdWhaleTransitionPopupAd.d.ts +33 -0
  84. package/lib/typescript/src/AdWhaleTransitionPopupAd.d.ts.map +1 -0
  85. package/lib/typescript/src/NativeAdwhaleSdkReactNative.d.ts +28 -6
  86. package/lib/typescript/src/NativeAdwhaleSdkReactNative.d.ts.map +1 -1
  87. package/lib/typescript/src/constants/AdWhaleMethodArgConst.d.ts +51 -0
  88. package/lib/typescript/src/constants/AdWhaleMethodArgConst.d.ts.map +1 -0
  89. package/lib/typescript/src/constants/AdWhaleMethodCallConst.d.ts +53 -0
  90. package/lib/typescript/src/constants/AdWhaleMethodCallConst.d.ts.map +1 -0
  91. package/lib/typescript/src/constants/AdWhaleMethodResultConst.d.ts +14 -0
  92. package/lib/typescript/src/constants/AdWhaleMethodResultConst.d.ts.map +1 -0
  93. package/lib/typescript/src/index.d.ts +10 -2
  94. package/lib/typescript/src/index.d.ts.map +1 -1
  95. package/package.json +1 -1
  96. package/src/AdWhaleAdView.tsx +92 -4
  97. package/src/AdWhaleAppOpenAd.ts +293 -38
  98. package/src/AdWhaleExitPopupAd.ts +183 -0
  99. package/src/AdWhaleInterstitialAd.ts +206 -36
  100. package/src/AdWhaleMediationAds.ts +108 -4
  101. package/src/AdWhaleNativeCustomView.tsx +85 -23
  102. package/src/AdWhaleNativeTemplateView.tsx +79 -42
  103. package/src/AdWhaleRewardAd.ts +317 -51
  104. package/src/AdWhaleTransitionPopupAd.ts +171 -0
  105. package/src/NativeAdwhaleSdkReactNative.ts +30 -6
  106. package/src/constants/AdWhaleMethodArgConst.ts +50 -0
  107. package/src/constants/AdWhaleMethodCallConst.ts +60 -0
  108. package/src/constants/AdWhaleMethodResultConst.ts +13 -0
  109. package/src/index.ts +35 -0
@@ -0,0 +1,171 @@
1
+ // src/AdWhaleTransitionPopupAd.ts
2
+ import {
3
+ NativeEventEmitter,
4
+ NativeModules,
5
+ Platform,
6
+ } from 'react-native';
7
+ import type { EmitterSubscription } from 'react-native';
8
+
9
+ export interface AdWhaleTransitionPopupAdErrorEvent {
10
+ statusCode: number;
11
+ message: string;
12
+ }
13
+
14
+ export interface AdWhaleTransitionPopupAdClosedEvent {
15
+ reasonId: number;
16
+ reasonMessage: string;
17
+ }
18
+
19
+ export interface AdWhaleTransitionPopupAdEvents {
20
+ onLoaded?: () => void;
21
+ onLoadFailed?: (event: AdWhaleTransitionPopupAdErrorEvent) => void;
22
+ onShowed?: () => void;
23
+ onShowFailed?: (event: AdWhaleTransitionPopupAdErrorEvent) => void;
24
+ onClicked?: () => void;
25
+ onClosed?: (event: AdWhaleTransitionPopupAdClosedEvent) => void;
26
+ }
27
+
28
+ export interface AdWhaleTransitionPopupGcoder {
29
+ lt: number;
30
+ lng: number;
31
+ }
32
+
33
+ interface RNAdWhaleMediationTransitionPopupAdNativeModule {
34
+ setPlacementName(placementName: string): void;
35
+ setRegion(region: string): void;
36
+ setGcoder(gcoder: { lt: number; lng: number }): void;
37
+ loadAd(placementUid: string): void;
38
+ showAd(): void;
39
+ destroy(): void;
40
+ resume(): void;
41
+ addListener(eventName: string): void;
42
+ removeListeners(count: number): void;
43
+ }
44
+
45
+ const LINKING_ERROR =
46
+ Platform.OS === 'android'
47
+ ? 'RNAdWhaleMediationTransitionPopupAd native module is not linked.'
48
+ : 'Transition Popup Ad is only supported on Android.';
49
+
50
+ const { RNAdWhaleMediationTransitionPopupAd } = NativeModules as {
51
+ RNAdWhaleMediationTransitionPopupAd?: RNAdWhaleMediationTransitionPopupAdNativeModule;
52
+ };
53
+
54
+ const transitionPopupEmitter = RNAdWhaleMediationTransitionPopupAd
55
+ ? new NativeEventEmitter(RNAdWhaleMediationTransitionPopupAd)
56
+ : null;
57
+
58
+ export const AdWhaleTransitionPopupAd = {
59
+ loadAd(
60
+ placementUid: string,
61
+ options?: {
62
+ placementName?: string;
63
+ region?: string;
64
+ gcoder?: AdWhaleTransitionPopupGcoder;
65
+ }
66
+ ) {
67
+ if (!RNAdWhaleMediationTransitionPopupAd) {
68
+ console.warn(LINKING_ERROR);
69
+ return;
70
+ }
71
+ if (options?.placementName != null) {
72
+ RNAdWhaleMediationTransitionPopupAd.setPlacementName(options.placementName);
73
+ }
74
+ if (options?.region != null) {
75
+ RNAdWhaleMediationTransitionPopupAd.setRegion(options.region);
76
+ }
77
+ if (options?.gcoder) {
78
+ RNAdWhaleMediationTransitionPopupAd.setGcoder(options.gcoder);
79
+ }
80
+ RNAdWhaleMediationTransitionPopupAd.loadAd(placementUid);
81
+ },
82
+
83
+ showAd() {
84
+ if (!RNAdWhaleMediationTransitionPopupAd) {
85
+ console.warn(LINKING_ERROR);
86
+ return;
87
+ }
88
+ RNAdWhaleMediationTransitionPopupAd.showAd();
89
+ },
90
+
91
+ destroy() {
92
+ if (!RNAdWhaleMediationTransitionPopupAd) {
93
+ console.warn(LINKING_ERROR);
94
+ return;
95
+ }
96
+ RNAdWhaleMediationTransitionPopupAd.destroy();
97
+ },
98
+
99
+ resume() {
100
+ if (!RNAdWhaleMediationTransitionPopupAd) {
101
+ console.warn(LINKING_ERROR);
102
+ return;
103
+ }
104
+ RNAdWhaleMediationTransitionPopupAd.resume();
105
+ },
106
+
107
+ addEventListeners(
108
+ listeners: AdWhaleTransitionPopupAdEvents
109
+ ): EmitterSubscription[] {
110
+ if (!transitionPopupEmitter) {
111
+ console.warn(LINKING_ERROR);
112
+ return [];
113
+ }
114
+ const subs: EmitterSubscription[] = [];
115
+
116
+ if (listeners.onLoaded) {
117
+ subs.push(
118
+ transitionPopupEmitter.addListener('onTransitionPopupAdLoaded', () => {
119
+ listeners.onLoaded?.();
120
+ })
121
+ );
122
+ }
123
+ if (listeners.onLoadFailed) {
124
+ subs.push(
125
+ transitionPopupEmitter.addListener(
126
+ 'onTransitionPopupAdLoadFailed',
127
+ event => {
128
+ listeners.onLoadFailed?.(
129
+ event as AdWhaleTransitionPopupAdErrorEvent
130
+ );
131
+ }
132
+ )
133
+ );
134
+ }
135
+ if (listeners.onShowed) {
136
+ subs.push(
137
+ transitionPopupEmitter.addListener('onTransitionPopupAdShowed', () => {
138
+ listeners.onShowed?.();
139
+ })
140
+ );
141
+ }
142
+ if (listeners.onShowFailed) {
143
+ subs.push(
144
+ transitionPopupEmitter.addListener(
145
+ 'onTransitionPopupAdShowFailed',
146
+ event => {
147
+ listeners.onShowFailed?.(
148
+ event as AdWhaleTransitionPopupAdErrorEvent
149
+ );
150
+ }
151
+ )
152
+ );
153
+ }
154
+ if (listeners.onClicked) {
155
+ subs.push(
156
+ transitionPopupEmitter.addListener('onTransitionPopupAdClicked', () => {
157
+ listeners.onClicked?.();
158
+ })
159
+ );
160
+ }
161
+ if (listeners.onClosed) {
162
+ subs.push(
163
+ transitionPopupEmitter.addListener('onTransitionPopupAdClosed', event => {
164
+ listeners.onClosed?.(event as AdWhaleTransitionPopupAdClosedEvent);
165
+ })
166
+ );
167
+ }
168
+
169
+ return subs;
170
+ },
171
+ };
@@ -1,18 +1,32 @@
1
1
  import { TurboModuleRegistry, type TurboModule } from 'react-native';
2
2
 
3
+ /**
4
+ * Flutter `AdWhaleInitResult` / 네이티브 초기화 성공 맵과 동일: `statusCode`, `message` 만.
5
+ * 성공 여부는 `statusCode === 100` (Flutter 와 동일).
6
+ * TurboModule codegen 은 메서드명 `initialize` 를 사용합니다 (Flutter MethodChannel 은 `_init`).
7
+ */
3
8
  export interface InitializeResult {
4
9
  statusCode: number;
5
10
  message: string;
6
- isSuccess: boolean;
11
+ }
12
+
13
+ /** Flutter GDPR `requestGdprConsent` 응답 맵: `success`, `message` */
14
+ export interface GdprConsentResult {
15
+ success: boolean;
16
+ message: string;
17
+ }
18
+
19
+ /** Ad Inspector 닫힘 콜백과 동일한 status/message (Flutter 와 키 정렬) */
20
+ export interface AdInspectorResult {
21
+ statusCode: number;
22
+ message: string;
7
23
  }
8
24
 
9
25
  export interface Spec extends TurboModule {
26
+ /** RN codegen Java `initialize(Promise)` — Flutter MethodChannel 은 `_init` */
10
27
  initialize(): Promise<InitializeResult>;
11
28
  setCoppa(isEnabled: boolean): void;
12
- requestGdprConsent(): Promise<{
13
- isSuccess: boolean;
14
- message: string;
15
- }>;
29
+ requestGdprConsent(): Promise<GdprConsentResult>;
16
30
  getConsentStatus(): Promise<{
17
31
  coppa: boolean;
18
32
  gdpr: string;
@@ -20,6 +34,16 @@ export interface Spec extends TurboModule {
20
34
  }>;
21
35
  resetGdprConsentStatus(): void;
22
36
  setGdpr(consent: boolean): void;
37
+ setTagForUnderAgeOfConsent(tag: boolean): void;
38
+ setMaxAdContentRating(rating: string | null): void;
39
+ setTestDeviceIdentifiers(testDeviceIds: string[] | null): void;
40
+ showAdInspector(): Promise<AdInspectorResult>;
41
+ setAppMuted(isMuted: boolean): void;
42
+ setAppVolume(volume: number): void;
23
43
  }
24
44
 
25
- export default TurboModuleRegistry.getEnforcing<Spec>('AdwhaleSdkReactNative');
45
+ /**
46
+ * iOS/Android 네이티브에 모듈이 없거나 링크되지 않은 경우 null.
47
+ * (getEnforcing 는 로드 시점에 앱 전체가 크래시하므로 get 사용)
48
+ */
49
+ export default TurboModuleRegistry.get<Spec>('AdwhaleSdkReactNative');
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Flutter `lib/src/flutter_method_arg_const.dart` / Android `FlutterMethodArgConst` 와
3
+ * 동일한 키 문자열을 유지합니다. RN 전용 키는 주석으로 표시합니다.
4
+ */
5
+ export const AdWhaleMethodArgConst = {
6
+ sendStatusCode: 'statusCode',
7
+ sendMessage: 'message',
8
+ /** Flutter GDPR 등 */
9
+ sendSuccess: 'success',
10
+ /** RN 레거시 — init/showAdInspector 는 `sendStatusCode`(100) 로 성공 판별 */
11
+ sendIsSuccess: 'isSuccess',
12
+ sendCode: 'code',
13
+ sendEventName: 'eventName',
14
+ sendErrorMessage: 'errorMessage',
15
+ sendErrorCode: 'errorCode',
16
+ sendRewardAmount: 'RewardAmount',
17
+ sendRewardType: 'RewardType',
18
+ sendHeightPx: 'heightPx',
19
+ sendReason: 'reason',
20
+ receiveAdId: 'adId',
21
+ receivePlacementUid: 'placementUid',
22
+ receiveRating: 'rating',
23
+ receiveHasConsent: 'hasConsent',
24
+ receiveValue: 'value',
25
+ receiveTfuaMode: 'tfuaMode',
26
+ receiveIds: 'ids',
27
+ receiveRequestId: 'requestId',
28
+ receiveIsChildDirected: 'isChildDirected',
29
+ receiveEnabled: 'enabled',
30
+ receiveIsMuted: 'isMuted',
31
+ receivedVolume: 'volume',
32
+ receiveRegion: 'region',
33
+ receiveGcoder: 'gcoder',
34
+ receiveLt: 'lt',
35
+ receiveLng: 'lng',
36
+ receivePlacementName: 'placementName',
37
+ receivePrimaryButtonText: 'primaryButtonText',
38
+ receiveSecondaryButtonText: 'secondaryButtonText',
39
+ receiveCustomDescription: 'customDescription',
40
+ receiveOptions: 'options',
41
+ receiveAdaptiveAnchorWidth: 'adaptiveAnchorWidth',
42
+ receiveAndroidPlacementUid: 'androidPlacementUid',
43
+ receiveBannerHeight: 'bannerHeight',
44
+ receiveNativeAdOptions: 'nativeAdOptions',
45
+ receiveTemplateStyle: 'templateStyle',
46
+ sendCoppa: 'coppa',
47
+ sendGdpr: 'gdpr',
48
+ sendPersonalizedConsent: 'personalizedConsent',
49
+ sendRegistrationName: 'registrationName',
50
+ } as const;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Flutter `lib/src/flutter_method_call_const.dart` 와 동일한 메서드·이벤트 이름.
3
+ * RN ViewManager 전용 prop 은 주석으로 구분합니다.
4
+ */
5
+ export const AdWhaleMethodCallConst = {
6
+ // 글로벌 (TurboModule)
7
+ /** RN TurboModule codegen — Java {@code initialize(Promise)} */
8
+ initialize: 'initialize',
9
+ /** Flutter MethodChannel 전용 (TurboModule 과 다름) */
10
+ flutterInit: '_init',
11
+ requestGdprConsent: 'requestGdprConsent',
12
+ resetGdprConsentStatus: 'resetGdprConsentStatus',
13
+ setGdpr: 'setGdpr',
14
+ getConsentStatus: 'getConsentStatus',
15
+ setTagForUnderAgeOfConsent: 'setTagForUnderAgeOfConsent',
16
+ setMaxAdContentRating: 'setMaxAdContentRating',
17
+ setTestDeviceIdentifiers: 'setTestDeviceIdentifiers',
18
+ showAdInspector: 'showAdInspector',
19
+ setCoppa: 'setCoppa',
20
+ setLoggerEnabled: 'setLoggerEnabled',
21
+ getLogLevel: 'getLogLevel',
22
+ setAppMuted: 'setAppMuted',
23
+ setAppVolume: 'setAppVolume',
24
+
25
+ // Flutter: adId 기반 배너 (RN 에는 추후 TurboModule 로 대응 가능)
26
+ loadBannerAd: 'loadBannerAd',
27
+ resumeBannerAd: 'resumeBannerAd',
28
+ pauseBannerAd: 'pauseBannerAd',
29
+ destroyBannerAd: 'destroyBannerAd',
30
+
31
+ /** RN Android 에는 아직 네이티브 구현 없음 — 상수만 동기화 */
32
+ loadPreloadBannerAd: 'loadPreloadBannerAd',
33
+ showPreloadBannerAd: 'showPreloadBannerAd',
34
+ resumePreloadBannerAd: 'resumePreloadBannerAd',
35
+ pausePreloadBannerAd: 'pausePreloadBannerAd',
36
+ destroyPreloadBannerAd: 'destroyPreloadBannerAd',
37
+
38
+ /** RN 배너 View — Flutter loadBannerAd 와 역할 유사한 prop */
39
+ loadAd: 'loadAd',
40
+ showAd: 'showAd',
41
+ placementUid: 'placementUid',
42
+ adSize: 'adSize',
43
+ factoryId: 'factoryId',
44
+
45
+ onAdInspectorClosed: 'onAdInspectorClosed',
46
+ onInitComplete: 'onInitComplete',
47
+ onAdLoaded: 'onAdLoaded',
48
+ onAdLoadFailed: 'onAdLoadFailed',
49
+ onAdFailedToLoad: 'onAdFailedToLoad',
50
+ onAdClicked: 'onAdClicked',
51
+
52
+ onNativeAdLoaded: 'onNativeAdLoaded',
53
+ onNativeAdFailedToLoad: 'onNativeAdFailedToLoad',
54
+ onNativeAdShowFailed: 'onNativeAdShowFailed',
55
+ onNativeAdClicked: 'onNativeAdClicked',
56
+ onNativeAdClosed: 'onNativeAdClosed',
57
+ onNativeAdViewHeight: 'onNativeAdViewHeight',
58
+ } as const;
59
+
60
+ export type AdWhaleMethodCallConstKey = keyof typeof AdWhaleMethodCallConst;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Flutter `FlutterMethodResultConst` 와 동일한 Promise.reject / result.error 코드 문자열.
3
+ */
4
+ export const AdWhaleMethodResultConst = {
5
+ noActivity: 'NoActivity',
6
+ invalidArgs: 'InvalidArgs',
7
+ nativeAdError: 'NativeAdError',
8
+ preloadBannerError: 'PreloadBannerError',
9
+ bannerAdError: 'BannerAdError',
10
+ adShowError: 'AdShowError',
11
+ openInspectorFailed: 'OpenInspectorFailed',
12
+ getLogLevelError: 'GetLogLevelError',
13
+ } as const;
package/src/index.ts CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  // ✅ 1) SDK 초기화 / 설정 (TurboModule 래퍼)
4
4
  export { AdWhaleMediationAds } from './AdWhaleMediationAds';
5
+ export type {
6
+ InitializeResult,
7
+ GdprConsentResult,
8
+ AdInspectorResult,
9
+ } from './AdWhaleMediationAds';
5
10
  // 사용 예:
6
11
  // AdWhaleMediationAds.initialize()
7
12
  // AdWhaleMediationAds.setLoggerEnabled(true)
@@ -11,11 +16,20 @@ export { AdWhaleMediationAds } from './AdWhaleMediationAds';
11
16
  // AdWhaleMediationAds.resetGdprConsentStatus()
12
17
  // AdWhaleMediationAds.setGdpr(true)
13
18
 
19
+ // Flutter 브릿지 상수와 동일 문자열 유지 (유지보수 시 Flutter 저장소와 대조)
20
+ export {
21
+ AdWhaleMethodCallConst,
22
+ type AdWhaleMethodCallConstKey,
23
+ } from './constants/AdWhaleMethodCallConst';
24
+ export { AdWhaleMethodArgConst } from './constants/AdWhaleMethodArgConst';
25
+ export { AdWhaleMethodResultConst } from './constants/AdWhaleMethodResultConst';
14
26
 
15
27
  // ✅ 2) 배너 광고 View 컴포넌트
16
28
  export {
17
29
  AdWhaleAdView,
18
30
  AdWhaleAdSize,
31
+ ADWHALE_BANNER_IOS_UNSUPPORTED_STATUS_CODE,
32
+ isAdWhaleBannerAdSizeSupportedOnIos,
19
33
  } from './AdWhaleAdView';
20
34
  export type {
21
35
  AdWhaleBannerError,
@@ -41,6 +55,8 @@ export type {
41
55
  AdWhaleRewardErrorEvent,
42
56
  AdWhaleRewardUserRewardedEvent,
43
57
  AdWhaleRewardEvents,
58
+ AdWhaleRewardGcoder,
59
+ AdWhaleRewardLoadOptions,
44
60
  } from './AdWhaleRewardAd';
45
61
 
46
62
 
@@ -54,6 +70,25 @@ export type {
54
70
  } from './AdWhaleAppOpenAd';
55
71
 
56
72
 
73
+ // ✅ 5.1) 종료 팝업 광고 API (Android)
74
+ export { AdWhaleExitPopupAd } from './AdWhaleExitPopupAd';
75
+ export type {
76
+ AdWhaleExitPopupAdClosedEvent,
77
+ AdWhaleExitPopupAdErrorEvent,
78
+ AdWhaleExitPopupAdEvents,
79
+ AdWhaleExitPopupGcoder,
80
+ } from './AdWhaleExitPopupAd';
81
+
82
+ // ✅ 5.2) 앱 전환 팝업 광고 API (Android)
83
+ export { AdWhaleTransitionPopupAd } from './AdWhaleTransitionPopupAd';
84
+ export type {
85
+ AdWhaleTransitionPopupAdClosedEvent,
86
+ AdWhaleTransitionPopupAdErrorEvent,
87
+ AdWhaleTransitionPopupAdEvents,
88
+ AdWhaleTransitionPopupGcoder,
89
+ } from './AdWhaleTransitionPopupAd';
90
+
91
+
57
92
  // ✅ 6) 네이티브 커스텀 뷰 (네이티브 템플릿/커스텀용)
58
93
  export {
59
94
  AdWhaleNativeCustomView,