adwhale-sdk-react-native 2.7.100 → 2.7.101

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,7 +43,7 @@ npm install adwhale-sdk-react-native
43
43
  운영 안정성을 중시하는 경우
44
44
  ```json
45
45
  {
46
- "adwhale-sdk-react-native": "~2.7.100"
46
+ "adwhale-sdk-react-native": "~2.7.101"
47
47
  }
48
48
  ```
49
49
  - Android SDK 2.7.1 기반 유지
@@ -52,7 +52,7 @@ npm install adwhale-sdk-react-native
52
52
  ### 동일한 Android SDK 기반의 최신 RN 수정만 사용
53
53
  ```json
54
54
  {
55
- "adwhale-sdk-react-native": "^2.7.100"
55
+ "adwhale-sdk-react-native": "^2.7.101"
56
56
  }
57
57
  ```
58
58
  - Android SDK 2.7.x 범위 내 최신 RN 수정 자동 반영
@@ -62,7 +62,7 @@ npm install adwhale-sdk-react-native
62
62
  ### 특정 버전을 완전히 고정하여 사용하는 경우
63
63
  ```json
64
64
  {
65
- "adwhale-sdk-react-native": "2.7.100"
65
+ "adwhale-sdk-react-native": "2.7.101"
66
66
  }
67
67
  ```
68
68
 
@@ -5,13 +5,16 @@ import android.util.Log;
5
5
 
6
6
  import androidx.annotation.Nullable;
7
7
 
8
+ import com.facebook.react.bridge.Arguments;
8
9
  import com.facebook.react.bridge.Promise;
9
10
  import com.facebook.react.bridge.ReactApplicationContext;
10
11
  import com.facebook.react.bridge.ReactMethod;
12
+ import com.facebook.react.bridge.WritableMap;
11
13
  import com.facebook.react.module.annotations.ReactModule;
12
14
 
13
15
  import net.adwhale.sdk.mediation.ads.AdWhaleMediationAds;
14
16
  import net.adwhale.sdk.mediation.ads.AdWhaleMediationOnInitCompleteListener;
17
+ import net.adwhale.sdk.mediation.ads.GdprConsentStatus;
15
18
  import net.adwhale.sdk.utils.AdWhaleLog;
16
19
 
17
20
  import java.util.HashMap;
@@ -34,6 +37,64 @@ public class RNAdWhaleMediationAdSettingModule extends NativeAdwhaleSdkReactNati
34
37
  return REACT_CLASS_NAME;
35
38
  }
36
39
 
40
+ @ReactMethod
41
+ public void setCoppa(boolean isEnabled) {
42
+ AdWhaleMediationAds.setCoppa(isEnabled);
43
+ Log.d(REACT_CLASS_NAME, "COPPA setting applied: " + isEnabled);
44
+ }
45
+
46
+ @ReactMethod
47
+ public void requestGdprConsent(final Promise promise) {
48
+ Activity currentActivity = getCurrentActivity();
49
+ if (currentActivity == null) {
50
+ promise.reject("NO_ACTIVITY", "Current activity is null.");
51
+ return;
52
+ }
53
+ currentActivity.runOnUiThread(() ->
54
+ AdWhaleMediationAds.requestGdprConsent(currentActivity, (isSuccess, message) -> {
55
+ WritableMap result = Arguments.createMap();
56
+ result.putBoolean("isSuccess", isSuccess);
57
+ result.putString("message", message);
58
+ promise.resolve(result);
59
+ })
60
+ );
61
+ }
62
+
63
+ @ReactMethod
64
+ public void getConsentStatus(Promise promise) {
65
+ Activity currentActivity = getCurrentActivity();
66
+ if (currentActivity == null) {
67
+ promise.reject("NO_ACTIVITY", "Current activity is null.");
68
+ return;
69
+ }
70
+
71
+ boolean coppa = AdWhaleMediationAds.isCoppaApplied();
72
+ GdprConsentStatus gdpr = AdWhaleMediationAds.getGdprConsentStatus(currentActivity);
73
+ boolean personalizedConsent = AdWhaleMediationAds.getAdwhaleGDPR(currentActivity);
74
+
75
+ WritableMap statusMap = Arguments.createMap();
76
+ statusMap.putBoolean("coppa", coppa);
77
+ statusMap.putString("gdpr", gdpr.name());
78
+ statusMap.putBoolean("personalizedConsent", personalizedConsent);
79
+
80
+ promise.resolve(statusMap);
81
+ }
82
+
83
+ @ReactMethod
84
+ public void resetGdprConsentStatus() {
85
+ Activity currentActivity = getCurrentActivity();
86
+ if (currentActivity != null) {
87
+ currentActivity.runOnUiThread(() -> AdWhaleMediationAds.resetGdprConsentStatus(currentActivity));
88
+ Log.d(REACT_CLASS_NAME, "GDPR consent status has been reset.");
89
+ }
90
+ }
91
+
92
+ @ReactMethod
93
+ public void setGdpr(boolean consent) {
94
+ AdWhaleMediationAds.setGdpr(consent);
95
+ Log.d(REACT_CLASS_NAME, "Personalized Consent set to: " + consent);
96
+ }
97
+
37
98
  @ReactMethod(isBlockingSynchronousMethod = true)
38
99
  public void initialize(final Promise promise) {
39
100
  Log.i(REACT_CLASS_NAME, ".initialize()");
@@ -2,16 +2,25 @@
2
2
 
3
3
  // src/AdWhaleMediationSdk.ts
4
4
  import { NativeModules, Platform } from 'react-native';
5
+ import NativeAdwhaleSdkReactNative from "./NativeAdwhaleSdkReactNative.js";
5
6
  const LINKING_ERROR = `AdWhale Mediation SDK native modules not linked.\n` + `Make sure:\n` + ` • Android: AdwhaleSdkReactNative / RNAdWhaleMediationLoggerModule 등록 여부\n` + ` • iOS: Pod install 및 빌드 완료 여부\n` + ` • Web 환경에서 실행 중이 아닌지\n` + `Platform: ${Platform.OS}`;
6
-
7
- // 네이티브 이름에 맞게 수정 👇
8
-
9
7
  const {
10
- AdwhaleSdkReactNative,
11
8
  RNAdWhaleMediationLoggerModule
12
9
  } = NativeModules;
10
+
11
+ // TurboModule spec을 통해 접근
12
+ const AdwhaleSdkReactNative = NativeAdwhaleSdkReactNative;
13
13
  if (!AdwhaleSdkReactNative) {
14
14
  console.warn(LINKING_ERROR);
15
+ } else {
16
+ console.log('[AdWhaleMediationSdk] Native module linked:', {
17
+ hasInitialize: !!AdwhaleSdkReactNative.initialize,
18
+ hasRequestGdprConsent: !!AdwhaleSdkReactNative.requestGdprConsent,
19
+ hasGetConsentStatus: !!AdwhaleSdkReactNative.getConsentStatus,
20
+ hasResetGdprConsentStatus: !!AdwhaleSdkReactNative.resetGdprConsentStatus,
21
+ hasSetGdpr: !!AdwhaleSdkReactNative.setGdpr,
22
+ hasSetCoppa: !!AdwhaleSdkReactNative.setCoppa
23
+ });
15
24
  }
16
25
  export const AdWhaleMediationSdk = {
17
26
  initialize() {
@@ -24,25 +33,46 @@ export const AdWhaleMediationSdk = {
24
33
  RNAdWhaleMediationLoggerModule?.setLogLevel?.(enabled);
25
34
  },
26
35
  setCoppa(enabled) {
27
- AdwhaleSdkReactNative?.setCoppa?.(enabled);
36
+ console.log('[AdWhaleMediationSdk] setCoppa called:', enabled);
37
+ if (!AdwhaleSdkReactNative?.setCoppa) {
38
+ console.warn('[AdWhaleMediationSdk] setCoppa is not implemented in native module');
39
+ return;
40
+ }
41
+ AdwhaleSdkReactNative.setCoppa(enabled);
28
42
  },
29
43
  requestGdprConsent() {
44
+ console.log('[AdWhaleMediationSdk] requestGdprConsent called');
30
45
  if (!AdwhaleSdkReactNative?.requestGdprConsent) {
31
- return Promise.reject(new Error('requestGdprConsent is not implemented in native module'));
46
+ const error = new Error('requestGdprConsent is not implemented in native module');
47
+ console.error('[AdWhaleMediationSdk]', error);
48
+ return Promise.reject(error);
32
49
  }
33
50
  return AdwhaleSdkReactNative.requestGdprConsent();
34
51
  },
35
52
  getConsentStatus() {
53
+ console.log('[AdWhaleMediationSdk] getConsentStatus called');
36
54
  if (!AdwhaleSdkReactNative?.getConsentStatus) {
37
- return Promise.reject(new Error('getConsentStatus is not implemented in native module'));
55
+ const error = new Error('getConsentStatus is not implemented in native module');
56
+ console.error('[AdWhaleMediationSdk]', error);
57
+ return Promise.reject(error);
38
58
  }
39
59
  return AdwhaleSdkReactNative.getConsentStatus();
40
60
  },
41
61
  resetGdprConsentStatus() {
42
- AdwhaleSdkReactNative?.resetGdprConsentStatus?.();
62
+ console.log('[AdWhaleMediationSdk] resetGdprConsentStatus called');
63
+ if (!AdwhaleSdkReactNative?.resetGdprConsentStatus) {
64
+ console.warn('[AdWhaleMediationSdk] resetGdprConsentStatus is not implemented in native module');
65
+ return;
66
+ }
67
+ AdwhaleSdkReactNative.resetGdprConsentStatus();
43
68
  },
44
69
  setGdpr(consent) {
45
- AdwhaleSdkReactNative?.setGdpr?.(consent);
70
+ console.log('[AdWhaleMediationSdk] setGdpr called:', consent);
71
+ if (!AdwhaleSdkReactNative?.setGdpr) {
72
+ console.warn('[AdWhaleMediationSdk] setGdpr is not implemented in native module');
73
+ return;
74
+ }
75
+ AdwhaleSdkReactNative.setGdpr(consent);
46
76
  }
47
77
  };
48
78
  //# sourceMappingURL=AdWhaleMediationSdk.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","OS","AdwhaleSdkReactNative","RNAdWhaleMediationLoggerModule","console","warn","AdWhaleMediationSdk","initialize","Promise","reject","Error","setLoggerEnabled","enabled","setLogLevel","setCoppa","requestGdprConsent","getConsentStatus","resetGdprConsentStatus","setGdpr","consent"],"sourceRoot":"../../src","sources":["AdWhaleMediationSdk.ts"],"mappings":";;AAAA;AACA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,oDAAoD,GACpD,cAAc,GACd,6EAA6E,GAC7E,mCAAmC,GACnC,0BAA0B,GAC1B,aAAaD,QAAQ,CAACE,EAAE,EAAE;;AAE5B;;AAwBA,MAAM;EACJC,qBAAqB;EACrBC;AACF,CAAC,GAAGL,aAGH;AAED,IAAI,CAACI,qBAAqB,EAAE;EAC1BE,OAAO,CAACC,IAAI,CAACL,aAAa,CAAC;AAC7B;AAEA,OAAO,MAAMM,mBAAmB,GAAG;EACjCC,UAAUA,CAAA,EAAoB;IAC5B,IAAI,CAACL,qBAAqB,EAAEK,UAAU,EAAE;MACtC,OAAOC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAACV,aAAa,CAAC,CAAC;IACjD;IACA,OAAOE,qBAAqB,CAACK,UAAU,CAAC,CAAC;EAC3C,CAAC;EAEDI,gBAAgBA,CAACC,OAAgB,EAAE;IACjCT,8BAA8B,EAAEU,WAAW,GAAGD,OAAO,CAAC;EACxD,CAAC;EAEDE,QAAQA,CAACF,OAAgB,EAAE;IACzBV,qBAAqB,EAAEY,QAAQ,GAAGF,OAAO,CAAC;EAC5C,CAAC;EAEDG,kBAAkBA,CAAA,EAAqD;IACrE,IAAI,CAACb,qBAAqB,EAAEa,kBAAkB,EAAE;MAC9C,OAAOP,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CAAC,wDAAwD,CACpE,CAAC;IACH;IACA,OAAOR,qBAAqB,CAACa,kBAAkB,CAAC,CAAC;EACnD,CAAC;EAEDC,gBAAgBA,CAAA,EAIb;IACD,IAAI,CAACd,qBAAqB,EAAEc,gBAAgB,EAAE;MAC5C,OAAOR,OAAO,CAACC,MAAM,CACnB,IAAIC,KAAK,CAAC,sDAAsD,CAClE,CAAC;IACH;IACA,OAAOR,qBAAqB,CAACc,gBAAgB,CAAC,CAAC;EACjD,CAAC;EAEDC,sBAAsBA,CAAA,EAAG;IACvBf,qBAAqB,EAAEe,sBAAsB,GAAG,CAAC;EACnD,CAAC;EAEDC,OAAOA,CAACC,OAAgB,EAAE;IACxBjB,qBAAqB,EAAEgB,OAAO,GAAGC,OAAO,CAAC;EAC3C;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","NativeAdwhaleSdkReactNative","LINKING_ERROR","OS","RNAdWhaleMediationLoggerModule","AdwhaleSdkReactNative","console","warn","log","hasInitialize","initialize","hasRequestGdprConsent","requestGdprConsent","hasGetConsentStatus","getConsentStatus","hasResetGdprConsentStatus","resetGdprConsentStatus","hasSetGdpr","setGdpr","hasSetCoppa","setCoppa","AdWhaleMediationSdk","Promise","reject","Error","setLoggerEnabled","enabled","setLogLevel","error","consent"],"sourceRoot":"../../src","sources":["AdWhaleMediationSdk.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeAdwhaleSdkReactNative.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AAMpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,uBAAuB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeAdwhaleSdkReactNative.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AAkBpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,uBAAuB,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"AdWhaleMediationSdk.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleMediationSdk.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,mBAAmB;kBAChB,OAAO,CAAC,MAAM,CAAC;8BAOH,OAAO;sBAIf,OAAO;0BAIH,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;wBASlD,OAAO,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;;qBAae,OAAO;CAGzB,CAAC"}
1
+ {"version":3,"file":"AdWhaleMediationSdk.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleMediationSdk.ts"],"names":[],"mappings":"AAoCA,eAAO,MAAM,mBAAmB;kBAChB,OAAO,CAAC,MAAM,CAAC;8BAOH,OAAO;sBAIf,OAAO;0BASH,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;wBAUlD,OAAO,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;;qBAmBe,OAAO;CAQzB,CAAC"}
@@ -1,6 +1,18 @@
1
1
  import { type TurboModule } from 'react-native';
2
2
  export interface Spec extends TurboModule {
3
3
  initialize(): Promise<number>;
4
+ setCoppa(isEnabled: boolean): void;
5
+ requestGdprConsent(): Promise<{
6
+ isSuccess: boolean;
7
+ message: string;
8
+ }>;
9
+ getConsentStatus(): Promise<{
10
+ coppa: boolean;
11
+ gdpr: string;
12
+ personalizedConsent: boolean;
13
+ }>;
14
+ resetGdprConsentStatus(): void;
15
+ setGdpr(consent: boolean): void;
4
16
  }
5
17
  declare const _default: Spec;
6
18
  export default _default;
@@ -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,IAAK,SAAQ,WAAW;IACvC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;;AAED,wBAA+E"}
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,IAAK,SAAQ,WAAW;IACvC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,kBAAkB,IAAI,OAAO,CAAC;QAC5B,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,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;CACjC;;AAED,wBAA+E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adwhale-sdk-react-native",
3
- "version": "2.7.100",
3
+ "version": "2.7.101",
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",
@@ -1,20 +1,10 @@
1
1
  const path = require('path');
2
2
 
3
3
  module.exports = {
4
- dependencies: {
5
- 'adwhale-sdk-react-native': {
6
- root: path.resolve(__dirname),
7
- platforms: {
8
- android: {
9
- sourceDir: path.join(__dirname, 'android'),
10
- },
11
- ios: {
12
- // iOS는 나중에 구현할 예정이라면 비워둬도 됨
13
- // podspec이 있으므로 autolinking은 자동됨
14
- },
15
- },
16
- },
17
- },
4
+ // dependencies 섹션은 제거 - 라이브러리 프로젝트 자체에서는 불필요하며
5
+ // autolinking 충돌을 일으킬 수 있음
6
+ // 다른 프로젝트에서 이 라이브러리를 사용할 때는 package.json의 설정을 기반으로
7
+ // 자동으로 autolinking이 동작함
18
8
 
19
9
  // TurboModule codegen 위치 지정
20
10
  project: {
@@ -1,5 +1,6 @@
1
1
  // src/AdWhaleMediationSdk.ts
2
2
  import { NativeModules, Platform } from 'react-native';
3
+ import NativeAdwhaleSdkReactNative from './NativeAdwhaleSdkReactNative';
3
4
 
4
5
  const LINKING_ERROR =
5
6
  `AdWhale Mediation SDK native modules not linked.\n` +
@@ -9,40 +10,28 @@ const LINKING_ERROR =
9
10
  ` • Web 환경에서 실행 중이 아닌지\n` +
10
11
  `Platform: ${Platform.OS}`;
11
12
 
12
- // 네이티브 이름에 맞게 수정 👇
13
- interface AdwhaleSdkReactNativeModule {
14
- initialize(): Promise<number>;
15
-
16
- // 아래 메서드들은 네이티브에 없으면 자동으로 undefined라서
17
- // JS에서 optional로 안전하게 처리됨
18
- setCoppa?(enabled: boolean): void;
19
- requestGdprConsent?(): Promise<{
20
- isSuccess: boolean;
21
- message: string;
22
- }>;
23
- getConsentStatus?(): Promise<{
24
- coppa: boolean;
25
- gdpr: string;
26
- personalizedConsent: boolean;
27
- }>;
28
- resetGdprConsentStatus?(): void;
29
- setGdpr?(consent: boolean): void;
30
- }
31
-
32
13
  interface RNAdWhaleMediationLoggerModule {
33
14
  setLogLevel?(enabled: boolean): void;
34
15
  }
35
16
 
36
- const {
37
- AdwhaleSdkReactNative,
38
- RNAdWhaleMediationLoggerModule,
39
- } = NativeModules as {
40
- AdwhaleSdkReactNative?: AdwhaleSdkReactNativeModule;
17
+ const { RNAdWhaleMediationLoggerModule } = NativeModules as {
41
18
  RNAdWhaleMediationLoggerModule?: RNAdWhaleMediationLoggerModule;
42
19
  };
43
20
 
21
+ // TurboModule spec을 통해 접근
22
+ const AdwhaleSdkReactNative = NativeAdwhaleSdkReactNative;
23
+
44
24
  if (!AdwhaleSdkReactNative) {
45
25
  console.warn(LINKING_ERROR);
26
+ } else {
27
+ console.log('[AdWhaleMediationSdk] Native module linked:', {
28
+ hasInitialize: !!AdwhaleSdkReactNative.initialize,
29
+ hasRequestGdprConsent: !!AdwhaleSdkReactNative.requestGdprConsent,
30
+ hasGetConsentStatus: !!AdwhaleSdkReactNative.getConsentStatus,
31
+ hasResetGdprConsentStatus: !!AdwhaleSdkReactNative.resetGdprConsentStatus,
32
+ hasSetGdpr: !!AdwhaleSdkReactNative.setGdpr,
33
+ hasSetCoppa: !!AdwhaleSdkReactNative.setCoppa,
34
+ });
46
35
  }
47
36
 
48
37
  export const AdWhaleMediationSdk = {
@@ -58,14 +47,20 @@ export const AdWhaleMediationSdk = {
58
47
  },
59
48
 
60
49
  setCoppa(enabled: boolean) {
61
- AdwhaleSdkReactNative?.setCoppa?.(enabled);
50
+ console.log('[AdWhaleMediationSdk] setCoppa called:', enabled);
51
+ if (!AdwhaleSdkReactNative?.setCoppa) {
52
+ console.warn('[AdWhaleMediationSdk] setCoppa is not implemented in native module');
53
+ return;
54
+ }
55
+ AdwhaleSdkReactNative.setCoppa(enabled);
62
56
  },
63
57
 
64
58
  requestGdprConsent(): Promise<{ isSuccess: boolean; message: string }> {
59
+ console.log('[AdWhaleMediationSdk] requestGdprConsent called');
65
60
  if (!AdwhaleSdkReactNative?.requestGdprConsent) {
66
- return Promise.reject(
67
- new Error('requestGdprConsent is not implemented in native module'),
68
- );
61
+ const error = new Error('requestGdprConsent is not implemented in native module');
62
+ console.error('[AdWhaleMediationSdk]', error);
63
+ return Promise.reject(error);
69
64
  }
70
65
  return AdwhaleSdkReactNative.requestGdprConsent();
71
66
  },
@@ -75,19 +70,30 @@ export const AdWhaleMediationSdk = {
75
70
  gdpr: string;
76
71
  personalizedConsent: boolean;
77
72
  }> {
73
+ console.log('[AdWhaleMediationSdk] getConsentStatus called');
78
74
  if (!AdwhaleSdkReactNative?.getConsentStatus) {
79
- return Promise.reject(
80
- new Error('getConsentStatus is not implemented in native module'),
81
- );
75
+ const error = new Error('getConsentStatus is not implemented in native module');
76
+ console.error('[AdWhaleMediationSdk]', error);
77
+ return Promise.reject(error);
82
78
  }
83
79
  return AdwhaleSdkReactNative.getConsentStatus();
84
80
  },
85
81
 
86
82
  resetGdprConsentStatus() {
87
- AdwhaleSdkReactNative?.resetGdprConsentStatus?.();
83
+ console.log('[AdWhaleMediationSdk] resetGdprConsentStatus called');
84
+ if (!AdwhaleSdkReactNative?.resetGdprConsentStatus) {
85
+ console.warn('[AdWhaleMediationSdk] resetGdprConsentStatus is not implemented in native module');
86
+ return;
87
+ }
88
+ AdwhaleSdkReactNative.resetGdprConsentStatus();
88
89
  },
89
90
 
90
91
  setGdpr(consent: boolean) {
91
- AdwhaleSdkReactNative?.setGdpr?.(consent);
92
+ console.log('[AdWhaleMediationSdk] setGdpr called:', consent);
93
+ if (!AdwhaleSdkReactNative?.setGdpr) {
94
+ console.warn('[AdWhaleMediationSdk] setGdpr is not implemented in native module');
95
+ return;
96
+ }
97
+ AdwhaleSdkReactNative.setGdpr(consent);
92
98
  },
93
99
  };
@@ -2,6 +2,18 @@ import { TurboModuleRegistry, type TurboModule } from 'react-native';
2
2
 
3
3
  export interface Spec extends TurboModule {
4
4
  initialize(): Promise<number>;
5
+ setCoppa(isEnabled: boolean): void;
6
+ requestGdprConsent(): Promise<{
7
+ isSuccess: boolean;
8
+ message: string;
9
+ }>;
10
+ getConsentStatus(): Promise<{
11
+ coppa: boolean;
12
+ gdpr: string;
13
+ personalizedConsent: boolean;
14
+ }>;
15
+ resetGdprConsentStatus(): void;
16
+ setGdpr(consent: boolean): void;
5
17
  }
6
18
 
7
19
  export default TurboModuleRegistry.getEnforcing<Spec>('AdwhaleSdkReactNative');