하루살이 개발일지

[React-Native] 사진에 비공개 접근 (private access to photos) 해결 방법 / react-native-permissions 본문

프로젝트/Rizzup

[React-Native] 사진에 비공개 접근 (private access to photos) 해결 방법 / react-native-permissions

harusari 2024. 3. 22. 01:30

 

react-native-image-picker를 통해 유저가 앨범에서 사진을 골라 업로드하는 기능을 개발하던 도중, 앨범에서 사진을 선택하려고 하면 '비공개 접근' 밖에 불가능했다.

 

 

앱 설정에 들어가서 바꾸려고 해도 권한 변경이 다음과 같이 불가능했다.

(원래는 안함, 제한된 접근, 전체 접근 항목이 나와야 함)

 

 

react-native-image-picker 자체적으로 사진 앨범 접근 권한을 받아올 수는 없는건가 싶어서 react-native-permissions로 권한을 부여해 보았다.

 

  useEffect(() => {
    const checkPermission = async () => {
      const res = await checkMultiple([PERMISSIONS.IOS.PHOTO_LIBRARY]);

      if (res['ios.permission.PHOTO_LIBRARY'] === 'denied') {
        const request = await requestMultiple([PERMISSIONS.IOS.PHOTO_LIBRARY]);
      }
    };

    checkPermission();
  }, []);

 

 

그랬더니 기대하던 방식대로 앨범 접근에 대한 권한을 부여받을 수 있게 되었다!

 

고양이 귀엽죠?

 

 

 

사진첩에 대한 permission의 상태를 찍어봐도 'granted'라고 잘 나온다.

 

 

 

참고로 permission 상태는 granted, denied, blocked, unavailable 네 가지가 있다.

 

1. Granted (부여됨): 사용자가 요청된 권한을 앱에 부여했음을 의미

2. Denied (거부됨): 사용자가 요청된 권한을 앱에 거부했음을 의미. 이 상태에서 앱은 해당 기능이나 데이터에 접근할 수 없으며, 사용자가 설정을 변경하지 않는 한 이 상태는 유지됨.

3. Blocked (차단됨): 일반적으로 'blocked' 상태는 사용자가 권한 요청을 "다시 묻지 않음"으로 거부했을 때 발생. 이 상태는 앱이 해당 권한에 대한 접근을 요청할 수 없음을 의미하며, 사용자가 직접 시스템 설정에서 앱 권한을 변경해야 함

4. Unavailable (사용 불가): 이 상태는 요청된 권한이 사용자의 기기에서 지원되지 않거나 사용할 수 없음을 의미

 

 

처음에는 permission 상태를 콘솔 찍어보면 unavailable이 떴는데,

해결 방법은 다음과 같았다.

 

 

하여튼 결론은 비공개 접근이라는 것 자체가 iOS에서 새로 추가된 기능같은데, 유저에게 권한 여부를 물어보지 않고 안전하게 앨범에 접근하는 방법 정도인 것 같다.

 

하지만 나는 이를 원하지 않고 권한을 부여받고 싶었기 때문에.. react-native-permissions를 통해 권한을 부여받음.