[React Native] 이미지 및 사진 권한 설정하기


🔥 1.Dependency 설치


$ npm install --save react-native-permissions
# --- or ---
$ yarn add react-native-permissions

🔥 2. IOS 환경 설정

IOS 설정은 공식 라이브러리 세팅 방법을 참고하면 금방할 수 있으니 생략

🔥 3. Android 환경 설정

사진과 동영상을 촬영하기 위해서는 android.permission.CAMERA, android.permission.READ_EXTERNAL_STORAGE, android.permission.WRITE_EXTERNAL_STORAGE 권한을 필요로 한다.

🔥 4. 권한 적용하기

TargetSDK 33부터는 READ_MEDIA_IMAGES  READ_MEDIA_VIDEO  READ_MEDIA_AUDIO에 대한 권한들을 Manifest에 선언해 주고  해당 이름의 권한으로 권한 체크 및 권한 요청을 진행해야함 SDK 33 미만은 READ_EXTERNAL_STORAGE , WRITE_EXTERNAL_STORAGE 권한으로 접근 할 수 있다

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- SDK >= 33 permissions for media   -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>

🔥 5. 권한 요청하기

TargetSDK 33부터는 ”READ_MEDIA_IMAGES”  “READ_MEDIA_VIDEO”  “READ_MEDIA_AUDIO”에 대한 권한들을 Manifest에 선언해 주고  해당 이름의 권한으로 권한 체크 및 권한 요청을 진행해야함

// 카메라 권한 요청 예시
const requestCameraPermission = async (): Promise<boolean> => {
  try {
    const results = await requestMultiple([
      Platform.OS === "ios"
        ? PERMISSIONS.IOS.CAMERA
        : PERMISSIONS.ANDROID.CAMERA,
    ]);

    return (
      results[
        Platform.OS === "ios"
          ? PERMISSIONS.IOS.CAMERA
          : PERMISSIONS.ANDROID.CAMERA
      ] === RESULTS.GRANTED
    );
  } catch (error) {
    console.error(error);
    return false; // 예외 발생 시 false 반환
  }
};
// 비디오 권한 요청
const requestVideoPermission = async (): Promise<boolean> => {
  try {
    let permissions: Permission[];
    // 이건 안드로이드 권한 요청
    if (Platform.OS === "android") {
      //SDK가 33버전 이상인 경우는 아래와 같은 권한을 멀티로 요청
      permissions =
        Platform.Version >= 33
          ? [
              PERMISSIONS.ANDROID.READ_MEDIA_IMAGES,
              PERMISSIONS.ANDROID.READ_MEDIA_VIDEO,
            ]
          : [PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE];
      // 이건 IOS 권한 요청
    } else if (Platform.OS === "ios") {
      permissions = [PERMISSIONS.IOS.PHOTO_LIBRARY];
    } else {
      return false;
    }

    const results: Record<Permission, PermissionStatus> = await requestMultiple(
      permissions
    );

    return permissions.every(
      (permission) => results[permission] === RESULTS.GRANTED
    );
  } catch (error) {
    console.error(error);
    return false;
  }
};