import { isMinVersionSupported } from './isMinVersionSupported'; import { safePostMessage } from '../../natives'; const V2_MIN_VERSION = { android: '5.240.0', ios: '5.239.0', } as const; /** * @public * @category 공유 * @kind function * @name getTossShareLink * @description * `getTossShareLink` 함수는 사용자가 지정한 경로를 토스 앱에서 열 수 있는 공유 링크를 반환해요. * 이 링크를 다른 사람과 공유하면 토스 앱이 실행되면서 지정한 경로로 진입해요. 토스앱이 없는 사람은 iOS 일 때는 앱스토어로 이동하고, Android 일 때는 플레이스토어로 이동해요. * * 경로는 토스 앱 내부 특정 화면을 나타내는 딥링크(deep link) 형식이어야 해요. * 예를 들어 `intoss://<앱 이름>`이나 `intoss://<앱 이름>/about?name=test`처럼 작성해요. * * 이 함수를 사용하면 `deep_link_value`를 포함한 완성된 공유 링크를 만들 수 있어요. * * @param path - 딥링크로 열고 싶은 경로예요. `intoss://`로 시작하는 문자열이어야 해요. * @returns {Promise} `deep_link_value`가 포함된 토스 공유 링크를 반환해요. * * @example * ```tsx * import { share } from '@granite-js/react-native'; * import { getTossShareLink } from '@apps-in-toss/framework'; * * // '/' 경로를 딥링크로 포함한 토스 공유 링크를 생성해요. * const tossLink = await getTossShareLink('intoss://my-app'); * * // 생성한 링크를 메시지로 공유해요. * await share({ message: tossLink }); * ``` */ export async function getTossShareLink(path: string, ogImageUrl?: string): Promise { if (!isMinVersionSupported(V2_MIN_VERSION)) { return await getTossShareLinkV1(path); } const { shareLink } = await safePostMessage('getTossShareLink', { url: path, ogImageUrl, }); return shareLink; } async function getTossShareLinkV1(path: string): Promise { const { shareLink } = await safePostMessage('getTossShareLink', {}); const shareUrl = new URL(shareLink); shareUrl.searchParams.set('deep_link_value', path); shareUrl.searchParams.set('af_dp', path); return shareUrl.toString(); }