@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.
- package/dist/bridges-meta.json +36 -13
- package/dist/index.cjs +343 -129
- package/dist/index.d.cts +1212 -418
- package/dist/index.d.ts +1212 -418
- package/dist/index.js +315 -108
- package/package.json +7 -8
- package/src/AppsInTossModule/constants.ts +6 -0
- package/src/AppsInTossModule/native-event-emitter/appsInTossEvent.ts +15 -0
- package/src/AppsInTossModule/native-event-emitter/contactsViral.ts +140 -0
- package/src/AppsInTossModule/native-event-emitter/event-plugins/EntryMessageExitedEvent.ts +10 -0
- package/src/AppsInTossModule/native-event-emitter/event-plugins/HomeIconButtonClickHandleEvent.ts +10 -0
- package/src/AppsInTossModule/native-event-emitter/event-plugins/UpdateLocationEvent.ts +60 -0
- package/src/AppsInTossModule/native-event-emitter/index.ts +6 -0
- package/src/AppsInTossModule/native-event-emitter/internal/AppBridgeCallbackEvent.ts +45 -0
- package/src/AppsInTossModule/native-event-emitter/internal/VisibilityChangedByTransparentServiceWebEvent.ts +50 -0
- package/src/AppsInTossModule/native-event-emitter/internal/appBridge.spec.ts +135 -0
- package/src/AppsInTossModule/native-event-emitter/internal/appBridge.ts +79 -0
- package/src/AppsInTossModule/native-event-emitter/internal/onVisibilityChangedByTransparentServiceWeb.ts +20 -0
- package/src/AppsInTossModule/native-event-emitter/nativeEventEmitter.ts +35 -0
- package/src/AppsInTossModule/native-event-emitter/startUpdateLocation.ts +98 -0
- package/src/AppsInTossModule/native-event-emitter/types.ts +4 -0
- package/src/AppsInTossModule/native-modules/AppsInTossModule.ts +89 -0
- package/src/AppsInTossModule/native-modules/ads/googleAdMob.ts +681 -0
- package/src/AppsInTossModule/native-modules/ads/googleAdMobV2.ts +363 -0
- package/src/AppsInTossModule/native-modules/ads/types.ts +123 -0
- package/src/AppsInTossModule/native-modules/appLogin.ts +29 -0
- package/src/AppsInTossModule/native-modules/checkoutPayment.ts +80 -0
- package/src/AppsInTossModule/native-modules/eventLog.spec.ts +300 -0
- package/src/AppsInTossModule/native-modules/eventLog.ts +77 -0
- package/src/AppsInTossModule/native-modules/fetchAlbumPhotos.ts +88 -0
- package/src/AppsInTossModule/native-modules/fetchContacts.ts +121 -0
- package/src/AppsInTossModule/native-modules/getClipboardText.ts +47 -0
- package/src/AppsInTossModule/native-modules/getCurrentLocation.ts +65 -0
- package/src/AppsInTossModule/native-modules/getDeviceId.ts +33 -0
- package/src/AppsInTossModule/native-modules/getGameCenterGameProfile.ts +68 -0
- package/src/AppsInTossModule/native-modules/getOperationalEnvironment.ts +37 -0
- package/src/AppsInTossModule/native-modules/getPermission.ts +58 -0
- package/src/AppsInTossModule/native-modules/getTossAppVersion.ts +33 -0
- package/src/AppsInTossModule/native-modules/getTossShareLink.ts +39 -0
- package/src/AppsInTossModule/native-modules/iap.ts +213 -0
- package/src/AppsInTossModule/native-modules/index.ts +104 -0
- package/src/AppsInTossModule/native-modules/isMinVersionSupported.spec.ts +190 -0
- package/src/AppsInTossModule/native-modules/isMinVersionSupported.ts +68 -0
- package/src/AppsInTossModule/native-modules/openCamera.ts +81 -0
- package/src/AppsInTossModule/native-modules/openGameCenterLeaderboard.ts +44 -0
- package/src/AppsInTossModule/native-modules/openPermissionDialog.ts +54 -0
- package/src/AppsInTossModule/native-modules/requestPermission.ts +63 -0
- package/src/AppsInTossModule/native-modules/saveBase64Data.ts +57 -0
- package/src/AppsInTossModule/native-modules/setClipboardText.ts +39 -0
- package/src/AppsInTossModule/native-modules/setDeviceOrientation.ts +74 -0
- package/src/AppsInTossModule/native-modules/storage.ts +100 -0
- package/src/AppsInTossModule/native-modules/submitGameCenterLeaderBoardScore.ts +74 -0
- package/src/AppsInTossModule/native-modules/tossCore.ts +29 -0
- package/src/BedrockModule/native-modules/core/BedrockCoreModule.ts +8 -0
- package/src/BedrockModule/native-modules/index.ts +4 -0
- package/src/BedrockModule/native-modules/natives/BedrockModule.ts +20 -0
- package/src/BedrockModule/native-modules/natives/closeView.ts +25 -0
- package/src/BedrockModule/native-modules/natives/generateHapticFeedback/index.ts +27 -0
- package/src/BedrockModule/native-modules/natives/generateHapticFeedback/types.ts +38 -0
- package/src/BedrockModule/native-modules/natives/getLocale.ts +46 -0
- package/src/BedrockModule/native-modules/natives/getNetworkStatus/index.ts +59 -0
- package/src/BedrockModule/native-modules/natives/getNetworkStatus/types.ts +1 -0
- package/src/BedrockModule/native-modules/natives/getPlatformOS.ts +37 -0
- package/src/BedrockModule/native-modules/natives/getSchemeUri.ts +27 -0
- package/src/BedrockModule/native-modules/natives/index.ts +11 -0
- package/src/BedrockModule/native-modules/natives/openURL.ts +40 -0
- package/src/BedrockModule/native-modules/natives/setIosSwipeGestureEnabled.ts +43 -0
- package/src/BedrockModule/native-modules/natives/setScreenAwakeMode.ts +66 -0
- package/src/BedrockModule/native-modules/natives/setSecureScreen.ts +31 -0
- package/src/BedrockModule/native-modules/natives/share.ts +36 -0
- package/src/async-bridges.ts +3 -0
- package/src/event-bridges.ts +2 -0
- package/src/index.ts +16 -0
- package/src/types.ts +108 -0
- package/src/utils/compareVersion.spec.ts +176 -0
- package/src/utils/compareVersion.ts +104 -0
- 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,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
|
+
}
|