공유 & 저장
콘텐츠를 네이티브 공유 시트로 내보내거나, 갤러리·다운로드 폴더에 저장합니다.
개요
웹에서 만든 이미지·파일·텍스트·URL을 네이티브 공유 시트로 다른 앱에 보내거나, 갤러리(사진)·다운로드 폴더에 저장합니다. openFileSelector가 콘텐츠를 가져오는(input) 브릿지라면, 이 브릿지는 콘텐츠를 내보내는(output) 짝입니다.
| 메서드 | 지원 타입 | Android | iOS |
|---|---|---|---|
share | image · file · text · url | ✓ | ✓ |
saveToDevice | image · file | ✓ | ✓ |
지원 플랜: Basic 이상
unveilyBridge는 WebView에 자동 주입됩니다. 별도 초기화 없이 즉시 사용할 수 있습니다.
사전 준비
Android
- share: 추가 권한이 필요 없습니다.
- saveToDevice: Android 10(API 29) 이상은 권한이 필요 없습니다. Android 9(API 28) 이하에서만
WRITE_EXTERNAL_STORAGE가 필요하며, SDK가 실행 시점에 자동으로 권한을 요청합니다.
iOS
- share: 추가 권한이 필요 없습니다.
- saveToDevice(image): 사진 앨범에 저장하므로
Info.plist에 다음 설명이 필요합니다.
<key>NSPhotoLibraryAddUsageDescription</key>
<string>생성한 콘텐츠를 사진 앨범에 저장합니다.</string>- saveToDevice(file): 파일 앱(Files)에 저장하며 별도 권한이 필요 없습니다.
공유하기 — share
콘텐츠를 네이티브 공유 시트로 넘깁니다. 옵션은 객체로 전달합니다.
// 텍스트 / URL 공유
window.unveilyBridge.share({
type: "url",
data: "https://example.com/article/42",
callback: "onShareResult"
});
// 이미지 공유 (base64 또는 로컬 경로/URI)
window.unveilyBridge.share({
type: "image",
data: base64OrPath, // "data:image/png;base64,..." 또는 "/path", "content://..."
mimeType: "image/png",
filename: "receipt.png",
callback: "onShareResult"
});| 옵션 | 타입 | 설명 |
|---|---|---|
type | string | 'image' · 'file' · 'text' · 'url' |
data | string | text·url → 문자열. image·file → base64(원문 또는 data URI) 또는 로컬 경로/URI (/…, file://…, content://…) |
mimeType | string | (선택) 예: image/png, application/pdf |
filename | string | (선택) 공유 파일 이름 |
callback | string | 결과를 받을 전역 함수 이름. 생략 시 'onShareResult' |
용량이 큰 이미지·파일은 base64 대신 로컬 경로/URI로 전달하세요. base64는 크기가 약 33% 커져 큰 미디어에서 메모리 문제가 생길 수 있습니다.
디바이스에 저장 — saveToDevice
이미지는 갤러리(사진), 파일은 다운로드 폴더의 Unveily 하위 폴더에 저장합니다.
// 이미지를 갤러리에 저장
window.unveilyBridge.saveToDevice({
type: "image",
data: base64OrPath,
mimeType: "image/png",
filename: "chart.png",
callback: "onSaveResult"
});
// 파일을 다운로드에 저장
window.unveilyBridge.saveToDevice({
type: "file",
data: base64OrPath,
mimeType: "application/pdf",
filename: "invoice.pdf",
callback: "onSaveResult"
});| 옵션 | 타입 | 설명 |
|---|---|---|
type | string | 'image' · 'file' |
data | string | base64(원문 또는 data URI) 또는 로컬 경로/URI |
mimeType | string | (선택) 기본값: 이미지 image/png, 파일 application/octet-stream |
filename | string | (선택) 저장 파일 이름 |
callback | string | 결과를 받을 전역 함수 이름. 생략 시 'onSaveResult' |
콜백 결과
callback으로 지정한 전역 함수가 결과 객체를 인자로 호출됩니다.
function onShareResult(result) {
if (result.success) {
// 완료
} else if (result.canceled) {
// 사용자가 취소함 (iOS)
} else {
console.log("실패:", result.error);
}
}| 결과 | 의미 |
|---|---|
{ success: true } | 성공 |
{ success: false, canceled: true } | 사용자가 취소함 |
{ success: false, error: "<코드>" } | 실패 (예: invalid_data, unsupported_type) |
플랫폼 차이 — Android 공유 시트는 사용자가 어떤 앱을 선택했는지·취소했는지를 안정적으로 알려주지 못하므로, share의 success는 "공유 시트가 열렸음"을 의미합니다. iOS는 완료/취소를 구분해 canceled를 보고합니다. saveToDevice는 양 플랫폼 모두 실제 저장 성공/실패를 정확히 보고합니다.