/** * 기기의 네이티브 공유 시트를 열고 요청을 처리했는지 반환합니다. * * 긴 `text`를 넣으면 카카오 등이 URL을 미리보기가 아니라 본문 텍스트로만 보냅니다. * 제목·설명은 OG 페이지(`og:title`, `og:description`)에 두고, 여기에는 url(과 짧은 title)만 넘깁니다. * * 사용자가 공유 시트를 닫은 경우도 정상적으로 처리된 것으로 간주합니다. */ export async function tryNativeShare(data: ShareData): Promise { if (typeof navigator.share !== 'function') { return false; } try { await navigator.share(data); return true; } catch (error) { if (error instanceof Error && error.name === 'AbortError') { return true; } return false; } } /** API 서버가 제공하는 영상별 Open Graph 공유 페이지 URL을 만듭니다. */ export function buildVideoShareUrl(apiBaseUrl: string, videoId: number | string): string { return `${apiBaseUrl.replace(/\/$/, '')}/video/share/${encodeURIComponent(String(videoId))}`; }