0
votes

Autorisation de localisation sur iOS dans React-Native ne fonctionne pas

Aucune autorisation de localisation Pop Up In iOS App ne peut voir que les options d'autorisations dans les paramètres de l'application

fonctionne bien sur Android. Comme je peux utiliser la permanenceAdroid pour obtenir les autorisations. P>

a déjà utilisé les options suivantes dans l'info.plist en regardant les autres réponses. Peu de réponses mentionnées uniquement sur Android. P>

info.plist

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Location Permission</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Location Permission</string>
    <key>NSLocationUsageDescription</key>
    <string>GPS data is required to...</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Location Permission</string>

codeinthefile.js

try {
    const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
        {
            title: "Geolocation Permission",
            message: "App needs access to your phone's location.",
        }
    );
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        Geolocation.getCurrentPosition(
            position => {
                Geocoder.from({
                    latitude: position.coords.latitude,
                    longitude: position.coords.longitude,
                })
                    .then(json => {
                        console.log(json);
                    })
                    .catch(error => {
                        console.log(error);
                    });
            },
            error => {
                console.log(error);
            },
            { enableHighAccuracy: true, timeout: 15000, maximumAge: 10000 }
        );
    } else {
        console.log('Location permission not granted!);
    }
} catch (err) {
    console.log('Location permission not granted!)
}


2 commentaires

Merci@andrew pour la réponse. J'ai déjà vérifié cette bibliothèque. Mais qu'est-ce que cette bibliothèque fait cela ne peut-il pas être fait par défaut dans React-Native? De plus, je dois utiliser un stockage asynchronisé avec la bibliothèque pour ne pas toujours poser de questions sur les autorisations. Semblait comme non une solution appropriée.


'React-Native-Autorisations' ne posera plus à nouveau si vous êtes d'accord avec la permission.


3 Réponses :


6
votes

N'utilisez pas PermissionAndroid dans iOS, suffit à placer la condition d'autorisation dans l'info.plist,

Essayez quelque chose comme, P>

if(Platform.OS === "ios"){
   // your code using Geolocation and asking for authorisation with

   geolocation.requestAuthorization()
}else{
   // ask for PermissionAndroid as written in your code
}


3 commentaires

Pour iOS, vous demandez des autorisations avec géolocalisation.requestauthoriorisation (); en utilisant la géolocalisation native réactive. Cela demandera le niveau d'autorisations définies dans l'info.plist. Du Docs: Facebook.github.io/react-native/docs/0.59/ Géolocalisation


Oui, exactement. Le problème qu'il a est celui qui utilise la permanenceAndroid dans iOS, qui renvoie NULL probablement. Il doit plutôt utiliser la géolocalisation directement, demandant une autorisation avec elle.


J'ai toujours le problème



5
votes

Merci, Doug et David, sur la base de votre suggestion que j'ai apporté modifier mon code de la manière suivante qui a fonctionné pour moi:

if(Platform.OS === 'ios'){
    Geolocation.requestAuthorization();
    this.getGeoLocation();
}else {

    let granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
        {
            title: "App Geolocation Permission",
            message: "App needs access to your phone's location.",
        }
    );

    if (androidGranted === PermissionsAndroid.RESULTS.GRANTED) {

        this.getGeoLocation();

    } else {

        console.log('Location permission not granted!!!!');

    }

}


4 commentaires

Est-ce que cela fonctionne sur l'émulateur iOS ou devrais-je utiliser un réel appareil pour le test?


Non, cela ne fonctionne pas sur l'émulateur, vous devrez utiliser l'appareil actuel.


Comment vérifiez-vous si la permission a été accordée sur iOS?


Vous devez définir toujours et quand dans la touche d'utilisation de l'info.Plist en Xcode et cela donnera une valeur de vérité lorsque vous vérifiez dans le code ci-dessus.



1
votes

Utilisez ci-dessous pour les autorisations Android et iOS.

import {Platform} from 'react-native';
import {request, PERMISSIONS, RESULTS} from 'react-native-permissions';
....

export async function getLocationPermissions() {
  const granted = await request(
    Platform.select({
      android: PERMISSIONS.ANDROID.ACCESS_COARSE_LOCATION,
      ios: PERMISSIONS.IOS.LOCATION_WHEN_IN_USE,
    }),
    {
      title: 'DemoApp',
      message: 'DemoApp would like access to your location ',
    },
  );

  return granted === RESULTS.GRANTED;
}

....
// usage
const granted = await getLocationPermissions();



0 commentaires