I am building an iOS app using React-Native and Expo. I have figured out how to access the user's Photo Library but am unable to request permissions from their device. It instead just accesses the camera roll without asking, which is obviously not allowed in iOS. Below is some of my code:

    import React, {useState, useEffect, useRef} from 'react';
    import * as ImagePicker from 'expo-image-picker';
    import Permissions, {usePermissions} from 'expo-permissions';
    import Constants from 'expo-constants'

//The useEffect function is what is ran when checking to see if the async function has been accepted or not

const Screen = ({navigation}) => {

const [ imagePicker1, setImagePicker1 ] = useState(null);

useEffect(() => {
    const permission_get1 = async ()=> {
        if (Platform.OS !== 'web'){
            let { status } = await ImagePicker.Permissions.askAsync(Permissions.MEDIA_LIBRARY);
            if (status !== 'granted'){
                console.log('No permission given')
                alert('Camera roll required for to upload photo from your library');
                return;
            }
            /*if (status === 'granted'){
                console.log('Permission granted')*/

            let imagePicker1 = await ImagePicker.getMediaLibraryAsync()
                setImagePicker1(imagePicker1)
                console.log('It worked')
            }

    };
            permission_get1();
}, []);
1

There are 1 best solutions below

0
On BEST ANSWER

I ended up getting it to work using this: I believe the previous example was using a depreciated method.

 import * as ImagePicker from 'expo-image-picker'

const pickImage = async ()=>{
  const { granted } = await Permissions.askAsync(Permissions.CAMERA_ROLL)
  if(granted){
    console.log('access granted')
    let data = await ImagePicker.launchImageLibraryAsync({
      mediaTypes:ImagePicker.MediaTypeOptions.Images,
      allowsEditing: true,
      aspect:[1,1],
      quality:0.5,
    })
    console.log(data)

    if (!data.cancelled){
    setImage(data.uri);
  }
  
  }else{
    Alert.alert('Permissions required to access camera roll.')
  }

}