adwhale-sdk-react-native 2.7.203 → 2.7.300
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/AdwhaleSdkReactNative.podspec +22 -0
- package/README.md +105 -39
- package/android/build.gradle +15 -15
- package/android/proguard-rules.pro +52 -107
- package/android/src/main/java/com/adwhalesdkreactnative/AdWhaleCustomNativeBinderFactory.java +18 -0
- package/android/src/main/java/com/adwhalesdkreactnative/AdwhaleSdkReactNativePackage.java +51 -6
- package/android/src/main/java/com/adwhalesdkreactnative/BinderFactory.java +9 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdSettingModule.java +149 -42
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdView.java +60 -30
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAppOpenAd.java +136 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationCustomNativeAdView.java +37 -46
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationExitPopupAd.java +240 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java +189 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationLoggerModule.java +2 -1
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationNativeAdViewListenerBridge.java +83 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationRewardAd.java +255 -6
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTemplateNativeAdView.java +191 -70
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTransitionPopupAd.java +218 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNWrapperView.java +137 -0
- package/android/src/main/java/com/adwhalesdkreactnative/SimpleBinderFactory.java +1 -1
- package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodArgConst.java +112 -0
- package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodCallConst.java +113 -0
- package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodResultConst.java +28 -0
- package/build/generated/ios/ReactAppDependencyProvider.podspec +34 -0
- package/ios/AdWhaleNativeCustomViewFactoryRegistry.swift +56 -0
- package/ios/AdwhaleSdkReactNative.mm +96 -5
- package/ios/AdwhaleSdkReactNativeModule.swift +148 -0
- package/ios/RNAdWhaleMediationAdViewManager.m +38 -0
- package/ios/RNAdWhaleMediationAdViewManager.swift +14 -0
- package/ios/RNAdWhaleMediationAppOpenAd.m +18 -0
- package/ios/RNAdWhaleMediationAppOpenAd.swift +175 -0
- package/ios/RNAdWhaleMediationCustomNativeAdViewManager.m +22 -0
- package/ios/RNAdWhaleMediationCustomNativeAdViewManager.swift +239 -0
- package/ios/RNAdWhaleMediationInterstitialAd.m +18 -0
- package/ios/RNAdWhaleMediationInterstitialAd.swift +161 -0
- package/ios/RNAdWhaleMediationRewardAd.m +18 -0
- package/ios/RNAdWhaleMediationRewardAd.swift +172 -0
- package/ios/WhaleMediationBannerContainer.swift +182 -0
- package/lib/module/AdWhaleAdView.js +80 -1
- package/lib/module/AdWhaleAdView.js.map +1 -1
- package/lib/module/AdWhaleAppOpenAd.js +223 -25
- package/lib/module/AdWhaleAppOpenAd.js.map +1 -1
- package/lib/module/AdWhaleExitPopupAd.js +93 -0
- package/lib/module/AdWhaleExitPopupAd.js.map +1 -0
- package/lib/module/AdWhaleInterstitialAd.js +146 -22
- package/lib/module/AdWhaleInterstitialAd.js.map +1 -1
- package/lib/module/AdWhaleMediationAds.js +75 -4
- package/lib/module/AdWhaleMediationAds.js.map +1 -1
- package/lib/module/AdWhaleNativeCustomView.js +59 -8
- package/lib/module/AdWhaleNativeCustomView.js.map +1 -1
- package/lib/module/AdWhaleNativeTemplateView.js +37 -19
- package/lib/module/AdWhaleNativeTemplateView.js.map +1 -1
- package/lib/module/AdWhaleRewardAd.js +169 -24
- package/lib/module/AdWhaleRewardAd.js.map +1 -1
- package/lib/module/AdWhaleTransitionPopupAd.js +87 -0
- package/lib/module/AdWhaleTransitionPopupAd.js.map +1 -0
- package/lib/module/NativeAdwhaleSdkReactNative.js +16 -1
- package/lib/module/NativeAdwhaleSdkReactNative.js.map +1 -1
- package/lib/module/constants/AdWhaleMethodArgConst.js +53 -0
- package/lib/module/constants/AdWhaleMethodArgConst.js.map +1 -0
- package/lib/module/constants/AdWhaleMethodCallConst.js +56 -0
- package/lib/module/constants/AdWhaleMethodCallConst.js.map +1 -0
- package/lib/module/constants/AdWhaleMethodResultConst.js +16 -0
- package/lib/module/constants/AdWhaleMethodResultConst.js.map +1 -0
- package/lib/module/index.js +10 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/AdWhaleAdView.d.ts +46 -2
- package/lib/typescript/src/AdWhaleAdView.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleAppOpenAd.d.ts +10 -0
- package/lib/typescript/src/AdWhaleAppOpenAd.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleExitPopupAd.d.ts +36 -0
- package/lib/typescript/src/AdWhaleExitPopupAd.d.ts.map +1 -0
- package/lib/typescript/src/AdWhaleInterstitialAd.d.ts +16 -0
- package/lib/typescript/src/AdWhaleInterstitialAd.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleMediationAds.d.ts +14 -5
- package/lib/typescript/src/AdWhaleMediationAds.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleNativeCustomView.d.ts +7 -4
- package/lib/typescript/src/AdWhaleNativeCustomView.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts +20 -7
- package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleRewardAd.d.ts +18 -2
- package/lib/typescript/src/AdWhaleRewardAd.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleTransitionPopupAd.d.ts +33 -0
- package/lib/typescript/src/AdWhaleTransitionPopupAd.d.ts.map +1 -0
- package/lib/typescript/src/NativeAdwhaleSdkReactNative.d.ts +33 -6
- package/lib/typescript/src/NativeAdwhaleSdkReactNative.d.ts.map +1 -1
- package/lib/typescript/src/constants/AdWhaleMethodArgConst.d.ts +51 -0
- package/lib/typescript/src/constants/AdWhaleMethodArgConst.d.ts.map +1 -0
- package/lib/typescript/src/constants/AdWhaleMethodCallConst.d.ts +53 -0
- package/lib/typescript/src/constants/AdWhaleMethodCallConst.d.ts.map +1 -0
- package/lib/typescript/src/constants/AdWhaleMethodResultConst.d.ts +14 -0
- package/lib/typescript/src/constants/AdWhaleMethodResultConst.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +10 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/AdWhaleAdView.tsx +126 -9
- package/src/AdWhaleAppOpenAd.ts +293 -38
- package/src/AdWhaleExitPopupAd.ts +183 -0
- package/src/AdWhaleInterstitialAd.ts +206 -36
- package/src/AdWhaleMediationAds.ts +109 -5
- package/src/AdWhaleNativeCustomView.tsx +85 -23
- package/src/AdWhaleNativeTemplateView.tsx +79 -42
- package/src/AdWhaleRewardAd.ts +245 -43
- package/src/AdWhaleTransitionPopupAd.ts +171 -0
- package/src/NativeAdwhaleSdkReactNative.ts +36 -6
- package/src/constants/AdWhaleMethodArgConst.ts +50 -0
- package/src/constants/AdWhaleMethodCallConst.ts +60 -0
- package/src/constants/AdWhaleMethodResultConst.ts +13 -0
- package/src/index.ts +34 -1
|
@@ -4,8 +4,14 @@ export interface AdWhaleRewardErrorEvent {
|
|
|
4
4
|
message: string;
|
|
5
5
|
}
|
|
6
6
|
export interface AdWhaleRewardUserRewardedEvent {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/** Flutter payload key */
|
|
8
|
+
RewardType?: string;
|
|
9
|
+
/** Flutter payload key */
|
|
10
|
+
RewardAmount?: number;
|
|
11
|
+
/** 레거시 호환 */
|
|
12
|
+
type?: string;
|
|
13
|
+
/** 레거시 호환 */
|
|
14
|
+
amount?: number;
|
|
9
15
|
}
|
|
10
16
|
export interface AdWhaleRewardEvents {
|
|
11
17
|
onLoaded?: () => void;
|
|
@@ -27,6 +33,16 @@ export declare const AdWhaleRewardAd: {
|
|
|
27
33
|
gcoder?: AdWhaleRewardGcoder;
|
|
28
34
|
}): void;
|
|
29
35
|
showAd(): void;
|
|
36
|
+
/** Flutter와 동일한 신규 API (권장) */
|
|
37
|
+
loadRewardAd(adId: number, placementUid: string, options?: {
|
|
38
|
+
placementName?: string;
|
|
39
|
+
region?: string;
|
|
40
|
+
gcoder?: AdWhaleRewardGcoder;
|
|
41
|
+
}): void;
|
|
42
|
+
showAdWithoutView(adId: number): void;
|
|
43
|
+
destroyAd(adId: number): void;
|
|
30
44
|
addEventListeners(listeners: AdWhaleRewardEvents): EmitterSubscription[];
|
|
45
|
+
/** Flutter `onAdEvent` 스타일 (adId 필터링) */
|
|
46
|
+
addAdEventListenersById(adId: number, listeners: AdWhaleRewardEvents): EmitterSubscription[];
|
|
31
47
|
};
|
|
32
48
|
//# sourceMappingURL=AdWhaleRewardAd.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdWhaleRewardAd.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleRewardAd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AdWhaleRewardAd.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleRewardAd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAgCD,eAAO,MAAM,eAAe;yBAEV,MAAM,YACV;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;KAC9B;;IAuDH,+BAA+B;uBAEvB,MAAM,gBACE,MAAM,YACV;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;KAC9B;4BAmBqB,MAAM;oBAYd,MAAM;iCAIO,mBAAmB,GAAG,mBAAmB,EAAE;IAmGxE,yCAAyC;kCAEjC,MAAM,aACD,mBAAmB,GAC7B,mBAAmB,EAAE;CA4DzB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { EmitterSubscription } from 'react-native';
|
|
2
|
+
export interface AdWhaleTransitionPopupAdErrorEvent {
|
|
3
|
+
statusCode: number;
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AdWhaleTransitionPopupAdClosedEvent {
|
|
7
|
+
reasonId: number;
|
|
8
|
+
reasonMessage: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AdWhaleTransitionPopupAdEvents {
|
|
11
|
+
onLoaded?: () => void;
|
|
12
|
+
onLoadFailed?: (event: AdWhaleTransitionPopupAdErrorEvent) => void;
|
|
13
|
+
onShowed?: () => void;
|
|
14
|
+
onShowFailed?: (event: AdWhaleTransitionPopupAdErrorEvent) => void;
|
|
15
|
+
onClicked?: () => void;
|
|
16
|
+
onClosed?: (event: AdWhaleTransitionPopupAdClosedEvent) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface AdWhaleTransitionPopupGcoder {
|
|
19
|
+
lt: number;
|
|
20
|
+
lng: number;
|
|
21
|
+
}
|
|
22
|
+
export declare const AdWhaleTransitionPopupAd: {
|
|
23
|
+
loadAd(placementUid: string, options?: {
|
|
24
|
+
placementName?: string;
|
|
25
|
+
region?: string;
|
|
26
|
+
gcoder?: AdWhaleTransitionPopupGcoder;
|
|
27
|
+
}): void;
|
|
28
|
+
showAd(): void;
|
|
29
|
+
destroy(): void;
|
|
30
|
+
resume(): void;
|
|
31
|
+
addEventListeners(listeners: AdWhaleTransitionPopupAdEvents): EmitterSubscription[];
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=AdWhaleTransitionPopupAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdWhaleTransitionPopupAd.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleTransitionPopupAd.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,kCAAkC;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,kCAAkC,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,kCAAkC,KAAK,IAAI,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mCAAmC,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AA2BD,eAAO,MAAM,wBAAwB;yBAEnB,MAAM,YACV;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,4BAA4B,CAAC;KACvC;;;;iCA2CU,8BAA8B,GACxC,mBAAmB,EAAE;CA8DzB,CAAC"}
|
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
import { type TurboModule } from 'react-native';
|
|
2
|
+
/**
|
|
3
|
+
* Flutter `AdWhaleInitResult` / 네이티브 초기화 성공 맵과 동일: `statusCode`, `message` 만.
|
|
4
|
+
* 성공 여부는 `statusCode === 100` (Flutter 와 동일).
|
|
5
|
+
* TurboModule codegen 은 메서드명 `initialize` 를 사용합니다 (Flutter MethodChannel 은 `_init`).
|
|
6
|
+
*/
|
|
7
|
+
export interface InitializeResult {
|
|
8
|
+
statusCode: number;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
/** Flutter GDPR `requestGdprConsent` 응답 맵: `success`, `message` */
|
|
12
|
+
export interface GdprConsentResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
message: string;
|
|
15
|
+
}
|
|
16
|
+
/** Ad Inspector 닫힘 콜백과 동일한 status/message (Flutter 와 키 정렬) */
|
|
17
|
+
export interface AdInspectorResult {
|
|
18
|
+
statusCode: number;
|
|
19
|
+
message: string;
|
|
20
|
+
}
|
|
2
21
|
export interface Spec extends TurboModule {
|
|
3
|
-
initialize()
|
|
22
|
+
/** RN codegen Java `initialize(Promise)` — Flutter MethodChannel 은 `_init` */
|
|
23
|
+
initialize(): Promise<InitializeResult>;
|
|
4
24
|
setCoppa(isEnabled: boolean): void;
|
|
5
|
-
requestGdprConsent(): Promise<
|
|
6
|
-
isSuccess: boolean;
|
|
7
|
-
message: string;
|
|
8
|
-
}>;
|
|
25
|
+
requestGdprConsent(): Promise<GdprConsentResult>;
|
|
9
26
|
getConsentStatus(): Promise<{
|
|
10
27
|
coppa: boolean;
|
|
11
28
|
gdpr: string;
|
|
@@ -13,7 +30,17 @@ export interface Spec extends TurboModule {
|
|
|
13
30
|
}>;
|
|
14
31
|
resetGdprConsentStatus(): void;
|
|
15
32
|
setGdpr(consent: boolean): void;
|
|
33
|
+
setTagForUnderAgeOfConsent(tag: boolean): void;
|
|
34
|
+
setMaxAdContentRating(rating: string | null): void;
|
|
35
|
+
setTestDeviceIdentifiers(testDeviceIds: string[] | null): void;
|
|
36
|
+
showAdInspector(): Promise<AdInspectorResult>;
|
|
37
|
+
setAppMuted(isMuted: boolean): void;
|
|
38
|
+
setAppVolume(volume: number): void;
|
|
16
39
|
}
|
|
17
|
-
|
|
40
|
+
/**
|
|
41
|
+
* iOS/Android 네이티브에 모듈이 없거나 링크되지 않은 경우 null.
|
|
42
|
+
* (getEnforcing 는 로드 시점에 앱 전체가 크래시하므로 get 사용)
|
|
43
|
+
*/
|
|
44
|
+
declare const _default: Spec | null | undefined;
|
|
18
45
|
export default _default;
|
|
19
46
|
//# sourceMappingURL=NativeAdwhaleSdkReactNative.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeAdwhaleSdkReactNative.d.ts","sourceRoot":"","sources":["../../../src/NativeAdwhaleSdkReactNative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"NativeAdwhaleSdkReactNative.d.ts","sourceRoot":"","sources":["../../../src/NativeAdwhaleSdkReactNative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,8EAA8E;IAC9E,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjD,gBAAgB,IAAI,OAAO,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC,CAAC;IACH,sBAAsB,IAAI,IAAI,CAAC;IAC/B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACnD,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/D,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9C,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;GAGG;;AACH,wBAAsE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flutter `lib/src/flutter_method_arg_const.dart` / Android `FlutterMethodArgConst` 와
|
|
3
|
+
* 동일한 키 문자열을 유지합니다. RN 전용 키는 주석으로 표시합니다.
|
|
4
|
+
*/
|
|
5
|
+
export declare const AdWhaleMethodArgConst: {
|
|
6
|
+
readonly sendStatusCode: "statusCode";
|
|
7
|
+
readonly sendMessage: "message";
|
|
8
|
+
/** Flutter GDPR 등 */
|
|
9
|
+
readonly sendSuccess: "success";
|
|
10
|
+
/** RN 레거시 — init/showAdInspector 는 `sendStatusCode`(100) 로 성공 판별 */
|
|
11
|
+
readonly sendIsSuccess: "isSuccess";
|
|
12
|
+
readonly sendCode: "code";
|
|
13
|
+
readonly sendEventName: "eventName";
|
|
14
|
+
readonly sendErrorMessage: "errorMessage";
|
|
15
|
+
readonly sendErrorCode: "errorCode";
|
|
16
|
+
readonly sendRewardAmount: "RewardAmount";
|
|
17
|
+
readonly sendRewardType: "RewardType";
|
|
18
|
+
readonly sendHeightPx: "heightPx";
|
|
19
|
+
readonly sendReason: "reason";
|
|
20
|
+
readonly receiveAdId: "adId";
|
|
21
|
+
readonly receivePlacementUid: "placementUid";
|
|
22
|
+
readonly receiveRating: "rating";
|
|
23
|
+
readonly receiveHasConsent: "hasConsent";
|
|
24
|
+
readonly receiveValue: "value";
|
|
25
|
+
readonly receiveTfuaMode: "tfuaMode";
|
|
26
|
+
readonly receiveIds: "ids";
|
|
27
|
+
readonly receiveRequestId: "requestId";
|
|
28
|
+
readonly receiveIsChildDirected: "isChildDirected";
|
|
29
|
+
readonly receiveEnabled: "enabled";
|
|
30
|
+
readonly receiveIsMuted: "isMuted";
|
|
31
|
+
readonly receivedVolume: "volume";
|
|
32
|
+
readonly receiveRegion: "region";
|
|
33
|
+
readonly receiveGcoder: "gcoder";
|
|
34
|
+
readonly receiveLt: "lt";
|
|
35
|
+
readonly receiveLng: "lng";
|
|
36
|
+
readonly receivePlacementName: "placementName";
|
|
37
|
+
readonly receivePrimaryButtonText: "primaryButtonText";
|
|
38
|
+
readonly receiveSecondaryButtonText: "secondaryButtonText";
|
|
39
|
+
readonly receiveCustomDescription: "customDescription";
|
|
40
|
+
readonly receiveOptions: "options";
|
|
41
|
+
readonly receiveAdaptiveAnchorWidth: "adaptiveAnchorWidth";
|
|
42
|
+
readonly receiveAndroidPlacementUid: "androidPlacementUid";
|
|
43
|
+
readonly receiveBannerHeight: "bannerHeight";
|
|
44
|
+
readonly receiveNativeAdOptions: "nativeAdOptions";
|
|
45
|
+
readonly receiveTemplateStyle: "templateStyle";
|
|
46
|
+
readonly sendCoppa: "coppa";
|
|
47
|
+
readonly sendGdpr: "gdpr";
|
|
48
|
+
readonly sendPersonalizedConsent: "personalizedConsent";
|
|
49
|
+
readonly sendRegistrationName: "registrationName";
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=AdWhaleMethodArgConst.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdWhaleMethodArgConst.d.ts","sourceRoot":"","sources":["../../../../src/constants/AdWhaleMethodArgConst.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;IAGhC,qBAAqB;;IAErB,oEAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC5D,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flutter `lib/src/flutter_method_call_const.dart` 와 동일한 메서드·이벤트 이름.
|
|
3
|
+
* RN ViewManager 전용 prop 은 주석으로 구분합니다.
|
|
4
|
+
*/
|
|
5
|
+
export declare const AdWhaleMethodCallConst: {
|
|
6
|
+
/** RN TurboModule codegen — Java {@code initialize(Promise)} */
|
|
7
|
+
readonly initialize: "initialize";
|
|
8
|
+
/** Flutter MethodChannel 전용 (TurboModule 과 다름) */
|
|
9
|
+
readonly flutterInit: "_init";
|
|
10
|
+
readonly requestGdprConsent: "requestGdprConsent";
|
|
11
|
+
readonly resetGdprConsentStatus: "resetGdprConsentStatus";
|
|
12
|
+
readonly setGdpr: "setGdpr";
|
|
13
|
+
readonly getConsentStatus: "getConsentStatus";
|
|
14
|
+
readonly setTagForUnderAgeOfConsent: "setTagForUnderAgeOfConsent";
|
|
15
|
+
readonly setMaxAdContentRating: "setMaxAdContentRating";
|
|
16
|
+
readonly setTestDeviceIdentifiers: "setTestDeviceIdentifiers";
|
|
17
|
+
readonly showAdInspector: "showAdInspector";
|
|
18
|
+
readonly setCoppa: "setCoppa";
|
|
19
|
+
readonly setLoggerEnabled: "setLoggerEnabled";
|
|
20
|
+
readonly getLogLevel: "getLogLevel";
|
|
21
|
+
readonly setAppMuted: "setAppMuted";
|
|
22
|
+
readonly setAppVolume: "setAppVolume";
|
|
23
|
+
readonly loadBannerAd: "loadBannerAd";
|
|
24
|
+
readonly resumeBannerAd: "resumeBannerAd";
|
|
25
|
+
readonly pauseBannerAd: "pauseBannerAd";
|
|
26
|
+
readonly destroyBannerAd: "destroyBannerAd";
|
|
27
|
+
/** RN Android 에는 아직 네이티브 구현 없음 — 상수만 동기화 */
|
|
28
|
+
readonly loadPreloadBannerAd: "loadPreloadBannerAd";
|
|
29
|
+
readonly showPreloadBannerAd: "showPreloadBannerAd";
|
|
30
|
+
readonly resumePreloadBannerAd: "resumePreloadBannerAd";
|
|
31
|
+
readonly pausePreloadBannerAd: "pausePreloadBannerAd";
|
|
32
|
+
readonly destroyPreloadBannerAd: "destroyPreloadBannerAd";
|
|
33
|
+
/** RN 배너 View — Flutter loadBannerAd 와 역할 유사한 prop */
|
|
34
|
+
readonly loadAd: "loadAd";
|
|
35
|
+
readonly showAd: "showAd";
|
|
36
|
+
readonly placementUid: "placementUid";
|
|
37
|
+
readonly adSize: "adSize";
|
|
38
|
+
readonly factoryId: "factoryId";
|
|
39
|
+
readonly onAdInspectorClosed: "onAdInspectorClosed";
|
|
40
|
+
readonly onInitComplete: "onInitComplete";
|
|
41
|
+
readonly onAdLoaded: "onAdLoaded";
|
|
42
|
+
readonly onAdLoadFailed: "onAdLoadFailed";
|
|
43
|
+
readonly onAdFailedToLoad: "onAdFailedToLoad";
|
|
44
|
+
readonly onAdClicked: "onAdClicked";
|
|
45
|
+
readonly onNativeAdLoaded: "onNativeAdLoaded";
|
|
46
|
+
readonly onNativeAdFailedToLoad: "onNativeAdFailedToLoad";
|
|
47
|
+
readonly onNativeAdShowFailed: "onNativeAdShowFailed";
|
|
48
|
+
readonly onNativeAdClicked: "onNativeAdClicked";
|
|
49
|
+
readonly onNativeAdClosed: "onNativeAdClosed";
|
|
50
|
+
readonly onNativeAdViewHeight: "onNativeAdViewHeight";
|
|
51
|
+
};
|
|
52
|
+
export type AdWhaleMethodCallConstKey = keyof typeof AdWhaleMethodCallConst;
|
|
53
|
+
//# sourceMappingURL=AdWhaleMethodCallConst.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdWhaleMethodCallConst.d.ts","sourceRoot":"","sources":["../../../../src/constants/AdWhaleMethodCallConst.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,sBAAsB;IAEjC,gEAAgE;;IAEhE,kDAAkD;;;;;;;;;;;;;;;;;;;IAsBlD,4CAA4C;;;;;;IAO5C,sDAAsD;;;;;;;;;;;;;;;;;;CAoB9C,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flutter `FlutterMethodResultConst` 와 동일한 Promise.reject / result.error 코드 문자열.
|
|
3
|
+
*/
|
|
4
|
+
export declare const AdWhaleMethodResultConst: {
|
|
5
|
+
readonly noActivity: "NoActivity";
|
|
6
|
+
readonly invalidArgs: "InvalidArgs";
|
|
7
|
+
readonly nativeAdError: "NativeAdError";
|
|
8
|
+
readonly preloadBannerError: "PreloadBannerError";
|
|
9
|
+
readonly bannerAdError: "BannerAdError";
|
|
10
|
+
readonly adShowError: "AdShowError";
|
|
11
|
+
readonly openInspectorFailed: "OpenInspectorFailed";
|
|
12
|
+
readonly getLogLevelError: "GetLogLevelError";
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=AdWhaleMethodResultConst.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdWhaleMethodResultConst.d.ts","sourceRoot":"","sources":["../../../../src/constants/AdWhaleMethodResultConst.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;CAS3B,CAAC"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
export { AdWhaleMediationAds } from './AdWhaleMediationAds';
|
|
2
|
-
export {
|
|
3
|
-
export
|
|
2
|
+
export type { InitializeResult, GdprConsentResult, AdInspectorResult, } from './AdWhaleMediationAds';
|
|
3
|
+
export { AdWhaleMethodCallConst, type AdWhaleMethodCallConstKey, } from './constants/AdWhaleMethodCallConst';
|
|
4
|
+
export { AdWhaleMethodArgConst } from './constants/AdWhaleMethodArgConst';
|
|
5
|
+
export { AdWhaleMethodResultConst } from './constants/AdWhaleMethodResultConst';
|
|
6
|
+
export { AdWhaleAdView, AdWhaleAdSize, ADWHALE_BANNER_IOS_UNSUPPORTED_STATUS_CODE, isAdWhaleBannerAdSizeSupportedOnIos, } from './AdWhaleAdView';
|
|
7
|
+
export type { AdWhaleBannerError, AdWhaleBannerViewProps, } from './AdWhaleAdView';
|
|
4
8
|
export { AdWhaleInterstitialAd, } from './AdWhaleInterstitialAd';
|
|
5
9
|
export type { AdWhaleInterstitialErrorEvent, AdWhaleInterstitialEvents, } from './AdWhaleInterstitialAd';
|
|
6
10
|
export { AdWhaleRewardAd, } from './AdWhaleRewardAd';
|
|
7
11
|
export type { AdWhaleRewardErrorEvent, AdWhaleRewardUserRewardedEvent, AdWhaleRewardEvents, } from './AdWhaleRewardAd';
|
|
8
12
|
export { AdWhaleAppOpenAd, } from './AdWhaleAppOpenAd';
|
|
9
13
|
export type { AdWhaleAppOpenErrorEvent, AdWhaleAppOpenEvents, } from './AdWhaleAppOpenAd';
|
|
14
|
+
export { AdWhaleExitPopupAd } from './AdWhaleExitPopupAd';
|
|
15
|
+
export type { AdWhaleExitPopupAdClosedEvent, AdWhaleExitPopupAdErrorEvent, AdWhaleExitPopupAdEvents, AdWhaleExitPopupGcoder, } from './AdWhaleExitPopupAd';
|
|
16
|
+
export { AdWhaleTransitionPopupAd } from './AdWhaleTransitionPopupAd';
|
|
17
|
+
export type { AdWhaleTransitionPopupAdClosedEvent, AdWhaleTransitionPopupAdErrorEvent, AdWhaleTransitionPopupAdEvents, AdWhaleTransitionPopupGcoder, } from './AdWhaleTransitionPopupAd';
|
|
10
18
|
export { AdWhaleNativeCustomView, } from './AdWhaleNativeCustomView';
|
|
11
19
|
export type { AdWhaleNativeCustomHandle, AdWhaleNativeCustomViewProps, AdWhaleNativeCustomError, } from './AdWhaleNativeCustomView';
|
|
12
20
|
export * from './AdWhaleNativeTemplateView';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EACL,aAAa,EACb,aAAa,EACb,0CAA0C,EAC1C,mCAAmC,GACpC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,mCAAmC,EACnC,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EACL,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAMnC,cAAc,6BAA6B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adwhale-sdk-react-native",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.300",
|
|
4
4
|
"description": "Adwhale SDK React Native library for integrating Adwhale advertising mediation SDK into React Native applications.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"react-native": "./lib/module/index.js",
|
package/src/AdWhaleAdView.tsx
CHANGED
|
@@ -1,20 +1,55 @@
|
|
|
1
1
|
// src/AdWhaleAdView.tsx
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { requireNativeComponent } from 'react-native';
|
|
3
|
+
import { Platform, requireNativeComponent } from 'react-native';
|
|
4
4
|
import type { NativeSyntheticEvent, StyleProp, ViewStyle } from 'react-native';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
/**
|
|
7
|
+
* AdWhale 배너 광고 사이즈 enum
|
|
8
|
+
* Android SDK의 ADWHALE_AD_SIZE enum과 매핑됩니다.
|
|
9
|
+
*/
|
|
10
|
+
export enum AdWhaleAdSize {
|
|
11
|
+
/** 표준 배너 (320x50) */
|
|
12
|
+
BANNER_320x50 = 'BANNER320x50',
|
|
13
|
+
/** 큰 배너 (320x100) */
|
|
14
|
+
BANNER_320x100 = 'BANNER320x100',
|
|
15
|
+
/** 중간 직사각형 (300x250) */
|
|
16
|
+
BANNER_300x250 = 'BANNER300x250',
|
|
17
|
+
/**
|
|
18
|
+
* 정사각형 (250x250)
|
|
19
|
+
* iOS: AdWhale iOS SDK 미지원 — 네이티브에서 로드하지 않으며 `onAdLoadFailed`(statusCode -100) 가 호출됩니다.
|
|
20
|
+
*/
|
|
21
|
+
BANNER_250x250 = 'BANNER250x250',
|
|
22
|
+
/**
|
|
23
|
+
* 적응형 앵커 배너 - adaptiveAnchorWidth와 함께 사용
|
|
24
|
+
* iOS: AdWhale iOS SDK 미지원 — 네이티브에서 로드하지 않으며 `onAdLoadFailed`(statusCode -100) 가 호출됩니다.
|
|
25
|
+
*/
|
|
26
|
+
ADAPTIVE_ANCHOR = 'ADAPTIVE_ANCHOR',
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* AdWhale iOS SDK 가 해당 배너 사이즈를 지원하는지 (UI 비활성화 등에 사용).
|
|
31
|
+
* Android / 기타 플랫폼에서는 항상 true.
|
|
32
|
+
*/
|
|
33
|
+
export function isAdWhaleBannerAdSizeSupportedOnIos(
|
|
34
|
+
adSize: AdWhaleAdSize,
|
|
35
|
+
): boolean {
|
|
36
|
+
if (Platform.OS !== 'ios') {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return (
|
|
40
|
+
adSize !== AdWhaleAdSize.BANNER_250x250 &&
|
|
41
|
+
adSize !== AdWhaleAdSize.ADAPTIVE_ANCHOR
|
|
42
|
+
);
|
|
43
|
+
}
|
|
12
44
|
|
|
13
45
|
export interface AdWhaleBannerError {
|
|
14
46
|
statusCode: number;
|
|
15
47
|
message: string;
|
|
16
48
|
}
|
|
17
49
|
|
|
50
|
+
/** iOS: BANNER250x250 / ADAPTIVE_ANCHOR 요청 시 네이티브 `onAdLoadFailed` 의 statusCode */
|
|
51
|
+
export const ADWHALE_BANNER_IOS_UNSUPPORTED_STATUS_CODE = -100;
|
|
52
|
+
|
|
18
53
|
export interface AdWhaleBannerGcoder {
|
|
19
54
|
lt: number;
|
|
20
55
|
lng: number;
|
|
@@ -22,11 +57,27 @@ export interface AdWhaleBannerGcoder {
|
|
|
22
57
|
|
|
23
58
|
export interface AdWhaleBannerViewProps {
|
|
24
59
|
style?: StyleProp<ViewStyle>;
|
|
60
|
+
/**
|
|
61
|
+
* Flutter와 동일한 개념의 배너 인스턴스 식별자.
|
|
62
|
+
* RN은 View 기반이므로, 여러 배너를 동시에 운용할 때 이벤트 라우팅/로그 추적 용도로 사용합니다.
|
|
63
|
+
*/
|
|
64
|
+
adId?: number;
|
|
25
65
|
placementUid: string;
|
|
26
66
|
placementName?: string;
|
|
27
67
|
region?: string;
|
|
28
68
|
gcoder?: AdWhaleBannerGcoder;
|
|
29
|
-
|
|
69
|
+
/**
|
|
70
|
+
* 배너 광고 사이즈
|
|
71
|
+
* @example adSize={AdWhaleAdSize.BANNER_320x50}
|
|
72
|
+
*/
|
|
73
|
+
adSize: AdWhaleAdSize;
|
|
74
|
+
/**
|
|
75
|
+
* ADAPTIVE_ANCHOR 사이즈 사용 시 배너의 너비(dp)를 지정합니다.
|
|
76
|
+
* 0을 입력하면 디바이스 전체 가로 길이가 적용됩니다.
|
|
77
|
+
* @default 0 (디바이스 전체 너비)
|
|
78
|
+
* @example adaptiveAnchorWidth={360}
|
|
79
|
+
*/
|
|
80
|
+
adaptiveAnchorWidth?: number;
|
|
30
81
|
loadAd?: boolean;
|
|
31
82
|
|
|
32
83
|
onAdLoaded?: () => void;
|
|
@@ -34,7 +85,7 @@ export interface AdWhaleBannerViewProps {
|
|
|
34
85
|
onAdClicked?: () => void;
|
|
35
86
|
}
|
|
36
87
|
|
|
37
|
-
type NativeErrorEvent = NativeSyntheticEvent<AdWhaleBannerError>;
|
|
88
|
+
type NativeErrorEvent = NativeSyntheticEvent<AdWhaleBannerError & { adId?: number }>;
|
|
38
89
|
|
|
39
90
|
interface NativeAdViewProps
|
|
40
91
|
extends Omit<AdWhaleBannerViewProps, 'onAdLoadFailed'> {
|
|
@@ -44,17 +95,83 @@ interface NativeAdViewProps
|
|
|
44
95
|
const RNAdWhaleMediationAdView =
|
|
45
96
|
requireNativeComponent<NativeAdViewProps>('RNAdWhaleMediationAdView');
|
|
46
97
|
|
|
98
|
+
const AD_SIZE_ENUM_NAME_BY_VALUE: Record<AdWhaleAdSize, string> = {
|
|
99
|
+
[AdWhaleAdSize.BANNER_320x50]: 'BANNER_320x50',
|
|
100
|
+
[AdWhaleAdSize.BANNER_320x100]: 'BANNER_320x100',
|
|
101
|
+
[AdWhaleAdSize.BANNER_300x250]: 'BANNER_300x250',
|
|
102
|
+
[AdWhaleAdSize.BANNER_250x250]: 'BANNER_250x250',
|
|
103
|
+
[AdWhaleAdSize.ADAPTIVE_ANCHOR]: 'ADAPTIVE_ANCHOR',
|
|
104
|
+
};
|
|
105
|
+
|
|
47
106
|
export const AdWhaleAdView: React.FC<AdWhaleBannerViewProps> = ({
|
|
107
|
+
onAdLoaded,
|
|
48
108
|
onAdLoadFailed,
|
|
109
|
+
adSize,
|
|
110
|
+
adaptiveAnchorWidth,
|
|
111
|
+
loadAd,
|
|
49
112
|
...restProps
|
|
50
113
|
}) => {
|
|
114
|
+
const lastCreateBannerLogKeyRef = React.useRef<string | null>(null);
|
|
115
|
+
|
|
116
|
+
React.useEffect(() => {
|
|
117
|
+
if (!loadAd) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const enumName = AD_SIZE_ENUM_NAME_BY_VALUE[adSize] ?? adSize;
|
|
122
|
+
const adaptiveWidthForLog =
|
|
123
|
+
adSize === AdWhaleAdSize.ADAPTIVE_ANCHOR
|
|
124
|
+
? String(adaptiveAnchorWidth ?? 0)
|
|
125
|
+
: 'null';
|
|
126
|
+
const logKey = `${enumName}:${adaptiveWidthForLog}`;
|
|
127
|
+
|
|
128
|
+
if (lastCreateBannerLogKeyRef.current === logKey) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
lastCreateBannerLogKeyRef.current = logKey;
|
|
132
|
+
|
|
133
|
+
console.log(
|
|
134
|
+
`AdWhaleAdView.tsx _createBanner size=AdWhaleAdSize.${enumName}(${adSize}), adaptiveWidth=${adaptiveWidthForLog}`,
|
|
135
|
+
);
|
|
136
|
+
}, [loadAd, adSize, adaptiveAnchorWidth]);
|
|
137
|
+
|
|
138
|
+
const handleAdLoaded = () => {
|
|
139
|
+
const enumName = AD_SIZE_ENUM_NAME_BY_VALUE[adSize] ?? adSize;
|
|
140
|
+
console.log(
|
|
141
|
+
`AdWhaleAdView.tsx BannerAd onLoaded for size AdWhaleAdSize.${enumName}(${adSize})`,
|
|
142
|
+
);
|
|
143
|
+
onAdLoaded?.();
|
|
144
|
+
};
|
|
145
|
+
|
|
51
146
|
const handleAdLoadFailed: NativeAdViewProps['onAdLoadFailed'] = e => {
|
|
147
|
+
if (
|
|
148
|
+
Platform.OS === 'ios' &&
|
|
149
|
+
e.nativeEvent.statusCode === ADWHALE_BANNER_IOS_UNSUPPORTED_STATUS_CODE
|
|
150
|
+
) {
|
|
151
|
+
const enumName = AD_SIZE_ENUM_NAME_BY_VALUE[adSize] ?? adSize;
|
|
152
|
+
const errorMessage =
|
|
153
|
+
adSize === AdWhaleAdSize.BANNER_250x250
|
|
154
|
+
? '250x250 is not supported on iOS'
|
|
155
|
+
: 'adaptive banner is not supported on iOS';
|
|
156
|
+
console.log(
|
|
157
|
+
`AdWhaleAdView.tsx BannerAd onLoadFailed for AdWhaleAdSize.${enumName}: errorCode: UNSUPPORTED_BANNER_SIZE, errorMessage: ${errorMessage}`,
|
|
158
|
+
);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
52
161
|
onAdLoadFailed?.(e.nativeEvent);
|
|
53
162
|
};
|
|
54
163
|
|
|
164
|
+
// ADAPTIVE_ANCHOR일 때만 adaptiveAnchorWidth를 네이티브로 전달
|
|
165
|
+
const nativeAdaptiveAnchorWidth =
|
|
166
|
+
adSize === AdWhaleAdSize.ADAPTIVE_ANCHOR ? adaptiveAnchorWidth : undefined;
|
|
167
|
+
|
|
55
168
|
return (
|
|
56
169
|
<RNAdWhaleMediationAdView
|
|
57
170
|
{...restProps}
|
|
171
|
+
adSize={adSize}
|
|
172
|
+
adaptiveAnchorWidth={nativeAdaptiveAnchorWidth}
|
|
173
|
+
loadAd={loadAd}
|
|
174
|
+
onAdLoaded={handleAdLoaded}
|
|
58
175
|
onAdLoadFailed={onAdLoadFailed ? handleAdLoadFailed : undefined}
|
|
59
176
|
/>
|
|
60
177
|
);
|