共有 & 保存
コンテンツをネイティブ共有シートに送るか、ギャラリー・ダウンロードフォルダに保存します。
概要
Web アプリで作成した画像・ファイル・テキスト・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 は両プラットフォームとも実際の保存の成否を正確に報告します。