adwhale-sdk-react-native 2.7.204 → 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.
Files changed (108) hide show
  1. package/AdwhaleSdkReactNative.podspec +22 -0
  2. package/README.md +80 -37
  3. package/android/proguard-rules.pro +56 -0
  4. package/android/src/main/java/com/adwhalesdkreactnative/AdWhaleCustomNativeBinderFactory.java +18 -0
  5. package/android/src/main/java/com/adwhalesdkreactnative/AdwhaleSdkReactNativePackage.java +51 -6
  6. package/android/src/main/java/com/adwhalesdkreactnative/BinderFactory.java +9 -0
  7. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdSettingModule.java +148 -49
  8. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdView.java +46 -27
  9. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAppOpenAd.java +136 -0
  10. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationCustomNativeAdView.java +37 -46
  11. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationExitPopupAd.java +240 -0
  12. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java +189 -0
  13. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationLoggerModule.java +2 -1
  14. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationNativeAdViewListenerBridge.java +83 -0
  15. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationRewardAd.java +255 -6
  16. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTemplateNativeAdView.java +191 -70
  17. package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTransitionPopupAd.java +218 -0
  18. package/android/src/main/java/com/adwhalesdkreactnative/RNWrapperView.java +137 -0
  19. package/android/src/main/java/com/adwhalesdkreactnative/SimpleBinderFactory.java +1 -1
  20. package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodArgConst.java +112 -0
  21. package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodCallConst.java +113 -0
  22. package/android/src/main/java/com/adwhalesdkreactnative/common/RNMethodResultConst.java +28 -0
  23. package/build/generated/ios/ReactAppDependencyProvider.podspec +34 -0
  24. package/ios/AdWhaleNativeCustomViewFactoryRegistry.swift +56 -0
  25. package/ios/AdwhaleSdkReactNative.mm +96 -5
  26. package/ios/AdwhaleSdkReactNativeModule.swift +148 -0
  27. package/ios/RNAdWhaleMediationAdViewManager.m +38 -0
  28. package/ios/RNAdWhaleMediationAdViewManager.swift +14 -0
  29. package/ios/RNAdWhaleMediationAppOpenAd.m +18 -0
  30. package/ios/RNAdWhaleMediationAppOpenAd.swift +175 -0
  31. package/ios/RNAdWhaleMediationCustomNativeAdViewManager.m +22 -0
  32. package/ios/RNAdWhaleMediationCustomNativeAdViewManager.swift +239 -0
  33. package/ios/RNAdWhaleMediationInterstitialAd.m +18 -0
  34. package/ios/RNAdWhaleMediationInterstitialAd.swift +161 -0
  35. package/ios/RNAdWhaleMediationRewardAd.m +18 -0
  36. package/ios/RNAdWhaleMediationRewardAd.swift +172 -0
  37. package/ios/WhaleMediationBannerContainer.swift +182 -0
  38. package/lib/module/AdWhaleAdView.js +58 -3
  39. package/lib/module/AdWhaleAdView.js.map +1 -1
  40. package/lib/module/AdWhaleAppOpenAd.js +223 -25
  41. package/lib/module/AdWhaleAppOpenAd.js.map +1 -1
  42. package/lib/module/AdWhaleExitPopupAd.js +93 -0
  43. package/lib/module/AdWhaleExitPopupAd.js.map +1 -0
  44. package/lib/module/AdWhaleInterstitialAd.js +146 -22
  45. package/lib/module/AdWhaleInterstitialAd.js.map +1 -1
  46. package/lib/module/AdWhaleMediationAds.js +75 -4
  47. package/lib/module/AdWhaleMediationAds.js.map +1 -1
  48. package/lib/module/AdWhaleNativeCustomView.js +59 -8
  49. package/lib/module/AdWhaleNativeCustomView.js.map +1 -1
  50. package/lib/module/AdWhaleNativeTemplateView.js +37 -19
  51. package/lib/module/AdWhaleNativeTemplateView.js.map +1 -1
  52. package/lib/module/AdWhaleRewardAd.js +169 -24
  53. package/lib/module/AdWhaleRewardAd.js.map +1 -1
  54. package/lib/module/AdWhaleTransitionPopupAd.js +87 -0
  55. package/lib/module/AdWhaleTransitionPopupAd.js.map +1 -0
  56. package/lib/module/NativeAdwhaleSdkReactNative.js +16 -1
  57. package/lib/module/NativeAdwhaleSdkReactNative.js.map +1 -1
  58. package/lib/module/constants/AdWhaleMethodArgConst.js +53 -0
  59. package/lib/module/constants/AdWhaleMethodArgConst.js.map +1 -0
  60. package/lib/module/constants/AdWhaleMethodCallConst.js +56 -0
  61. package/lib/module/constants/AdWhaleMethodCallConst.js.map +1 -0
  62. package/lib/module/constants/AdWhaleMethodResultConst.js +16 -0
  63. package/lib/module/constants/AdWhaleMethodResultConst.js.map +1 -0
  64. package/lib/module/index.js +10 -1
  65. package/lib/module/index.js.map +1 -1
  66. package/lib/typescript/src/AdWhaleAdView.d.ts +20 -2
  67. package/lib/typescript/src/AdWhaleAdView.d.ts.map +1 -1
  68. package/lib/typescript/src/AdWhaleAppOpenAd.d.ts +10 -0
  69. package/lib/typescript/src/AdWhaleAppOpenAd.d.ts.map +1 -1
  70. package/lib/typescript/src/AdWhaleExitPopupAd.d.ts +36 -0
  71. package/lib/typescript/src/AdWhaleExitPopupAd.d.ts.map +1 -0
  72. package/lib/typescript/src/AdWhaleInterstitialAd.d.ts +16 -0
  73. package/lib/typescript/src/AdWhaleInterstitialAd.d.ts.map +1 -1
  74. package/lib/typescript/src/AdWhaleMediationAds.d.ts +13 -5
  75. package/lib/typescript/src/AdWhaleMediationAds.d.ts.map +1 -1
  76. package/lib/typescript/src/AdWhaleNativeCustomView.d.ts +7 -4
  77. package/lib/typescript/src/AdWhaleNativeCustomView.d.ts.map +1 -1
  78. package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts +20 -7
  79. package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts.map +1 -1
  80. package/lib/typescript/src/AdWhaleRewardAd.d.ts +18 -2
  81. package/lib/typescript/src/AdWhaleRewardAd.d.ts.map +1 -1
  82. package/lib/typescript/src/AdWhaleTransitionPopupAd.d.ts +33 -0
  83. package/lib/typescript/src/AdWhaleTransitionPopupAd.d.ts.map +1 -0
  84. package/lib/typescript/src/NativeAdwhaleSdkReactNative.d.ts +28 -6
  85. package/lib/typescript/src/NativeAdwhaleSdkReactNative.d.ts.map +1 -1
  86. package/lib/typescript/src/constants/AdWhaleMethodArgConst.d.ts +51 -0
  87. package/lib/typescript/src/constants/AdWhaleMethodArgConst.d.ts.map +1 -0
  88. package/lib/typescript/src/constants/AdWhaleMethodCallConst.d.ts +53 -0
  89. package/lib/typescript/src/constants/AdWhaleMethodCallConst.d.ts.map +1 -0
  90. package/lib/typescript/src/constants/AdWhaleMethodResultConst.d.ts +14 -0
  91. package/lib/typescript/src/constants/AdWhaleMethodResultConst.d.ts.map +1 -0
  92. package/lib/typescript/src/index.d.ts +9 -1
  93. package/lib/typescript/src/index.d.ts.map +1 -1
  94. package/package.json +1 -1
  95. package/src/AdWhaleAdView.tsx +92 -4
  96. package/src/AdWhaleAppOpenAd.ts +293 -38
  97. package/src/AdWhaleExitPopupAd.ts +183 -0
  98. package/src/AdWhaleInterstitialAd.ts +206 -36
  99. package/src/AdWhaleMediationAds.ts +108 -4
  100. package/src/AdWhaleNativeCustomView.tsx +85 -23
  101. package/src/AdWhaleNativeTemplateView.tsx +79 -42
  102. package/src/AdWhaleRewardAd.ts +245 -43
  103. package/src/AdWhaleTransitionPopupAd.ts +171 -0
  104. package/src/NativeAdwhaleSdkReactNative.ts +30 -6
  105. package/src/constants/AdWhaleMethodArgConst.ts +50 -0
  106. package/src/constants/AdWhaleMethodCallConst.ts +60 -0
  107. package/src/constants/AdWhaleMethodResultConst.ts +13 -0
  108. package/src/index.ts +33 -0
@@ -16,5 +16,27 @@ Pod::Spec.new do |s|
16
16
  s.source_files = "ios/**/*.{h,m,mm,swift,cpp}"
17
17
  s.private_header_files = "ios/**/*.h"
18
18
 
19
+ # adwhale_sdk_flutter/ios/adwhale_sdk_flutter.podspec 과 동일: static framework + AdWhaleSDK
20
+ s.static_framework = true
21
+ s.swift_version = "5.0"
22
+
23
+ # ios/AdwhaleSdkReactNative.mm 에서 AdWhale iOS SDK(AdWhaleAds 등)를 사용
24
+ # 앱 Podfile 에는 AdWhaleSDK_iOS 소스가 있어야 함:
25
+ # source 'https://github.com/dev-adwhale/AdWhaleSDK_iOS.git'
26
+ s.dependency "AdWhaleSDK", "1.0.4"
27
+ # AdWhaleSDK-Swift.h 가 GAD* 프로토콜/클래스를 참조하므로 컴파일 단위에 GMA 헤더가 필요함 (AdWhaleSDK/Core 와 동일 버전)
28
+ s.dependency "Google-Mobile-Ads-SDK", "13.0.0"
29
+
30
+ # Flutter 플러그인과 동일: UMP(UserMessagingPlatform) 검색 경로 + RN install_modules_dependencies 가 HEADER_SEARCH_PATHS 병합
31
+ # AdWhaleSDK-Swift.h 는 Pods 내 xcframework Headers 경로를 직접 넣음 (인덱싱/빌드 안정화)
32
+ s.pod_target_xcconfig = {
33
+ "DEFINES_MODULE" => "YES",
34
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" => "i386",
35
+ "FRAMEWORK_SEARCH_PATHS" => "$(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/GoogleUserMessagingPlatform\" \"${PODS_ROOT}/GoogleUserMessagingPlatform/Frameworks/Release/UserMessagingPlatform.xcframework/ios-arm64\" \"${PODS_ROOT}/GoogleUserMessagingPlatform/Frameworks/Release/UserMessagingPlatform.xcframework/ios-arm64_x86_64-simulator\"",
36
+ # Swift → ObjC 생성 헤더(…-Swift.h). .mm 가 Swift보다 먼저 스캔될 때도 찾을 수 있게 함.
37
+ "HEADER_SEARCH_PATHS" => "$(inherited) \"$(DERIVED_SOURCES_DIR)\" \"${PODS_CONFIGURATION_BUILD_DIR}/AdwhaleSdkReactNative/AdwhaleSdkReactNative.framework/Headers\" \"${PODS_ROOT}/AdWhaleSDK/AdWhaleSDK.xcframework/ios-arm64/AdWhaleSDK.framework/Headers\" \"${PODS_ROOT}/AdWhaleSDK/AdWhaleSDK.xcframework/ios-arm64_x86_64-simulator/AdWhaleSDK.framework/Headers\"",
38
+ "OTHER_LDFLAGS" => "$(inherited) -framework \"UserMessagingPlatform\"",
39
+ }
40
+
19
41
  install_modules_dependencies(s)
20
42
  end
package/README.md CHANGED
@@ -1,14 +1,18 @@
1
+ # 최신 버전: 2.7.300
2
+
1
3
  # adwhale-sdk-react-native
2
- ADwhale Android 네이티브 광고 미디에이션 SDK를
4
+ ADwhale Android/iOS 네이티브 광고 미디에이션 SDK를
3
5
  React Native 환경에서 사용할 수 있도록 제공하는 공식 SDK입니다.
4
6
 
5
7
  - Android 네이티브 SDK 기반
6
8
  - React Native Bridge / TurboModule 지원
7
- - 배너, 전면, 보상형, 네이티브 광고 지원
9
+ - SDK 초기화, 배너, 전면, 보상형, 네이티브 광고(템플릿, 커스텀), 앱오프닝 광고, 앱 종료 팝업 광고, Android 전용 전환 팝업 광고 지원
10
+ - 광고 이벤트 콜백 리스너 제공
8
11
  - Expo Bare Workflow / Custom Dev Client 지원
9
12
 
10
13
  > ⚠️ Expo Go (Managed Workflow)에서는 네이티브 모듈 특성상 사용할 수 없습니다.
11
14
 
15
+ 자세한 가이드는 https://adwhale.gitbook.io/adwhale-mediation-sdk/react-native/sdk 를 참고하세요.
12
16
  ---
13
17
 
14
18
  ## Installation
@@ -22,18 +26,19 @@ npm install adwhale-sdk-react-native
22
26
 
23
27
 
24
28
  ## Version Policy
25
- 본 SDK는 Android 네이티브 SDK 버전과의 대응 관계를 명확히 유지하기 위해
29
+ 본 SDK는 Android 네이티브 및 iOS 네이티브 SDK 버전과의 대응 관계를 명확히 유지하기 위해
26
30
  다음과 같은 버전 규칙을 사용합니다.
27
31
  - 앞 세 자릿수(Major.Minor.Patch) 는 Android SDK 버전과 동일
28
32
  - React Native 전용 수정 사항은 Patch 값을 확장하여 관리
29
33
 
30
34
  ### Version Mapping Example
31
- | Android SDK | React Native SDK | Description |
32
- |------------|------------------|-------------|
33
- | 2.7.1 | 2.7.100 | Android 2.7.1 기반 RN SDK 최초 릴리스 |
34
- | 2.7.1 | 2.7.101 | RN 레이어 핫픽스 |
35
- | 2.7.1 | 2.7.102 | RN 버그 수정 |
36
- | 2.7.2 | 2.7.200 | Android SDK 2.7.2 반영 |
35
+ | Android SDK | React Native SDK | Description |
36
+ |-------------|------------------|--------------------------------|
37
+ | 2.7.1 | 2.7.100 | Android 2.7.1 기반 RN SDK 최초 릴리스 |
38
+ | 2.7.1 | 2.7.101 | RN 레이어 핫픽스 |
39
+ | 2.7.1 | 2.7.102 | RN 버그 수정 |
40
+ | 2.7.2 | 2.7.200 | Android SDK 2.7.2 반영 |
41
+ | 2.7.3 | 2.7.300 | Android SDK 2.7.3 반영 |
37
42
 
38
43
 
39
44
  ## Version Usage Guide
@@ -43,39 +48,23 @@ npm install adwhale-sdk-react-native
43
48
  운영 안정성을 중시하는 경우
44
49
  ```json
45
50
  {
46
- "adwhale-sdk-react-native": "~2.7.204"
51
+ "adwhale-sdk-react-native": "~2.7.300"
47
52
  }
48
53
  ```
49
- - Android SDK 2.7.2 기반 유지
54
+ - Android SDK 2.7.3 기반 유지
50
55
  - RN 핫픽스만 자동 반영
51
-
52
- ### 동일한 Android SDK 기반의 최신 RN 수정만 사용
53
- ```json
54
- {
55
- "adwhale-sdk-react-native": "^2.7.204"
56
- }
57
- ```
58
- - Android SDK 2.7.x 범위 내 최신 RN 수정 자동 반영
59
- - Android SDK 상위 메이저/마이너 버전은 반영되지 않음
60
-
56
+ - >=2.7.3+0 <2.8.0 범위
61
57
 
62
58
  ### 특정 버전을 완전히 고정하여 사용하는 경우
63
59
  ```json
64
60
  {
65
- "adwhale-sdk-react-native": "2.7.204"
61
+ "adwhale-sdk-react-native": "2.7.300"
66
62
  }
67
63
  ```
68
-
69
-
70
- ### 항상 최신 버전을 사용하는 경우
71
- ```json
72
- {
73
- "adwhale-sdk-react-native": "latest"
74
- }
75
- ```
76
- - 최신 Android SDK 및 RN SDK 포함
77
- - 개발 및 검증 환경에 적합
78
-
64
+ - 버전 변경 없음
65
+ - 재현성, 장애 분석에 최적
66
+ - QA / 장애 재현 환경
67
+ - 장기 유지 브랜치
79
68
 
80
69
  ## Example Project
81
70
  SDK 동작을 바로 확인할 수 있는 example 프로젝트를 제공합니다.
@@ -108,18 +97,71 @@ Expo Go 환경에서는 사용할 수 없습니다.
108
97
  - 배너 광고
109
98
  - 전면 광고
110
99
  - 보상형 광고
111
- - 네이티브 광고 (Template / Custom)
112
- - 광고 이벤트 리스너 제공
100
+ - 네이티브 템플릿 광고
101
+ - 네이티브 커스텀 광고
102
+ - 앱 오프닝 광고
103
+ - 앱 종료 팝업 광고
104
+ - Android 전용 전환 팝업 광고
105
+ - 광고 이벤트 콜백 리스너 제공
113
106
 
107
+ ---
114
108
 
115
109
  ## Troubleshooting
116
- Android 빌드 오류 발생 시:
110
+
111
+ ### Android 빌드 오류
117
112
  ```sh
118
113
  cd example/android
119
114
  ./gradlew clean
120
115
  ```
121
116
 
122
- 환경 점검:
117
+ ### iOS: "PhaseScriptExecution failed with a nonzero exit code"
118
+ Xcode 빌드 시 **Run Script** 단계 중 하나가 실패할 때 나옵니다. 어떤 스크립트에서 실패했는지부터 확인하세요.
119
+
120
+ **1) 실패한 스크립트 확인**
121
+ - Xcode에서 **Product → Build** 후 왼쪽 **Report navigator** (⌘9) → 최근 빌드 선택
122
+ - 빌드 로그에서 **PhaseScriptExecution** 또는 **Run Script** 근처의 **빨간 에러 메시지** 확인
123
+ - 실패한 스크립트 이름(예: "Bundle React Native code and images", "Embed Pods Frameworks")과 그 아래 출력 내용 확인
124
+
125
+ **2) 자주 쓰는 해결 방법**
126
+ ```sh
127
+ # example 기준 (저장소 루트에서)
128
+ cd example
129
+ yarn install # 또는 npm install
130
+ cd ios
131
+ rm -rf build Pods Podfile.lock
132
+ pod install
133
+ cd ..
134
+ yarn ios # 또는 npx react-native run-ios
135
+ # CLI로만 빌드해 볼 때:
136
+ # yarn build:ios # example/package.json의 react-native build-ios
137
+ ```
138
+ - **Podfile.lock 불일치**라면: `example/ios`에서 `pod install`을 다시 실행합니다.
139
+ - **"Bundle React Native code and images"** 등 Node를 쓰는 스크립트 실패: Xcode가 터미널과 다른 `PATH`로 `node`를 못 찾는 경우가 많습니다. 터미널에서 `which node`로 경로를 확인한 뒤, `example/ios/.xcode.env` 또는 `example/ios/.xcode.env.local`에 `export NODE_BINARY=...`로 지정하거나, Xcode **Build Phases**의 해당 Run Script 상단에 동일하게 넣어 보세요.
140
+ - **Hermes / 번들 관련 스크립트** 실패: 위 정리 후 터미널에서 `yarn build:ios`(또는 `npx react-native build-ios`)로 한 번 빌드해 로그를 확인합니다.
141
+ - **실기기/서명** 관련이라면: Development team·신뢰 설정을 확인합니다.
142
+
143
+ ### iOS 실기기에서 "Development team" 오류가 나는 이유
144
+ - **시뮬레이터**: 코드 서명이 필요 없어 Development team 없이 실행됩니다.
145
+ - **실제 기기(USB)**: iOS는 기기 설치 시 **Apple 개발자 팀(Development team)** 서명을 요구합니다.
146
+
147
+ **해결**: Xcode에서 `example/ios/AdwhaleSdkReactNativeExample.xcworkspace` 열기 → **AdwhaleSdkReactNativeExample** 타깃 → **Signing & Capabilities** → **Team**에서 본인 Apple ID(팀) 선택. (무료 Apple ID로도 실기기 테스트 가능)
148
+ 자신의 앱이라면 해당 앱의 `.xcworkspace`와 앱 타깃 이름에 맞춰 동일하게 설정하면 됩니다.
149
+
150
+ ### iOS 실기기에서 "신뢰하지 않는 개발자" / 앱이 실행되지 않을 때
151
+ 무료 Apple ID로 서명한 앱을 **처음** 실기기에 설치한 경우, iOS가 개발자를 "신뢰하지 않음"으로 두어 앱 실행을 막습니다.
152
+ 이때 Xcode에서는 *"failed to launch"*, *"exited before the debugger could attach"* 같은 메시지가 나올 수 있습니다.
153
+
154
+ **해결 (iPhone에서 한 번만 하면 됨)**
155
+ 1. iPhone **설정** → **일반** → **VPN 및 기기 관리** (또는 **기기 관리** / **프로필 및 기기 관리**)
156
+ 2. **개발자 앱** 아래에서 본인 Apple ID(예: `xxxxx@gmail.com`) 항목 선택
157
+ 3. **"[Apple ID]을(를) 신뢰"** 탭 → **신뢰** 확인
158
+ 4. 이후부터는 해당 기기에서 같은 Apple ID로 서명한 앱이 정상 실행됩니다.
159
+
160
+ ### iOS App Store 배포
161
+ 이 SDK를 사용한 앱을 App Store에 제출·배포하는 데 문제 없습니다.
162
+ 실기기 테스트·스토어 제출 시에는 위와 같이 서명(Development team, 프로비저닝 프로필)을 설정하고, [ADwhale React Native 가이드](https://adwhale.gitbook.io/adwhale-mediation-sdk/react-native/sdk)에 안내된 iOS 설정(Info.plist, App Transport Security, AdMob(Google) App ID 등)을 준수하면 됩니다.
163
+
164
+ ### 환경 점검:
123
165
  ```sh
124
166
  npx react-native doctor
125
167
  ```
@@ -127,6 +169,7 @@ npx react-native doctor
127
169
  ## Changelog
128
170
  | 배포버전 | 내용 | 배포날짜 |
129
171
  |---------|-----------------------------------------------------------------------------------------------------------------------------------------------|------------|
172
+ | 2.7.300 | 애드웨일 Android 2.7.3 업데이트 및 ios 1.0.4 추가 | 2026.04.11 |
130
173
  | 2.7.204 | 버그 및 샘플 수정 | 2026.01.22 |
131
174
  | 2.7.203 | 버그 및 샘플 수정 | 2026.01.19 |
132
175
  | 2.7.202 | 버그 및 샘플 수정 | 2026.01.19 |
@@ -22,6 +22,14 @@
22
22
  #================== AdWhale Mediation SDK Proguard for Release 적용 코드 시작 ==================
23
23
 
24
24
  -keepclasseswithmembers class net.adwhale.sdk.mediation.ads.AdWhaleMediationAds {
25
+ public static final int TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED;
26
+ public static final int TAG_FOR_UNDER_AGE_OF_CONSENT_FALSE;
27
+ public static final int TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE;
28
+ public static final java.lang.String MAX_AD_CONTENT_RATING_G;
29
+ public static final java.lang.String MAX_AD_CONTENT_RATING_PG;
30
+ public static final java.lang.String MAX_AD_CONTENT_RATING_T;
31
+ public static final java.lang.String MAX_AD_CONTENT_RATING_MA;
32
+
25
33
  public static *** init(***);
26
34
  public static *** init(***, ***);
27
35
  public static *** setCoppa(***);
@@ -32,24 +40,40 @@
32
40
  public static *** getGdprConsentStatus(***);
33
41
  public static *** resetGdprConsentStatus(***);
34
42
  public static *** getAdwhaleGDPR(***);
43
+ public static *** setAppVolume(***);
44
+ public static *** setAppMuted(***);
45
+ public static *** setTagForUnderAgeOfConsent(***);
46
+ public static *** setMaxAdContentRating(***);
47
+ public static *** setTestDeviceIdentifiers(***);
48
+ public static *** openAdInspector(***, ***);
35
49
  }
36
50
 
51
+ -keep interface net.adwhale.sdk.mediation.ads.AdWhaleGdprConsentListener {*;}
52
+ -keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationAdInspectorCloseListener {*;}
37
53
  -keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationOnInitCompleteListener {*;}
38
54
 
39
55
  -keepclasseswithmembers class net.adwhale.sdk.utils.AdWhaleLog {
40
56
  public static *** setLogLevel(***);
41
57
  public static *** getLogLevel();
58
+ public static *** d(***);
59
+ public static *** i(***);
60
+ public static *** w(***);
61
+ public static *** e(java.lang.String);
62
+ public static *** e(java.lang.String, java.lang.Exception);
63
+ public static *** e(java.lang.String, java.lang.Throwable);
42
64
  }
43
65
 
44
66
  -keep class net.adwhale.sdk.mediation.ads.ADWHALE_AD_SIZE {*;}
45
67
  -keep class net.adwhale.sdk.mediation.ads.ADWHALE_RESULT_CODE {*;}
46
68
  -keep class net.adwhale.sdk.mediation.ads.ADWHALE_NATIVE_TEMPLATE {*;}
69
+ -keep class net.adwhale.sdk.mediation.ads.ADWHALE_POPUP_AD_CLOSE_REASON {*;}
47
70
  -keep class net.adwhale.sdk.mediation.ads.GdprConsentStatus {*;}
48
71
 
49
72
  -keep class net.adwhale.sdk.utils.AdWhaleLog$LogLevel{*;}
50
73
  -keep class net.adwhale.sdk.impl.mediation.ReqMediationAdConfig {*;}
51
74
  -keep class net.adwhale.sdk.impl.mediation.ResMediationAdConfig {*;}
52
75
  -keep class net.adwhale.sdk.impl.mediation.ResMediation {*;}
76
+ -keep class net.adwhale.sdk.impl.mediation.ResExtension {*;}
53
77
 
54
78
  -keepclasseswithmembers class net.adwhale.sdk.mediation.ads.AdWhaleMediationInterstitialAd {
55
79
  public <init>(...);
@@ -150,4 +174,36 @@
150
174
 
151
175
  -keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationAppOpenAdListener {*;}
152
176
 
177
+ -keepclasseswithmembers class net.adwhale.sdk.mediation.ads.AdWhaleMediationExitPopupAd {
178
+ public <init>(...);
179
+ public *** loadAd();
180
+ public *** showAd(***, ***);
181
+ public *** setRegion(***);
182
+ public *** setGcoder(***, ***);
183
+ public *** setPlacementUid(***);
184
+ public *** setPlacementName(***);
185
+ public *** setCustomizeButtonText(***, ***);
186
+ public *** setCustomDescription(***);
187
+ public *** destroy();
188
+ public *** resume(***);
189
+ public *** setAdWhaleMediationExitPopupAdListener(***);
190
+ }
191
+
192
+ -keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationExitPopupAdListener {*;}
193
+
194
+ -keepclasseswithmembers class net.adwhale.sdk.mediation.ads.AdWhaleMediationTransitionPopupAd {
195
+ public <init>(...);
196
+ public *** loadAd();
197
+ public *** showAd(***, ***);
198
+ public *** setRegion(***);
199
+ public *** setGcoder(***, ***);
200
+ public *** setPlacementUid(***);
201
+ public *** setPlacementName(***);
202
+ public *** destroy();
203
+ public *** resume(***);
204
+ public *** setAdWhaleMediationTransitionPopupAdListener(***);
205
+ }
206
+
207
+ -keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationTransitionPopupAdListener {*;}
208
+
153
209
  #================== AdWhale Mediation SDK Proguard for Release 적용 코드 끝 ==================
@@ -0,0 +1,18 @@
1
+ package com.adwhalesdkreactnative;
2
+
3
+ /**
4
+ * Flutter Android 편의 클래스명과 동일한 구현.
5
+ * 내부 동작은 기존 SimpleBinderFactory와 동일합니다.
6
+ */
7
+ public class AdWhaleCustomNativeBinderFactory extends SimpleBinderFactory implements BinderFactory {
8
+ public AdWhaleCustomNativeBinderFactory(
9
+ int layoutId,
10
+ int iconViewId,
11
+ int titleViewId,
12
+ int bodyTextViewId,
13
+ int callToActionViewId,
14
+ int mediaViewGroupId) {
15
+ super(layoutId, iconViewId, titleViewId, bodyTextViewId, callToActionViewId, mediaViewGroupId);
16
+ }
17
+ }
18
+
@@ -43,6 +43,13 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
43
43
  binderFactoryMap.put(factoryId, factory);
44
44
  }
45
45
 
46
+ /**
47
+ * Flutter와 동일 타입명(BinderFactory) 오버로드.
48
+ */
49
+ public static void registerBinderFactory(@NonNull String factoryId, @NonNull BinderFactory factory) {
50
+ registerBinderFactory(factoryId, (NativeAdBinderFactory) factory);
51
+ }
52
+
46
53
  /**
47
54
  * 등록된 BinderFactory를 가져옵니다.
48
55
  *
@@ -79,11 +86,21 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
79
86
  return new RNAdWhaleMediationRewardAd(reactContext);
80
87
  }
81
88
 
82
- // 엡오프닝 Old Architecture를 따르지만 등록은 TurboModule로 등록
89
+ // 앱오프닝 Old Architecture를 따르지만 등록은 TurboModule로 등록
83
90
  if(RNAdWhaleMediationAppOpenAd.REACT_CLASS_NAME.equals(name)) {
84
91
  return new RNAdWhaleMediationAppOpenAd(reactContext);
85
92
  }
86
93
 
94
+ // 앱종료 Old Architecture를 따르지만 등록은 TurboModule로 등록
95
+ if (RNAdWhaleMediationExitPopupAd.REACT_CLASS_NAME.equals(name)) {
96
+ return new RNAdWhaleMediationExitPopupAd(reactContext);
97
+ }
98
+
99
+ // 앱전환 Old Architecture를 따르지만 등록은 TurboModule로 등록
100
+ if (RNAdWhaleMediationTransitionPopupAd.REACT_CLASS_NAME.equals(name)) {
101
+ return new RNAdWhaleMediationTransitionPopupAd(reactContext);
102
+ }
103
+
87
104
  return null;
88
105
  }
89
106
 
@@ -96,7 +113,9 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
96
113
  new RNAdWhaleMediationLoggerModule(reactContext),
97
114
  new RNAdWhaleMediationInterstitialAd(reactContext),
98
115
  new RNAdWhaleMediationRewardAd(reactContext),
99
- new RNAdWhaleMediationAppOpenAd(reactContext)
116
+ new RNAdWhaleMediationAppOpenAd(reactContext),
117
+ new RNAdWhaleMediationExitPopupAd(reactContext),
118
+ new RNAdWhaleMediationTransitionPopupAd(reactContext)
100
119
  // RNAdWhaleMediationAdSettingModule는 TurboModule로 등록되므로 여기서 굳이 추가 안 해도 됨
101
120
  );
102
121
  }
@@ -129,7 +148,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
129
148
  )
130
149
  );
131
150
 
132
- // 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
151
+ // 로거/전면/보상형/앱오프닝/앱종료/앱전환은 legacy 모듈로 사용 (isTurboModule = false)
133
152
  moduleInfos.put(
134
153
  RNAdWhaleMediationLoggerModule.REACT_CLASS_NAME,
135
154
  new ReactModuleInfo(
@@ -142,7 +161,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
142
161
  )
143
162
  );
144
163
 
145
- // 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
164
+ // 로거/전면/보상형/앱오프닝/앱종료/앱전환은 legacy 모듈로 사용 (isTurboModule = false)
146
165
  moduleInfos.put(
147
166
  RNAdWhaleMediationInterstitialAd.REACT_CLASS_NAME,
148
167
  new ReactModuleInfo(
@@ -155,7 +174,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
155
174
  )
156
175
  );
157
176
 
158
- // 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
177
+ // 로거/전면/보상형/앱오프닝/앱종료/앱전환은 legacy 모듈로 사용 (isTurboModule = false)
159
178
  moduleInfos.put(
160
179
  RNAdWhaleMediationRewardAd.REACT_CLASS_NAME,
161
180
  new ReactModuleInfo(
@@ -168,7 +187,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
168
187
  )
169
188
  );
170
189
 
171
- // 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
190
+ // 로거/전면/보상형/앱오프닝/앱종료/앱전환은 legacy 모듈로 사용 (isTurboModule = false)
172
191
  moduleInfos.put(
173
192
  RNAdWhaleMediationAppOpenAd.REACT_CLASS_NAME,
174
193
  new ReactModuleInfo(
@@ -181,6 +200,32 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
181
200
  )
182
201
  );
183
202
 
203
+ // 로거/전면/보상형/앱오프닝/앱종료/앱전환은 legacy 모듈로 사용 (isTurboModule = false)
204
+ moduleInfos.put(
205
+ RNAdWhaleMediationExitPopupAd.REACT_CLASS_NAME,
206
+ new ReactModuleInfo(
207
+ RNAdWhaleMediationExitPopupAd.REACT_CLASS_NAME,
208
+ RNAdWhaleMediationExitPopupAd.REACT_CLASS_NAME,
209
+ false,
210
+ false,
211
+ false,
212
+ false
213
+ )
214
+ );
215
+
216
+ // 로거/전면/보상형/앱오프닝/앱종료/앱전환은 legacy 모듈로 사용 (isTurboModule = false)
217
+ moduleInfos.put(
218
+ RNAdWhaleMediationTransitionPopupAd.REACT_CLASS_NAME,
219
+ new ReactModuleInfo(
220
+ RNAdWhaleMediationTransitionPopupAd.REACT_CLASS_NAME,
221
+ RNAdWhaleMediationTransitionPopupAd.REACT_CLASS_NAME,
222
+ false,
223
+ false,
224
+ false,
225
+ false
226
+ )
227
+ );
228
+
184
229
  return moduleInfos;
185
230
  };
186
231
  }
@@ -0,0 +1,9 @@
1
+ package com.adwhalesdkreactnative;
2
+
3
+ /**
4
+ * Flutter Android 인터페이스명과 동일하게 맞춘 alias.
5
+ * 기존 RN 구현의 NativeAdBinderFactory와 동일 역할입니다.
6
+ */
7
+ public interface BinderFactory extends NativeAdBinderFactory {
8
+ }
9
+