博览会位置权限适用于 android,但不适用于 iOS

时间:2021-06-16 09:45:41

标签: ios react-native permissions location expo

我有一个使用 expo 的 react-native 应用程序。 位置权限适用于 android,但不适用于 iOS。 在真正的 iPhone(iOS 版本 14.4.2)上,它什么也不做。在模拟器上,我收到此错误消息:

[未处理的承诺拒绝:错误:执行此操作需要 LOCATION_FOREGROUND 权限。] 在 node_modules/react-native/Libraries/BatchedBridge/NativeModules.js:103:50 in promiseMethodWrapper 在 node_modules/@unimodules/react-native-adapter/build/NativeModulesProxy.native.js:15:23 in moduleName.methodInfo.name 在 watchPositionAsync$ 中的 http://127.0.0.1:19000/node_modules/expo/AppEntry.bundle?platform=ios&dev=true&hot=false&minify=false:293333:90 在 watchPositionAsync 中的 http://127.0.0.1:19000/node_modules/expo/AppEntry.bundle?platform=ios&dev=true&hot=false&minify=false:293327:37

更新:我在另一台 Android 设备上尝试过,但没有成功,所以也许它可以在我的主要 Android 手机上运行,​​因为在运行以前的版本时已经授予权限?有一个关于 Expo 版本 40 和 41 https://github.com/expo/expo/issues/12581

之间权限中断的错误报告

这是我正在使用的:

app.json:

{
  "expo": {
    "name": "Andiamo",
    "slug": "andiamo_places",
    "version": "1.0.0",
    "orientation": "default",
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "bundleIdentifier": "com.andiamoplaces.andiamotravelapp",
      "supportsTablet": true,
      "infoPlist": {
        "NSLocationUsageDescription":
          "The app needs permission to access your location, if you want to be located on the map.",
        "NSLocationWhenInUseUsageDescription": "The app needs permission to access your location, if you want to be located on the map",
        "NSLocationAlwaysUsageDescription": "The app needs permission to access your location, if you want to be located on the map",
        "NSLocationAlwaysAndWhenInUseUsageDescription": "The app needs permission to access your location, if you want to be located on the map",
        "NSPhotoLibraryUsageDescription": "The app needs permission to your camera roll, if you want to upload pictures.",
        "NSCameraUsageDescription": "The app needs permission to your camera, if you want to take pictures from the app."
      }
    },
    "android": {
      "package": "com.andiamoplaces.andiamotravelapp",
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#FFFFFF"
      },
      "permissions": [
        "CAMERA",
        "LOCATION"
      ]
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "description": ""
  }
}

package.json:

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject",
    "postinstall": "jetifier -r"
  },
  "dependencies": {
    "@expo/vector-icons": "^12.0.0",
    "@react-native-community/clipboard": "^1.5.1",
    "@react-native-community/datetimepicker": "3.2.0",
    "@react-native-community/masked-view": "0.1.10",
    "@react-navigation/native": "^3.8.4",
    "@use-expo/font": "^2.0.0",
    "cross-fetch": "^3.1.4",
    "expo": "^41.0.0",
    "expo-camera": "~11.0.2",
    "expo-cli": "^4.4.4",
    "expo-clipboard": "~1.0.2",
    "expo-facebook": "~11.0.5",
    "expo-font": "~9.1.0",
    "expo-image-manipulator": "~9.1.0",
    "expo-image-picker": "~10.1.4",
    "expo-location": "~12.0.4",
    "expo-media-library": "~12.0.2",
    "expo-permissions": "~12.0.1",
    "expo-status-bar": "~1.0.4",
    "firebase": "8.2.3",
    "geolib": "^3.3.1",
    "global": "^4.4.0",
    "luxon": "^1.26.0",
    "native-base": "^2.15.2",
    "react": "16.13.1",
    "react-devtools": "^4.13.2",
    "react-dom": "16.13.1",
    "react-native": "https://github.com/expo/react-native/archive/sdk-41.0.0.tar.gz",
    "react-native-color-picker": "^0.6.0",
    "react-native-draggable-flatlist": "^2.6.1",
    "react-native-gesture-handler": "~1.10.2",
    "react-native-ionicons": "^4.6.5",
    "react-native-maps": "0.27.1",
    "react-native-material-menu": "^1.2.0",
    "react-native-modal": "^11.10.0",
    "react-native-pell-rich-editor": "^1.7.0",
    "react-native-popup-menu": "^0.15.10",
    "react-native-prompt-crossplatform": "^1.6.1",
    "react-native-ratings": "^8.0.4",
    "react-native-reanimated": "~2.1.0",
    "react-native-safe-area-context": "3.2.0",
    "react-native-safe-area-view": "^1.1.1",
    "react-native-screens": "~3.0.0",
    "react-native-simple-radio-button": "^2.7.4",
    "react-native-switch": "^2.0.0",
    "react-native-switch-selector": "^2.1.4",
    "react-native-vector-icons": "^8.1.0",
    "react-native-web": "~0.13.12",
    "react-native-webview": "11.2.3",
    "react-native-youtube-iframe": "^2.0.1",
    "react-navigation": "^4.4.4",
    "react-navigation-drawer": "^2.7.1",
    "react-navigation-stack": "^2.10.4",
    "react-navigation-tabs": "^2.11.1",
    "react-redux": "^7.2.4",
    "redux": "^4.1.0",
    "redux-persist": "^6.0.0",
    "redux-thunk": "^2.3.0"
  },
  "devDependencies": {
    "@babel/core": "~7.9.0",
    "jetifier": "^1.6.8"
  },
  "private": true
}

代码:

startUserLocationUpdates = async () => {
    const returns = await Location.watchPositionAsync(
      {
        accuracy: Location.Accuracy.BestForNavigation,
        timeInterval: 1000,
        // distanceInterval: 0,
      },
      (loc) => {
        if (this.props.ShowLocation) this.centerMapTo(loc.coords.latitude, loc.coords.longitude);
        this.props.onSetCurrentLocation({ latitude: loc.coords.latitude, longitude: loc.coords.longitude });
      }
    );
    this._removeLocationUpdates = returns.remove;
  };

0 个答案:

没有答案