C.W.K.
Stream
Lesson 04 of 05 · published

모바일 플러그인 & 권한 프롬프트

~13 min · tauri, mobile, plugins, permissions

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"모바일엔 권한 시스템이 둘 쌓여 있어: Tauri의 capability ACL이랑, OS의 런타임 프롬프트. 둘 다한테 답해야 해."

폰엔 있고 데스크톱엔 없는 권한

모바일은 데스크톱 등가물 없는 플러그인을 열어: barcode-scanner, biometric(Face ID / 지문), nfc, haptics, geolocation 등. 똑같이 세 표면 방식(Cargo, 빌더, capability)으로 더하는데 많은 게 밑에 네이티브 iOS/Android 코드를 품어. Tauri 모바일 앱을 진짜 네이티브처럼 느끼게 하려면 이걸 꺼내 — 브라우저 속 웹 페이지는 지문 센서를 못 두드리지만, 네 Tauri 앱은 할 수 있어.

두 권한 층

데스크톱엔 게이트가 하나였어(Tauri capability). 모바일은 두 번째를 쌓아: OS 런타임 권한 프롬프트. capability에 geolocation:default를 부여하면 앱이 위치를 요청할 수 있게 돼 — 근데 iOS/Android는 여전히 런타임에 사용자한테 시스템 다이얼로그를 보여주고, 사용자가 거부할 수 있어. 네 코드는 '권한 요청했는데 거절됨'을 처리해야지, capability 부여가 접근을 뜻한다고 가정하면 안 돼. 거부 경로를 위해 설계해. 모바일에선 흔해.

까먹으면 안 되는 매니페스트 문자열

iOS는 모든 민감한 capability(카메라, 위치 등)에 Info.plist의 사람이 읽는 usage description을 요구해. 빠뜨리면 App Review에서 거부당하거나 리소스 접근 시 크래시해. Android는 권한을 AndroidManifest.xml에 선언해. 이건 생성된 플랫폼 프로젝트에 살고, 제대로 하는 게 좋은 게 아니라 단단한 필수야 — 빠진 iOS usage 문자열이 제일 흔한 첫 제출 거부 중 하나야.

Code

capability + OS 프롬프트, 진짜 거부 경로와 함께·tsx
import { checkPermissions, requestPermissions, getCurrentPosition }
  from "@tauri-apps/plugin-geolocation";

// 게이트 둘: capability가 물을 능력을 주고; OS가 사용자한테 물어.
let perm = await checkPermissions();
if (perm.location !== "granted") {
  perm = await requestPermissions(["location"]); // 여기서 OS 다이얼로그 뜸
}
if (perm.location === "granted") {
  const pos = await getCurrentPosition();
  console.log(pos.coords.latitude, pos.coords.longitude);
} else {
  // 사용자가 거부함. 처리해 — 이 경로는 모바일에서 흔해.
}

External links

Exercise

모바일 전용 플러그인(geolocation, biometric, barcode-scanner)을 골라 전체 권한 흐름을 써: check, request(OS 다이얼로그를 띄움), 그리고 granted랑 denied 둘 다 처리. 그다음 iOS usage 문자열이 어디 갈지 적어. 데스크톱이 절대 생각하게 안 만든 두 층 권한 현실을 연습하는 거야.
Hint
흐름: checkPermissions → requestPermissions(OS 다이얼로그) → 결과로 분기. iOS usage 문자열은 생성된 Apple 프로젝트의 Info.plist(예: NSLocationWhenInUseUsageDescription)에 가. 거부 분기를 항상 써 — 사용자는 거부해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.