Как запросить несколько разрешений одновременно в реагировать родной - PullRequest
0 голосов
/ 22 февраля 2019

Я бы хотел запросить разрешения на одной странице, а не ждать каждой конкретной ситуации.Однако я не хочу нескольких всплывающих окон.Есть ли способ попросить разрешения с одним всплывающим / модальным.

На стороне Android я нашел это сообщение и это , которые выглядят многообещающе, но япока что-то найти для iOS.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

В Android

Сначала добавьте разрешения в файл AndroidManifest.xml, а затем

if (Platform.OS === 'android') {
    PermissionsAndroid.requestMultiple(
      [PermissionsAndroid.PERMISSIONS.CAMERA, 
      PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
      PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
      PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE]
      ).then((result) => {
        if (result['android.permission.ACCESS_COARSE_LOCATION']
        && result['android.permission.CAMERA']
        && result['android.permission.READ_CONTACTS']
        && result['android.permission.ACCESS_FINE_LOCATION']
        && result['android.permission.READ_EXTERNAL_STORAGE']
        && result['android.permission.WRITE_EXTERNAL_STORAGE'] === 'granted') {
          this.setState({
            permissionsGranted: true
          });
        } else if (result['android.permission.ACCESS_COARSE_LOCATION']
        || result['android.permission.CAMERA']
        || result['android.permission.READ_CONTACTS']
        || result['android.permission.ACCESS_FINE_LOCATION']
        || result['android.permission.READ_EXTERNAL_STORAGE']
        || result['android.permission.WRITE_EXTERNAL_STORAGE'] === 'never_ask_again') {
          this.refs.toast.show('Please Go into Settings -> Applications -> APP_NAME -> Permissions and Allow permissions to continue');
        }
      });
  }

В iOS В разделе информациивашего проекта на XCode

  • Добавьте разрешения и описание, скажем, например: Конфиденциальность - Описание использования контактов, тогда,

    Permissions.request('photo').then(response => {
      if (response === 'authorized') {
        iPhotoPermission = true;
      }
     Permissions.request('contact').then(response => {
      if (response === 'authorized') {
        iPhotoPermission = true;
      }
    });
    });
    
0 голосов
/ 22 февраля 2019

Для запроса нескольких разрешений я предлагаю вам использовать модуль npm , поскольку он экономит время и прост в настройке, а главное, вам не нужно беспокоиться о платформах :)

Установка

npm install --save react-native-permissions

Использование

import Permissions from 'react-native-permissions'

// Check the status of multiple permissions
  _checkCameraAndPhotos = () => {
    Permissions.checkMultiple(['camera', 'photo']).then(response => {
      //response is an object mapping type to permission
      this.setState({
        cameraPermission: response.camera,
        photoPermission: response.photo,
      })
    })
  }

Не забудьте добавить разрешения для AndroidManifest.xml для Android и Info.plist для iOS (Xcode> = 8).

0 голосов
/ 22 февраля 2019

Убедитесь, что вы также добавили соответствующие разрешения в файл манифеста.

export async function GetAllPermissions() {
  try {
    if (Platform.OS === "android") {
      const userResponse = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
        PermissionsAndroid.PERMISSIONS.CALL_PHONE
      ]);
      return userResponse;
    }
  } catch (err) {
    Warning(err);
  }
  return null;
}
...