9
votes

Pouvez-vous suivre la géolocalisation en arrière-plan avec React Native?

Problème

Je souhaite pouvoir suivre la position d'un utilisateur même lorsque l'application n'est plus au premier plan (par exemple, l'utilisateur a basculé vers une autre application ou est passé à l'écran d'accueil et a verrouillé son téléphone).

Le cas d'utilisation serait un utilisateur qui suit une course. Ils pourraient ouvrir l'application et appuyer sur `` démarrer '' au début de leur course, puis changer ou réduire l'application (appuyez sur le bouton d'accueil) et verrouiller l'écran. À la fin de la course, ils pourraient mettre l'application au premier plan et appuyer sur «stop» et l'application leur indiquerait la distance parcourue pendant la course.

Question

Le suivi de la géolocalisation en arrière-plan est-il possible sur iOS et Android à l'aide de Pure React Native?

La documentation native react sur la géolocalisation ( https://facebook.github.io/react -native / docs / geolocation ) ne sont pas très clairs ou détaillés. Le lien documenté ci-dessus échappe à la géolocalisation en arrière-plan sur iOS (sans être totalement clair) mais ne mentionne pas Android.

Serait-il préférable que j'utilise Expo?


0 commentaires

4 Réponses :


4
votes

Oui, c'est possible, mais sans utiliser Expo, il y a deux modules que j'ai vus:

Ceci est commercial, vous devez acheter une licence https: // github .com / transistorsoft / react-native-background-geolocation

Et ce https://github.com/mauron85/react-native-background -geolocalisation


5 commentaires

J'ai vu ces deux modules. Je suis préoccupé par la stabilité du second, je ne sais pas si je devrais l'être? En outre, Expo dit désormais prendre en charge la géolocalisation en arrière-plan à partir de janvier 2019.


Je pense qu'il est préférable de commencer, une autre option consiste à créer vous-même le code en Swift / Java / Kotlin, puis à le coller sur RN


@neydroid Merci pour le partage. transistorsoft est une bibliothèque payante, où comme mauron85 / react-native-background-geolocation est une open source, dans mon cas mauron85 est meilleur.


à partir d'aujourd'hui, lequel est le meilleur pour iOS?


O Google deixa bem explicito que mesmo com intervalos menores definidos, as atualizações da geolocalização em Background não passam de algumas vezes por hora.



3
votes

L'équipe Expo a publié une nouvelle fonctionnalité dans le SDK 32 qui vous permet de suivre l'emplacement en arrière-plan.

https://expo.canny.io/feature-requests / p / background-location-tracking


0 commentaires

1
votes

Webkit évalue actuellement une solution Javascript uniquement. Vous pouvez ajouter votre voix ici

Pour un exemple de preuve de concept entièrement documenté, veuillez consulter Brotkrumen .


0 commentaires

11
votes

MISE À JOUR 2019 EXPO 33.0.0:

Expo l'a d'abord déconseillée pour que son SDK 32.0.0 réponde aux directives de l'App Store, puis l'a rouvert dans le SDK 33.0.0 .

Depuis, ils ont rendu super facile la mise en œuvre de l'emplacement en arrière-plan. Utilisez cet extrait de code que j'ai utilisé pour faire fonctionner la géolocalisation en arrière-plan.

"UIBackgroundModes":[
          "location",
          "fetch"
        ]

Le code fonctionne comme un charme. Une chose à noter est que vous ne pouvez pas utiliser la géolocalisation dans l'application Expo . Cependant, vous pouvez l’utiliser dans votre version autonome . Par conséquent, si vous souhaitez utiliser la géolocalisation en arrière-plan, vous devez utiliser ce code, puis effectuer expo build: ios et télécharger sur l'appstore afin de pouvoir obtenir l'emplacement de fond des utilisateurs.

De plus, notez que vous devez inclure

import React from 'react';
import { Text, TouchableOpacity } from 'react-native';
import * as TaskManager from 'expo-task-manager';
import * as Location from 'expo-location';

const LOCATION_TASK_NAME = 'background-location-task';

export default class Component extends React.Component {
  onPress = async () => {
    await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {
      accuracy: Location.Accuracy.Balanced,
      timeInterval: 5000,
    });
  };

  render() {
    return (
      <TouchableOpacity onPress={this.onPress} style={{marginTop: 100}}>
        <Text>Enable background location</Text>
      </TouchableOpacity>
    );
  }
}

TaskManager.defineTask(LOCATION_TASK_NAME, ({ data, error }) => {
  if (error) {
    alert(error)
    // Error occurred - check `error.message` for more details.
    return;
  }
  if (data) {
    const { locations } = data; 
    alert(JSON.stringify(locations); //will show you the location object
    //lat is locations[0].coords.latitude & long is locations[0].coords.longitude
    // do something with the locations captured in the background, possibly post to your server with axios or fetch API 
  }
});

Dans la section info.plist de votre fichier app.json .


2 commentaires

Qu'entendez-vous par , vous pouvez l'utiliser dans votre version autonome . TaskManager n'est pas disponible pour les applications natives bare React, disent la documentation


expo ne suit pas l'emplacement en arrière-plan sur Android