@apps-in-toss/native-modules 0.0.0-dev.1752115036458 → 0.0.0-dev.1757056983098

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 (77) hide show
  1. package/dist/bridges-meta.json +36 -13
  2. package/dist/index.cjs +343 -129
  3. package/dist/index.d.cts +1212 -418
  4. package/dist/index.d.ts +1212 -418
  5. package/dist/index.js +315 -108
  6. package/package.json +7 -8
  7. package/src/AppsInTossModule/constants.ts +6 -0
  8. package/src/AppsInTossModule/native-event-emitter/appsInTossEvent.ts +15 -0
  9. package/src/AppsInTossModule/native-event-emitter/contactsViral.ts +140 -0
  10. package/src/AppsInTossModule/native-event-emitter/event-plugins/EntryMessageExitedEvent.ts +10 -0
  11. package/src/AppsInTossModule/native-event-emitter/event-plugins/HomeIconButtonClickHandleEvent.ts +10 -0
  12. package/src/AppsInTossModule/native-event-emitter/event-plugins/UpdateLocationEvent.ts +60 -0
  13. package/src/AppsInTossModule/native-event-emitter/index.ts +6 -0
  14. package/src/AppsInTossModule/native-event-emitter/internal/AppBridgeCallbackEvent.ts +45 -0
  15. package/src/AppsInTossModule/native-event-emitter/internal/VisibilityChangedByTransparentServiceWebEvent.ts +50 -0
  16. package/src/AppsInTossModule/native-event-emitter/internal/appBridge.spec.ts +135 -0
  17. package/src/AppsInTossModule/native-event-emitter/internal/appBridge.ts +79 -0
  18. package/src/AppsInTossModule/native-event-emitter/internal/onVisibilityChangedByTransparentServiceWeb.ts +20 -0
  19. package/src/AppsInTossModule/native-event-emitter/nativeEventEmitter.ts +35 -0
  20. package/src/AppsInTossModule/native-event-emitter/startUpdateLocation.ts +98 -0
  21. package/src/AppsInTossModule/native-event-emitter/types.ts +4 -0
  22. package/src/AppsInTossModule/native-modules/AppsInTossModule.ts +89 -0
  23. package/src/AppsInTossModule/native-modules/ads/googleAdMob.ts +681 -0
  24. package/src/AppsInTossModule/native-modules/ads/googleAdMobV2.ts +363 -0
  25. package/src/AppsInTossModule/native-modules/ads/types.ts +123 -0
  26. package/src/AppsInTossModule/native-modules/appLogin.ts +29 -0
  27. package/src/AppsInTossModule/native-modules/checkoutPayment.ts +80 -0
  28. package/src/AppsInTossModule/native-modules/eventLog.spec.ts +300 -0
  29. package/src/AppsInTossModule/native-modules/eventLog.ts +77 -0
  30. package/src/AppsInTossModule/native-modules/fetchAlbumPhotos.ts +88 -0
  31. package/src/AppsInTossModule/native-modules/fetchContacts.ts +121 -0
  32. package/src/AppsInTossModule/native-modules/getClipboardText.ts +47 -0
  33. package/src/AppsInTossModule/native-modules/getCurrentLocation.ts +65 -0
  34. package/src/AppsInTossModule/native-modules/getDeviceId.ts +33 -0
  35. package/src/AppsInTossModule/native-modules/getGameCenterGameProfile.ts +68 -0
  36. package/src/AppsInTossModule/native-modules/getOperationalEnvironment.ts +37 -0
  37. package/src/AppsInTossModule/native-modules/getPermission.ts +58 -0
  38. package/src/AppsInTossModule/native-modules/getTossAppVersion.ts +33 -0
  39. package/src/AppsInTossModule/native-modules/getTossShareLink.ts +39 -0
  40. package/src/AppsInTossModule/native-modules/iap.ts +213 -0
  41. package/src/AppsInTossModule/native-modules/index.ts +104 -0
  42. package/src/AppsInTossModule/native-modules/isMinVersionSupported.spec.ts +190 -0
  43. package/src/AppsInTossModule/native-modules/isMinVersionSupported.ts +68 -0
  44. package/src/AppsInTossModule/native-modules/openCamera.ts +81 -0
  45. package/src/AppsInTossModule/native-modules/openGameCenterLeaderboard.ts +44 -0
  46. package/src/AppsInTossModule/native-modules/openPermissionDialog.ts +54 -0
  47. package/src/AppsInTossModule/native-modules/requestPermission.ts +63 -0
  48. package/src/AppsInTossModule/native-modules/saveBase64Data.ts +57 -0
  49. package/src/AppsInTossModule/native-modules/setClipboardText.ts +39 -0
  50. package/src/AppsInTossModule/native-modules/setDeviceOrientation.ts +74 -0
  51. package/src/AppsInTossModule/native-modules/storage.ts +100 -0
  52. package/src/AppsInTossModule/native-modules/submitGameCenterLeaderBoardScore.ts +74 -0
  53. package/src/AppsInTossModule/native-modules/tossCore.ts +29 -0
  54. package/src/BedrockModule/native-modules/core/BedrockCoreModule.ts +8 -0
  55. package/src/BedrockModule/native-modules/index.ts +4 -0
  56. package/src/BedrockModule/native-modules/natives/BedrockModule.ts +20 -0
  57. package/src/BedrockModule/native-modules/natives/closeView.ts +25 -0
  58. package/src/BedrockModule/native-modules/natives/generateHapticFeedback/index.ts +27 -0
  59. package/src/BedrockModule/native-modules/natives/generateHapticFeedback/types.ts +38 -0
  60. package/src/BedrockModule/native-modules/natives/getLocale.ts +46 -0
  61. package/src/BedrockModule/native-modules/natives/getNetworkStatus/index.ts +59 -0
  62. package/src/BedrockModule/native-modules/natives/getNetworkStatus/types.ts +1 -0
  63. package/src/BedrockModule/native-modules/natives/getPlatformOS.ts +37 -0
  64. package/src/BedrockModule/native-modules/natives/getSchemeUri.ts +27 -0
  65. package/src/BedrockModule/native-modules/natives/index.ts +11 -0
  66. package/src/BedrockModule/native-modules/natives/openURL.ts +40 -0
  67. package/src/BedrockModule/native-modules/natives/setIosSwipeGestureEnabled.ts +43 -0
  68. package/src/BedrockModule/native-modules/natives/setScreenAwakeMode.ts +66 -0
  69. package/src/BedrockModule/native-modules/natives/setSecureScreen.ts +31 -0
  70. package/src/BedrockModule/native-modules/natives/share.ts +36 -0
  71. package/src/async-bridges.ts +3 -0
  72. package/src/event-bridges.ts +2 -0
  73. package/src/index.ts +16 -0
  74. package/src/types.ts +108 -0
  75. package/src/utils/compareVersion.spec.ts +176 -0
  76. package/src/utils/compareVersion.ts +104 -0
  77. package/src/utils/generateUUID.ts +5 -0
@@ -0,0 +1,100 @@
1
+ import { AppsInTossModule } from './AppsInTossModule';
2
+
3
+ /**
4
+ * @public
5
+ * @category 저장소
6
+ * @name getItem
7
+ * @description 모바일 앱의 로컬 저장소에서 문자열 데이터를 가져와요. 주로 앱이 종료되었다가 다시 시작해도 데이터가 유지되어야 하는 경우에 사용해요.
8
+ * @param {string} key - 가져올 아이템의 키를 입력해요.
9
+ * @returns {Promise<string | null>} 지정한 키에 저장된 문자열 값을 반환해요. 값이 없으면 `null`을 반환해요.
10
+ * @example
11
+ *
12
+ * ### `my-key`에 저장된 아이템 가져오기
13
+ * ```ts
14
+ * const value = await Storage.getItem('my-key');
15
+ * console.log(value); // 'value'
16
+ * ```
17
+ */
18
+ function getItem(key: string): Promise<string | null> {
19
+ return AppsInTossModule.getStorageItem({ key });
20
+ }
21
+
22
+ /**
23
+ * @public
24
+ * @category 저장소
25
+ * @name setItem
26
+ * @description 모바일 앱의 로컬 저장소에 문자열 데이터를 저장해요. 주로 앱이 종료되었다가 다시 시작해도 데이터가 유지되어야 하는 경우에 사용해요.
27
+ * @param {string} key - 저장할 아이템의 키를 입력해요.
28
+ * @param {string} value - 저장할 아이템의 값을 입력해요.
29
+ * @returns {Promise<void>} 아이템을 성공적으로 저장하면 아무 값도 반환하지 않아요.
30
+ * @example
31
+ *
32
+ * ### `my-key`에 아이템 저장하기
33
+ * ```ts
34
+ * import { Storage } from '@apps-in-toss/framework';
35
+ *
36
+ * await Storage.setItem('my-key', 'value');
37
+ * ```
38
+ */
39
+ function setItem(key: string, value: string): Promise<void> {
40
+ return AppsInTossModule.setStorageItem({
41
+ key,
42
+ value,
43
+ });
44
+ }
45
+
46
+ /**
47
+ * @public
48
+ * @category 저장소
49
+ * @name removeItem
50
+ * @description 모바일 앱의 로컬 저장소에서 특정 키에 해당하는 아이템을 삭제해요.
51
+ * @param {string} key - 삭제할 아이템의 키를 입력해요.
52
+ * @returns {Promise<void>} 아이템을 삭제하면 아무 값도 반환하지 않아요.
53
+ * @example
54
+ *
55
+ * ### `my-key`에 저장된 아이템 삭제하기
56
+ * ```ts
57
+ * import { Storage } from '@apps-in-toss/framework';
58
+ *
59
+ * await Storage.removeItem('my-key');
60
+ * ```
61
+ */
62
+ function removeItem(key: string): Promise<void> {
63
+ return AppsInTossModule.removeStorageItem({ key });
64
+ }
65
+
66
+ /**
67
+ * @public
68
+ * @category 저장소
69
+ * @name clearItems
70
+ * @description 모바일 앱의 로컬 저장소의 모든 아이템을 삭제해요.
71
+ * @returns {Promise<void>} 아이템을 삭제하면 아무 값도 반환하지 않고 저장소가 초기화돼요.
72
+ * @example
73
+ *
74
+ * ### 저장소 초기화하기
75
+ * ```ts
76
+ * import { Storage } from '@apps-in-toss/framework';
77
+ *
78
+ * await Storage.clearItems();
79
+ * ```
80
+ */
81
+ function clearItems(): Promise<void> {
82
+ return AppsInTossModule.clearStorage({});
83
+ }
84
+
85
+ /**
86
+ * @public
87
+ * @category 저장소
88
+ * @name Storage
89
+ * @description 네이티브의 저장소를 사용해요.
90
+ * @property {typeof getItem} [getItem] 모바일 앱의 로컬 저장소에서 아이템을 가져오는 함수예요. 자세한 내용은 [getItem](/react-native/reference/native-modules/저장소/getItem.html)을 참고하세요.
91
+ * @property {typeof setItem} [setItem] 모바일 앱의 로컬 저장소에 아이템을 저장하는 함수예요. 자세한 내용은 [setItem](/react-native/reference/native-modules/저장소/setItem.html)을 참고하셰요.
92
+ * @property {typeof removeItem} [removeItem] 모바일 앱의 로컬 저장소에서 아이템을 삭제하는 함수예요. 자세한 내용은 [removeItem](/react-native/reference/native-modules/저장소/removeItem.html)을 참고하세요.
93
+ * @property {typeof clearItems} [clearItems] 모바일 앱의 로컬 저장소를 초기화하는 함수예요. 자세한 내용은 [clearItems](/react-native/reference/native-modules/저장소/clearItems.html)을 참고하세요.
94
+ */
95
+ export const Storage = {
96
+ getItem,
97
+ setItem,
98
+ removeItem,
99
+ clearItems,
100
+ };
@@ -0,0 +1,74 @@
1
+ import { AppsInTossModule } from './AppsInTossModule';
2
+ import { isMinVersionSupported } from './isMinVersionSupported';
3
+ import { GAME_CENTER_MIN_VERSION } from '../constants';
4
+
5
+ /**
6
+ * @public
7
+ * @category 게임센터
8
+ * @name SubmitGameCenterLeaderBoardScoreResponse
9
+ * @description
10
+ * 토스게임센터 리더보드에 점수를 제출한 결과 정보를 담아서 반환해요. 반환된 정보를 사용해서 점수 제출 결과에 따라 적절한 에러 처리를 할 수 있어요.
11
+ * @property {'SUCCESS' | 'LEADERBOARD_NOT_FOUND' | 'PROFILE_NOT_FOUND' | 'UNPARSABLE_SCORE'} statusCode
12
+ * 점수 제출 결과를 나타내는 상태 코드예요.
13
+ * - `'SUCCESS'`: 점수 제출이 성공했어요.
14
+ * - `'LEADERBOARD_NOT_FOUND'`: `gameId`에 해당하는 리더보드를 찾을 수 없어요.
15
+ * - `'PROFILE_NOT_FOUND'`: 사용자의 프로필이 없어요.
16
+ * - `'UNPARSABLE_SCORE'`: 점수를 해석할 수 없어요. 점수는 실수(float) 형태의 문자열로 전달해야 해요.
17
+ */
18
+ export interface SubmitGameCenterLeaderBoardScoreResponse {
19
+ statusCode: 'SUCCESS' | 'LEADERBOARD_NOT_FOUND' | 'PROFILE_NOT_FOUND' | 'UNPARSABLE_SCORE';
20
+ }
21
+
22
+ /**
23
+ * @public
24
+ * @category 게임센터
25
+ * @name submitGameCenterLeaderBoardScore
26
+ * @description
27
+ * 사용자의 게임 점수를 토스게임센터 리더보드에 제출해요. 이 기능으로 사용자의 점수를 공식 리더보드에 기록하고 다른 사용자와 비교할 수 있어요.
28
+ * @param {string} params.score
29
+ * 제출할 게임 점수예요. 실수 형태의 숫자를 문자열로 전달해야 해요. 예를들어 `"123.45"` 또는 `"9999"` 예요.
30
+ * @returns {Promise<SubmitGameCenterLeaderBoardScoreResponse | undefined>}
31
+ * 점수 제출 결과를 반환해요. 앱 버전이 최소 지원 버전보다 낮으면 아무 동작도 하지 않고 `undefined`를 반환해요.
32
+ *
33
+ * @example
34
+ * ### 게임 점수를 토스게임센터 리더보드에 제출하기
35
+ * ```tsx
36
+ * import { Button } from 'react-native';
37
+ * import { submitGameCenterLeaderBoardScore } from '@apps-in-toss/framework';
38
+ *
39
+ * function GameCenterLeaderBoardScoreSubmitButton() {
40
+ * async function handlePress() {
41
+ * try {
42
+ * const result = await submitGameCenterLeaderBoardScore({ score: '123.45' });
43
+ *
44
+ * if (!result) {
45
+ * console.warn('지원하지 않는 앱 버전이에요.');
46
+ * return;
47
+ * }
48
+ *
49
+ * if (result.statusCode === 'SUCCESS') {
50
+ * console.log('점수 제출 성공!');
51
+ * } else {
52
+ * console.error('점수 제출 실패:', result.statusCode);
53
+ * }
54
+ * } catch (error) {
55
+ * console.error('점수 제출 중 오류가 발생했어요.', error);
56
+ * }
57
+ * }
58
+ *
59
+ * return (
60
+ * <Button onPress={handlePress}>점수 제출하기</Button>
61
+ * );
62
+ * }
63
+ * ```
64
+ */
65
+
66
+ export async function submitGameCenterLeaderBoardScore(params: { score: string }) {
67
+ const isSupported = isMinVersionSupported(GAME_CENTER_MIN_VERSION);
68
+
69
+ if (!isSupported) {
70
+ return;
71
+ }
72
+
73
+ return AppsInTossModule.submitGameCenterLeaderBoardScore(params);
74
+ }
@@ -0,0 +1,29 @@
1
+ import { NativeModules } from 'react-native';
2
+ import { getOperationalEnvironment } from './getOperationalEnvironment';
3
+ import { isMinVersionSupported } from './isMinVersionSupported';
4
+
5
+ const TossCoreModule: {
6
+ eventLog: (params: {
7
+ params: {
8
+ log_name: string;
9
+ log_type: string;
10
+ params: Record<string, unknown>;
11
+ };
12
+ }) => Promise<void>;
13
+ } = NativeModules.TossCoreModule;
14
+
15
+ export function tossCoreEventLog(params: { log_name: string; log_type: string; params: Record<string, unknown> }) {
16
+ const supported = isMinVersionSupported({ ios: '5.210.0', android: '5.210.0' });
17
+ const isSandbox = getOperationalEnvironment() === 'sandbox';
18
+ if (!supported || isSandbox) {
19
+ return;
20
+ }
21
+
22
+ TossCoreModule.eventLog({
23
+ params: {
24
+ log_name: params.log_name,
25
+ log_type: params.log_type,
26
+ params: params.params,
27
+ },
28
+ });
29
+ }
@@ -0,0 +1,8 @@
1
+ import { NativeModules } from 'react-native';
2
+
3
+ interface BedrockCoreModule {
4
+ addListener: (eventType: string) => void;
5
+ removeListeners: (count: number) => void;
6
+ }
7
+
8
+ export const BedrockCoreModule: BedrockCoreModule = NativeModules.BedrockCoreModule;
@@ -0,0 +1,4 @@
1
+ /** Bridges API */
2
+ export * from './natives';
3
+ export { BedrockModule } from './natives/BedrockModule';
4
+ export { BedrockCoreModule } from './core/BedrockCoreModule';
@@ -0,0 +1,20 @@
1
+ import { NativeModules } from 'react-native';
2
+ import type { HapticFeedbackOptions } from './generateHapticFeedback/types';
3
+ import type { NetworkStatus } from './getNetworkStatus/types';
4
+
5
+ interface BedrockModule {
6
+ closeView: () => void;
7
+ generateHapticFeedback: (options: HapticFeedbackOptions) => Promise<void>;
8
+ share: (message: { message: string }) => void;
9
+ setSecureScreen: (options: { enabled: boolean }) => Promise<{ enabled: boolean }>;
10
+ setScreenAwakeMode: (options: { enabled: boolean }) => Promise<{ enabled: boolean }>;
11
+ getNetworkStatus: () => Promise<NetworkStatus>;
12
+ setIosSwipeGestureEnabled: ({ isEnabled }: { isEnabled: boolean }) => Promise<void>;
13
+ deviceId: string;
14
+ DeviceInfo: {
15
+ locale: string;
16
+ };
17
+ schemeUri: string;
18
+ }
19
+
20
+ export const BedrockModule: BedrockModule = NativeModules.BedrockModule;
@@ -0,0 +1,25 @@
1
+ import { BedrockModule } from './BedrockModule';
2
+
3
+ /**
4
+ * @public
5
+ * @category 화면 제어
6
+ * @kind function
7
+ * @name closeView
8
+ * @description 현재 화면을 닫는 함수에요. 예를 들어, "닫기" 버튼을 눌러서 서비스를 종료할 때 사용할 수 있어요.
9
+ * @returns {Promise<void>}
10
+ *
11
+ * @example
12
+ * ### 닫기 버튼을 눌러 화면 닫기
13
+ *
14
+ * ```tsx
15
+ * import { Button } from 'react-native';
16
+ * import { closeView } from '@apps-in-toss/native-modules';
17
+ *
18
+ * function CloseButton() {
19
+ * return <Button title="닫기" onPress={closeView} />;
20
+ * }
21
+ * ```
22
+ */
23
+ export async function closeView() {
24
+ return BedrockModule.closeView();
25
+ }
@@ -0,0 +1,27 @@
1
+ import { HapticFeedbackOptions, HapticFeedbackType } from './types';
2
+ import { BedrockModule } from '../BedrockModule';
3
+
4
+ /**
5
+ * @public
6
+ * @category 인터렉션
7
+ * @name generateHapticFeedback
8
+ * @description 디바이스에 햅틱 진동을 일으키는 함수예요. 예를 들어, 버튼 터치나 화면전환에 드라마틱한 효과를 주고 싶을 때 사용할 수 있어요. [HapticFeedbackOptions](/react-native/reference/native-modules/인터렉션/HapticFeedbackOptions.html)에서 진동타입을 확인해 보세요.
9
+ * @returns {void}
10
+ *
11
+ * @example
12
+ * ### 버튼을 눌러 햅틱 일으키기
13
+ *
14
+ * ```tsx
15
+ * import { Button } from 'react-native';
16
+ * import { generateHapticFeedback } from '@apps-in-toss/native-modules';
17
+ *
18
+ * function GenerateHapticFeedback() {
19
+ * return <Button title="햅틱" onPress={() => { generateHapticFeedback( { type: "tickWeak"}) }} />;
20
+ * }
21
+ * ```
22
+ */
23
+ export function generateHapticFeedback(options: HapticFeedbackOptions) {
24
+ return BedrockModule.generateHapticFeedback(options);
25
+ }
26
+
27
+ export type { HapticFeedbackType };
@@ -0,0 +1,38 @@
1
+ export type HapticFeedbackType =
2
+ | 'tickWeak'
3
+ | 'tap'
4
+ | 'tickMedium'
5
+ | 'softMedium'
6
+ | 'basicWeak'
7
+ | 'basicMedium'
8
+ | 'success'
9
+ | 'error'
10
+ | 'wiggle'
11
+ | 'confetti';
12
+
13
+ /**
14
+ * @public
15
+ * @category 인터렉션
16
+ * @name HapticFeedbackOptions
17
+ * @description
18
+ * generateHapticFeedback 함수에 전달할 햅틱진동의 타입을 나타내요. 진동타입의 종류는 다음과 같아요.
19
+ * ```typescript
20
+ * type HapticFeedbackType =
21
+ * | "tickWeak"
22
+ * | "tap"
23
+ * | "tickMedium"
24
+ * | "softMedium"
25
+ * | "basicWeak"
26
+ * | "basicMedium"
27
+ * | "success"
28
+ * | "error"
29
+ * | "wiggle"
30
+ * | "confetti";
31
+ * ```
32
+ * @typedef { type: HapticFeedbackType } HapticFeedbackOptions
33
+ * @typedef { "tickWeak" | "tap" | "tickMedium" | "softMedium" | "basicWeak" | "basicMedium" | "success" | "error" | "wiggle" | "confetti" } HapticFeedbackType
34
+ *
35
+ */
36
+ export interface HapticFeedbackOptions {
37
+ type: HapticFeedbackType;
38
+ }
@@ -0,0 +1,46 @@
1
+ import { Platform } from 'react-native';
2
+ import { BedrockModule } from './BedrockModule';
3
+
4
+ /**
5
+ * @public
6
+ * @category 언어
7
+ * @kind function
8
+ * @name getLocale
9
+ * @description
10
+ * 사용자의 로케일(locale) 정보를 반환해요. 네이티브 모듈에서 로케일 정보를 가져올 수 없을 때는 기본값으로 'ko-KR'을 반환합니다. 앱의 현지화 및 언어 설정과 관련된 기능을 구현할 때 사용하세요.
11
+ *
12
+ * @returns {string} 사용자의 로케일 정보를 반환해요.
13
+ *
14
+ * @example
15
+ * ### 현재 사용자의 로케일 정보 가져오기
16
+ *
17
+ * ```tsx
18
+ * import { getLocale } from '@apps-in-toss/native-modules';
19
+ * import { Text } from 'react-native';
20
+ *
21
+ * function MyPage() {
22
+ * const locale = getLocale();
23
+ *
24
+ * return (
25
+ * <Text>사용자의 로케일 정보: {locale}</Text>
26
+ * )
27
+ * }
28
+ *
29
+ * ```
30
+ */
31
+ export function getLocale() {
32
+ const locale = BedrockModule?.DeviceInfo?.locale ?? 'ko-KR';
33
+
34
+ if (Platform.OS === 'android') {
35
+ return replaceUnderbarToHypen(locale);
36
+ }
37
+
38
+ return locale;
39
+ }
40
+
41
+ /**
42
+ * android 에서 언더바(`_`) 로 구분되고 있어서, 이를 하이픈(`-`)으로 변경합니다.
43
+ */
44
+ function replaceUnderbarToHypen(locale: string) {
45
+ return locale.replace(/_/g, '-');
46
+ }
@@ -0,0 +1,59 @@
1
+ import type { NetworkStatus } from './types';
2
+ import { BedrockModule } from '../BedrockModule';
3
+
4
+ /**
5
+ * @public
6
+ * @category 네트워크
7
+ * @kind function
8
+ * @name getNetworkStatus
9
+ * @description
10
+ * 디바이스의 현재 네트워크 연결 상태를 가져오는 함수예요.
11
+ * 반환 값은 `NetworkStatus` 타입으로, 인터넷 연결 여부와 연결 유형(Wi-Fi, 모바일 데이터 등)을 나타내요. 값은 다음 중 하나예요.
12
+ *
13
+ * - `OFFLINE`: 인터넷에 연결되지 않은 상태예요.
14
+ * - `WIFI`: Wi-Fi에 연결된 상태예요.
15
+ * - `2G`: 2G 네트워크에 연결된 상태예요.
16
+ * - `3G`: 3G 네트워크에 연결된 상태예요.
17
+ * - `4G`: 4G 네트워크에 연결된 상태예요.
18
+ * - `5G`: 5G 네트워크에 연결된 상태예요.
19
+ * - `WWAN`: 인터넷은 연결되었지만, 연결 유형(Wi-Fi, 2G~5G)을 알 수 없는 상태예요. 이 상태는 iOS에서만 확인할 수 있어요.
20
+ * - `UNKNOWN`: 인터넷 연결 상태를 알 수 없는 상태예요. 이 상태는 안드로이드에서만 확인할 수 있어요.
21
+ *
22
+ * @returns {Promise<NetworkStatus>} 네트워크 상태를 반환해요.
23
+ *
24
+ * @example
25
+ * ### 현재 네트워크 상태 가져오기
26
+ *
27
+ * 네트워크 연결 상태를 가져와 화면에 표시하는 예제예요.
28
+ *
29
+ * ```tsx
30
+ * import { useState, useEffect } from 'react';
31
+ * import { Text, View } from 'react-native';
32
+ * import { getNetworkStatus, NetworkStatus } from '@apps-in-toss/native-modules';
33
+ *
34
+ * function GetNetworkStatus() {
35
+ * const [status, setStatus] = useState<NetworkStatus | ''>('');
36
+ *
37
+ * useEffect(() => {
38
+ * async function fetchStatus() {
39
+ * const networkStatus = await getNetworkStatus();
40
+ * setStatus(networkStatus);
41
+ * }
42
+ *
43
+ * fetchStatus();
44
+ * }, []);
45
+ *
46
+ * return (
47
+ * <View>
48
+ * <Text>현재 네트워크 상태: {status}</Text>
49
+ * </View>
50
+ * );
51
+ * }
52
+ * ```
53
+ */
54
+ export function getNetworkStatus(): Promise<NetworkStatus> {
55
+ return BedrockModule.getNetworkStatus();
56
+ }
57
+
58
+ /** export type */
59
+ export type { NetworkStatus };
@@ -0,0 +1 @@
1
+ export type NetworkStatus = 'OFFLINE' | 'WIFI' | '2G' | '3G' | '4G' | '5G' | 'WWAN' | 'UNKNOWN';
@@ -0,0 +1,37 @@
1
+ import { Platform } from 'react-native';
2
+
3
+ /**
4
+ * @public
5
+ * @kind function
6
+ * @category 환경 확인
7
+ *
8
+ * @name getPlatformOS
9
+ * @signature
10
+ * ```typescript
11
+ * function getPlatformOS(): 'ios' | 'android';
12
+ * ```
13
+ *
14
+ * @description
15
+ * 현재 실행 중인 플랫폼을 확인하는 함수예요.
16
+ * 이 함수는 `react-native`의 [`Platform.OS`](https://reactnative.dev/docs/0.72/platform#os) 값을 기반으로 동작하며, `ios` 또는 `android` 중 하나의 문자열을 반환해요.
17
+ *
18
+ * @returns {'ios' | 'android'} 현재 실행 중인 플랫폼
19
+ *
20
+ * @example
21
+ *
22
+ * ### 현재 실행중인 OS 플랫폼 확인하기
23
+ *
24
+ * ```tsx
25
+ * import { getPlatformOS } from '@apps-in-toss/native-modules';
26
+ * import { Text } 'react-native';
27
+ *
28
+ * function Page() {
29
+ * const platform = getPlatformOS();
30
+ *
31
+ * return <Text>현재 플랫폼: {platform}</Text>;
32
+ * }
33
+ * ```
34
+ */
35
+ export function getPlatformOS(): 'ios' | 'android' {
36
+ return Platform.OS as 'ios' | 'android';
37
+ }
@@ -0,0 +1,27 @@
1
+ import { BedrockModule } from './BedrockModule';
2
+
3
+ /**
4
+ * @public
5
+ * @name getSchemeUri
6
+ * @category 환경 확인
7
+ * @kind function
8
+ * @description 처음에 화면에 진입한 스킴 값이에요. 페이지 이동으로 인한 URI 변경은 반영되지 않아요.
9
+ * @returns {string} 처음에 화면에 진입한 스킴 값을 반환해요.
10
+ *
11
+ * @example
12
+ * ### 처음 진입한 스킴 값 가져오기
13
+ *
14
+ * ```tsx
15
+ * import { getSchemeUri } from '@apps-in-toss/native-modules';
16
+ * import { Text } from 'react-native';
17
+ *
18
+ * function MyPage() {
19
+ * const schemeUri = getSchemeUri();
20
+ *
21
+ * return <Text>처음에 화면에 진입한 스킴 값: {schemeUri}</Text>
22
+ * }
23
+ * ```
24
+ */
25
+ export function getSchemeUri() {
26
+ return BedrockModule.schemeUri;
27
+ }
@@ -0,0 +1,11 @@
1
+ export * from './closeView';
2
+ export * from './getLocale';
3
+ export * from './getSchemeUri';
4
+ export * from './generateHapticFeedback';
5
+ export * from './share';
6
+ export * from './setSecureScreen';
7
+ export * from './setScreenAwakeMode';
8
+ export * from './getNetworkStatus';
9
+ export * from './setIosSwipeGestureEnabled';
10
+ export * from './openURL';
11
+ export * from './getPlatformOS';
@@ -0,0 +1,40 @@
1
+ import { Linking } from 'react-native';
2
+
3
+ /**
4
+ * @public
5
+ * @kind function
6
+ * @category 화면 이동
7
+ *
8
+ * @name openURL
9
+ * @signature
10
+ * ```typescript
11
+ * function openURL(url: string): Promise<any>;
12
+ * ```
13
+ *
14
+ * @description
15
+ * 지정된 URL을 기기의 기본 브라우저나 관련 앱에서 열어요.
16
+ * 이 함수는 `react-native`의 [`Linking.openURL`](https://reactnative.dev/docs/0.72/linking#openurl) 메서드를 사용하여 URL을 열어요.
17
+ *
18
+ * @param {string} url 열고자 하는 URL 주소
19
+ * @returns {Promise<any>} URL이 성공적으로 열렸을 때 해결되는 Promise
20
+ *
21
+ * @example
22
+ *
23
+ * ### 외부 URL 열기
24
+ *
25
+ * ```tsx
26
+ * import { openURL } from '@apps-in-toss/native-modules';
27
+ * import { Button } from 'react-native';
28
+ *
29
+ * function Page() {
30
+ * const handlePress = () => {
31
+ * openURL('https://google.com');
32
+ * };
33
+ *
34
+ * return <Button title="구글 웹사이트 열기" onPress={handlePress} />;
35
+ * }
36
+ * ```
37
+ */
38
+ export function openURL(url: string): Promise<any> {
39
+ return Linking.openURL(url);
40
+ }
@@ -0,0 +1,43 @@
1
+ import { BedrockModule } from './BedrockModule';
2
+
3
+ /**
4
+ * @public
5
+ * @category 화면 제어
6
+ * @name setIosSwipeGestureEnabled
7
+ * @description
8
+ * `setIosSwipeGestureEnabled` 함수는 iOS에서 화면을 스와이프하여 뒤로가기 기능을 활성화하거나 비활성화할 수 있어요.
9
+ *
10
+ * @param {object} options 스와이프하여 뒤로가기 기능을 활성화하거나 비활성화하는 옵션이에요.
11
+ * @param {boolean} options.isEnabled 화면을 스와이프하여 뒤로가기 기능을 활성화하거나 비활성화할 수 있어요. `true`를 설정하면 스와이프로 뒤로갈 수 있고, `false`를 설정하면 스와이프 뒤로가기 기능이 비활성화돼요.
12
+ *
13
+ * @returns {void}
14
+ *
15
+ * @example
16
+ *
17
+ * ### iOS에서 화면 스와이프로 뒤로가기 기능을 활성화하거나 비활성화하기
18
+ *
19
+ * **스와이프 끄기** 버튼을 눌러 화면 스와이프로 뒤로가기 기능을 비활성화하거나, **스와이프 켜기** 버튼을 눌러 화면 스와이프로 뒤로가기 기능을 활성화할 수 있어요.
20
+ *
21
+ *
22
+ * ```tsx
23
+ * import { setIosSwipeGestureEnabled } from '@apps-in-toss/native-modules';
24
+ * import { Button } from 'react-native';
25
+ *
26
+ * function Page() {
27
+ * return (
28
+ * <>
29
+ * <Button title="스와이프 끄기" onPress={() => setIosSwipeGestureEnabled({ isEnabled: false })} />
30
+ * <Button title="스와이프 켜기" onPress={() => setIosSwipeGestureEnabled({ isEnabled: true })} />
31
+ * </>
32
+ * );
33
+ * }
34
+ * ```
35
+ *
36
+ */
37
+ export async function setIosSwipeGestureEnabled(options: { isEnabled: boolean }) {
38
+ if (BedrockModule.setIosSwipeGestureEnabled == null) {
39
+ return;
40
+ }
41
+
42
+ return BedrockModule.setIosSwipeGestureEnabled(options);
43
+ }
@@ -0,0 +1,66 @@
1
+ import { BedrockModule } from './BedrockModule';
2
+
3
+ /**
4
+ * @public
5
+ * @category 화면 제어
6
+ * @kind function
7
+ * @name setScreenAwakeMode
8
+ * @description
9
+ * `setScreenAwakeMode` 함수는 화면이 항상 켜져 있도록 설정하거나 해제하는 기능을 제공해요.
10
+ * 이 기능은 웹툰, 동영상, 문서 읽기 등 화면을 지속해서 켜두어야 하는 상황에서 유용해요.
11
+ *
12
+ * `enabled` 옵션을 `true`로 설정하면 화면이 꺼지지 않게 유지하고, `false`로 설정하면 기본 화면 보호기 시간에 따라 화면이 꺼져요. 특히, 이 함수는 앱 전체에 영향을 미치므로 특정 화면에서만 사용하려면 화면을 벗어날 때 이전 상태로 복구하는 추가 작업이 필요해요.
13
+ *
14
+ * 예를 들어, 미디어 콘텐츠 감상 화면에서는 항상 켜짐 모드를 활성화하고, 화면을 떠날 때 설정을 복구해서 불필요한 배터리 소모를 방지할 수 있어요.
15
+ *
16
+ * 다만, 앱에서 벗어나는 상황에서는 항상 켜짐 모드가 비활성화될 수 있으니 주의해야 해요.
17
+ *
18
+ * @param {object} options 화면 항상 켜짐 모드의 설정 값이에요.
19
+ * @param {boolean} options.enabled 화면 항상 켜짐 모드를 켜거나 끄는 옵션이에요.
20
+ * `true`로 설정하면 화면이 항상 켜지고, `false`로 설정하면 화면 보호기 시간에 따라 꺼져요.
21
+ *
22
+ * @returns {object} 현재 화면 항상 켜짐 모드의 설정 상태를 반환해요.
23
+ * @returns {boolean} enabled 화면 항상 켜짐 모드가 켜져 있는지 여부를 나타내는 값이에요.
24
+ *
25
+ * @example
26
+ * ### 화면 항상 켜짐 모드 설정하기
27
+ *
28
+ * ```tsx
29
+ * import { Button } from 'react-native';
30
+ * import { setScreenAwakeMode } from '@apps-in-toss/native-modules';
31
+ *
32
+ * function SetScreenAwakeMode() {
33
+ * return (
34
+ * <Button
35
+ * title="화면 항상 켜기"
36
+ * onPress={() => {
37
+ * setScreenAwakeMode({ enabled: true });
38
+ * }}
39
+ * />
40
+ * );
41
+ * }
42
+ * ```
43
+ *
44
+ * ### 화면 항상 켜짐 모드 복구하기
45
+ * 특정 화면을 벗어날 때 이전 상태로 복구하려면 다음과 같이 `useEffect`를 사용하세요.
46
+ *
47
+ * ```tsx
48
+ * import { useEffect } from 'react';
49
+ * import { setScreenAwakeMode, cleanUp } from '@apps-in-toss/native-modules';
50
+ *
51
+ * function MediaScreen() {
52
+ * useEffect(() => {
53
+ * setScreenAwakeMode({ enabled: true });
54
+ *
55
+ * return () => {
56
+ * setScreenAwakeMode({ enabled: false }); // 설정을 이전 상태로 복구해요.
57
+ * };
58
+ * }, []);
59
+ *
60
+ * return <Text>미디어 콘텐츠를 감상하는 화면</Text>;
61
+ * }
62
+ * ```
63
+ */
64
+ export async function setScreenAwakeMode(options: { enabled: boolean }) {
65
+ return BedrockModule.setScreenAwakeMode(options);
66
+ }