본문으로 건너뛰기

getPermission

특정 권한의 현재 상태(allowed / denied / notDetermined)를 반환합니다. 권한이 필요한 API를 호출하기 전에 상태를 점검해 불필요한 실패를 예방하는 데 사용합니다.

시그니처

import { getPermission } from '@apps-in-toss/web-framework';

declare function getPermission(permission: {
name: PermissionName;
access: PermissionAccess;
}): Promise<PermissionStatus>;

type PermissionName = 'camera' | 'photos' | 'contacts' | 'geolocation' | 'microphone' | 'clipboard';
type PermissionAccess = 'read' | 'write' | 'access';
type PermissionStatus = 'notDetermined' | 'denied' | 'allowed';

파라미터

이름타입필수설명
permission.namePermissionName확인할 권한의 이름. 'camera' / 'photos' / 'contacts' / 'geolocation' / 'microphone' / 'clipboard' 중 하나.
permission.accessPermissionAccess접근 유형. 'read' / 'write' / 'access' 중 하나.

반환값

  • Promise<PermissionStatus> — 현재 권한 상태:
    • 'allowed' — 사용자가 권한을 허용한 상태.
    • 'denied' — 사용자가 거절했거나 OS가 차단한 상태. 이 상태에서 해당 API를 호출하면 throw합니다.
    • 'notDetermined' — 아직 사용자가 결정하지 않은 상태. 최초 진입 시 기본값.

권한

getPermission 자체는 별도의 권한이 필요하지 않습니다 — 권한 상태를 조회하는 함수입니다. 권한이 필요한 다른 API의 처리 흐름은 Guides — 권한 처리 패턴을 참고하세요.

예제

최소 예제

import { getPermission } from '@apps-in-toss/web-framework';

const status = await getPermission({ name: 'camera', access: 'read' });
console.log('Camera permission:', status);
// 'allowed' | 'denied' | 'notDetermined'

실전 예제 — check → prompt → invoke 흐름

import { getPermission, openPermissionDialog, openCamera } from '@apps-in-toss/web-framework';

async function takePicture() {
// 1. 현재 상태를 먼저 확인한다.
const status = await getPermission({ name: 'camera', access: 'read' });

if (status === 'denied') {
// 2. denied 상태에서는 다이얼로그를 다시 띄워도 의미 없다.
// 사용자에게 OS 설정 화면 안내만 표시한다.
showAppToast('카메라 권한이 거절되었습니다. 설정에서 허용해 주세요.');
return;
}

if (status === 'notDetermined') {
// 3. 아직 결정하지 않은 상태라면 다이얼로그를 띄워 동의를 받는다.
const result = await openPermissionDialog({ name: 'camera', access: 'read' });
if (result === 'denied') {
showAppToast('카메라 권한을 허용해야 사진을 찍을 수 있어요.');
return;
}
}

// 4. allowed가 보장된 시점에 실제 API를 호출한다.
const photo = await openCamera({ type: 'photo' });
console.log('Photo captured:', photo);
}

// `showAppToast`는 SDK가 제공하지 않습니다 — 앱의 자체 토스트/스낵바 컴포넌트로 대체하세요.
declare function showAppToast(message: string): void;

실전 예제 — React에서 컴포넌트 마운트 시 상태 표시

import { getPermission, type PermissionStatus } from '@apps-in-toss/web-framework';
import { useEffect, useState } from 'react';

function CameraPermissionBadge() {
const [status, setStatus] = useState<PermissionStatus | null>(null);

useEffect(() => {
getPermission({ name: 'camera', access: 'read' })
.then(setStatus)
.catch(console.error);
}, []);

if (status === null) return <span>확인 중...</span>;
if (status === 'allowed') return <span>카메라 권한 허용됨</span>;
if (status === 'denied') return <span>카메라 권한 거절됨</span>;
return <span>카메라 권한 미결정</span>;
}

직접 실행해 보기

sdk-example의 Permissions 페이지에서 getPermission 카드를 실행해 결과를 확인할 수 있습니다.

sdk-example에서 실행해 보기

관련 API

  • openPermissionDialog — 권한 요청 시스템 다이얼로그를 표시합니다.
  • requestPermission — 상태 확인과 다이얼로그를 하나로 합친 편의 함수입니다.

관련 가이드

외부 참조