File.saveBase64 호출 시 안드로이드에서 시스템 공유/저장 시트가 뜨는 것이 정상 동작인가요?

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

안녕하세요. 미니앱 ‘냥톡’(appName: nyangtalk)을 WebView SDK로 개발 중입니다.

앱에서 canvas로 만든 PNG 이미지를 File.saveBase64로 기기에 저장하는 기능이 있습니다. 저장 자체는 정상적으로 됩니다. 다만 저장 과정에서 시스템 공유/저장 시트가 한 번 뜨고, 사용자가 거기서 한 번 더 선택해야 합니다.

■ 환경

  • @apps-in-toss/web-framework 3.0.2 (WebView 방식)
  • 안드로이드 (삼성), 토스 앱 버전: (여기에 적어주세요)
  • 실기기 테스트 번들에서 재현

■ 호출하는 코드
버튼 핸들러가 File.saveBase64 하나만 호출합니다. Share.sendMessage나 navigator.share는 이 경로에서 호출하지 않습니다.

const sdk = await import(‘@apps-in-toss/web-framework’)
const save = sdk.File?.saveBase64
if (typeof save.isSupported === ‘function’ && !save.isSupported()) {
// 미지원 안내
return
}
await save({
data: base64String, // canvas → PNG → base64 (약 110KB)
fileName: nyangtalk-${Date.now()}.png,
mimeType: ‘image/png’,
})
// 여기 이후로 공유 관련 API 호출 없음

■ 확인해 본 것

■ 질문

  1. 안드로이드에서 File.saveBase64 호출 시 시스템 시트가 노출되는 것이 의도된 동작인가요?
  2. 사용자가 시트에서 한 번 더 선택해야 저장이 완료되는 흐름이라면, 앱에서 미리 안내하려고 합니다. 권장하시는 안내 문구나 UX 패턴이 있을까요?
  3. iOS에서도 동일한 흐름인가요? (아직 iOS 실기기 확인을 못 했습니다)
  4. 시트 없이 바로 앨범에 저장되게 하는 옵션이나 다른 API가 있다면 알려주시면 반영하겠습니다.

감사합니다.

appName (선택)

nyangtalk

안녕하세요 :slight_smile:
현재 안드로이드 OS 상 앱에서 유저의 데이터 보호라는 명목 하에, 직접 핸드폰에 파일 시스템을 접근해서 저장하는 구현이 매우 까다롭습니다. 참고 : Android Scope Storage
따라서 공유 다이얼로그를 통해, 유저가 직접 파일을 확인하고 원하는 곳에 저장하도록 유도하는 목적인 점 참고 부탁드립니다.
iOS 도 동일한 흐름이며, 바로 저장되게 하는 옵션은 따로 제공해드리고 있지 않습니다 :man_bowing: