typescript - Expo Location-feil: Ikke autorisert til å bruke bakgrunnslokasjonstjenester


Jeg lager en app som trenger brukerens nåværende posisjon og må kjøre i sanntid. Jeg bruker Location.startLocationUpdatesAsync() fra Expo, men jeg får feilen nedenfor. App.json er allerede konfigurert, og på telefonen har jeg akseptert tilgang til posisjonen. Kan noen fortelle meg hvorfor jeg får feilen?

app.json

    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.ourtor.ourtorapp",
      "buildNumber": "0.0.8",
     "infoPlist": { "UIBackgroundModes": [ "location", "fetch" ] }
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#FFFFFF"
      },
      "permissions": [
        "ACCESS_COARSE_LOCATION",
        "ACCESS_FINE_LOCATION",
        "ACCESS_BACKGROUND_LOCATION"
      ]
    },

kart.ts

  useEffect( () => {

    Location.requestPermissionsAsync().then( async (res) => {
      if(res.status === "granted") {
        console.log('granted')
        await Location.startLocationUpdatesAsync('get-location', {
          accuracy: Location.Accuracy.Balanced
        })
      }
      
    });
    
  }, [])

konsoll android

granted
[Unhandled promise rejection: Error: Not authorized to use background location services.]

konsoll ios

granted
Background Location has not been configured. To enable it, add 'location' to 'UIBackgroundModes' in Info.plist file.

Svar #1

Trenger du egentlig bakgrunn-plassering? Det virker som om det å konfigurere Sted for bakgrunn-bruk er mye mer arbeid. Konfigurasjonsmatrisen for Sted er kompleks (Android, Apple, Emulatorer, Tillatelser, Forgrunn\Bakgrunn, og til og med en app-innsendingsforespørsel for Android). Jeg vil sørge for at du har nøye lest Expos dokumentasjon fordi alle disse detaljene er spredt utover siden: https://docs.expo.io/versions/latest/sdk/location/#background-location-methods

Når det er sagt, hadde jeg et lignende problem med å få plasseringen mens appen var i forgrunnen på Android. Jeg måtte sørge for at plassering var slått på for Expo Go i Android-appinnstillingene. Det var imidlertid ikke nok, kallet til Location.getPermissionAsync() var nødvendig (det var det ikke på min Apple-enhet). Deretter kunne jeg bruke Location.watchPositionAsync(...) uten problemer.

En annen ting jeg vil nevne, spørsmålet ditt dukket opp da det var et større problem med Lokasjon i Expo Go (på den tiden var det fortsatt Expo Client). Du kan se denne GitHub-issue for mer detalj: https://github.com/expo/expo/issues/11330. TLDR; hvis du bruker Expo Go > 2.18.5, bør du ikke lenger se dette problemet.

Svar #2

Det finnes en bedre måte å gjøre dette på ved å bruke Expo-tillatelser. For mer informasjon, ta en titt på https://docs.expo.io/versions/latest/sdk/permissions/