react-native-background-geolocation icon indicating copy to clipboard operation
react-native-background-geolocation copied to clipboard

iOS continuous background geolocation not working- But works well with Android

Open ghnsharma opened this issue 1 year ago • 26 comments

Environment

  • Plugin version:
  • "react-native-background-fetch": "^4.2.1", "react-native-background-geolocation": "^4.12.1",
  • Platform: iOS
  • OS version: 16.6.1
  • Device manufacturer / model: iphone 14 Pro max
  • React Native version (react-native -v): "0.64.0"
  • Plugin config

BackgroundGeolocation.ready( { desiredAccuracy: BackgroundGeolocation.DESIRED_ACCURACY_HIGH, disableLocationAuthorizationAlert: true, distanceFilter: 10, stationaryRadius: 25, stopTimeout: 5, showsBackgroundLocationIndicator: true, debug: true, reset: false, logLevel: BackgroundGeolocation.LOG_LEVEL_VERBOSE, logMaxDays: 1, stopOnTerminate: false, startOnBoot: true, heartbeatInterval: 60, enableHeadless: true, stopAfterElapsedMinutes: -1, preventSuspend: false, elasticityMultiplier: 1, }, state => { console.log( '- BackgroundGeolocation is configured and ready: ', state.enabled, ); }, );

Expected Behavior

On iOS, it will continuously receive location updates in the background mode.

Actual Behavior

Android is working perfectly fine both in the foreground and in the background. However, on iOS, it only receives updates with a 4-5-minute delay every time after coming out of stationary mode.

Steps to Reproduce

  1. kill application and test

Debug logs

Screenshot 2023-09-12 at 3 43 40 PM

ghnsharma avatar Sep 12 '23 12:09 ghnsharma

Show me your package.json

christocracy avatar Sep 12 '23 12:09 christocracy

{ "name": "MyApp", "version": "0.0.1", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "start": "react-native start", "test": "jest", "lint": "eslint ." }, "dependencies": { "@aws-sdk/client-s3": "^3.40.1", "@invertase/react-native-apple-authentication": "^2.1.4", "@react-native-community/art": "^1.2.0", "@react-native-community/async-storage": "^1.12.1", "@react-native-community/checkbox": "^0.5.7", "@react-native-community/cli": "^6.1.0", "@react-native-community/datetimepicker": "^3.0.4", "@react-native-community/masked-view": "^0.1.10", "@react-native-community/picker": "^1.8.1", "@react-native-community/push-notification-ios": "^1.8.0", "@react-native-firebase/app": "^12.1.0", "@react-native-firebase/messaging": "^12.1.0", "@react-native-google-signin/google-signin": "^7.0.0-alpha.3", "@react-navigation/bottom-tabs": "^5.9.2", "@react-navigation/drawer": "^5.9.3", "@react-navigation/material-top-tabs": "^5.3.6", "@react-navigation/native": "^5.7.6", "@react-navigation/stack": "^5.9.3", "aws-sdk": "^2.1026.0", "axios": "^0.21.1", "base-64": "^1.0.0", "base64-arraybuffer": "^1.0.1", "fast-plist": "^0.1.2", "i18n-js": "^3.8.0", "lodash.memoize": "^4.1.2", "moment": "^2.29.1", "moment-timezone": "^0.5.33", "prop-types": "^15.7.2", "qs": "^6.10.3", "react": "17.0.1", "react-chips": "^0.8.0", "react-native": "0.64.0", "react-native-actionsheet": "^2.4.2", "react-native-app-intro-slider": "^4.0.4", "react-native-background-fetch": "^4.2.1", "react-native-background-geolocation": "^4.13.3", "react-native-calendars": "^1.403.0", "react-native-camera": "3.44.3", "react-native-collapsible": "^1.5.3", "react-native-country-picker-modal": "^2.0.0", "react-native-date-picker": "^4.2.6", "react-native-document-picker": "^5.2.0", "react-native-document-scanner-plugin": "^0.7.4", "react-native-draggable-flatlist": "^2.5.0", "react-native-elements": "^2.3.2", "react-native-email-link": "^1.11.0", "react-native-expandable-listview": "^1.2.11", "react-native-file-viewer": "^2.1.5", "react-native-floating-action": "^1.21.0", "react-native-fs": "^2.18.0", "react-native-gesture-handler": "^1.8.0", "react-native-google-places-autocomplete": "^2.4.1", "react-native-iap": "^8.6.3", "react-native-image-crop-picker": "^0.36.4", "react-native-image-picker": "^3.6.0", "react-native-image-to-pdf": "^1.2.0", "react-native-images-to-pdf": "^0.0.2", "react-native-input-credit-card": "^0.5.5", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-linear-gradient": "^2.5.6", "react-native-localize": "^1.4.2", "react-native-media-controls": "^2.1.0", "react-native-modal": "^11.7.0", "react-native-modal-datetime-picker": "^10.2.0", "react-native-orientation": "^3.1.3", "react-native-permissions": "^3.0.5", "react-native-print": "^0.8.0", "react-native-progress": "^4.1.2", "react-native-push-notification": "^7.3.1", "react-native-qrcode-svg": "^6.1.1", "react-native-radio-buttons-group": "^2.2.4", "react-native-ratings": "^7.3.0", "react-native-raw-bottom-sheet": "^2.2.0", "react-native-reanimated": "^2.2.0", "react-native-render-html": "^6.3.4", "react-native-safe-area-context": "^3.1.8", "react-native-screens": "3.3.0", "react-native-signature-capture": "^0.4.11", "react-native-simple-radio-button": "^2.7.4", "react-native-slider": "^0.11.0", "react-native-snap-carousel": "^3.9.1", "react-native-stripe-api": "^0.1.0", "react-native-stripe-checkout-webview": "0.0.13", "react-native-super-grid": "^4.0.3", "react-native-svg": "^12.1.1", "react-native-tab-view": "^2.15.2", "react-native-tag-autocomplete": "^1.0.22", "react-native-tags-input": "^1.0.10", "react-native-text-input-mask": "^3.1.4", "react-native-toast-message": "^1.4.9", "react-native-vector-icons": "^7.1.0", "react-native-video": "^5.2.0", "react-native-video-player": "^0.12.0", "react-native-video-processing": "^2.0.0", "react-native-view-pdf": "^0.11.0", "react-native-webview": "^10.10.2", "react-redux": "^7.2.1", "redux": "^4.0.5", "redux-persist": "^6.0.0", "redux-saga": "^1.1.3", "reduxsauce": "^1.2.0", "rn-fetch-blob": "^0.12.0" }, "devDependencies": { "@babel/core": "7.13.14", "@babel/runtime": "7.13.10", "@react-native-community/eslint-config": "2.0.0", "babel-jest": "26.6.3", "eslint": "7.14.0", "eslint-config-prettier": "^6.11.0", "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "^2.20.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.3", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-react": "^7.20.0", "eslint-plugin-react-native": "^3.8.1", "eslint-plugin-standard": "^4.0.1", "jest": "26.6.3", "metro-react-native-babel-preset": "0.64.0", "prettier": "^2.0.5", "react-native-rename": "^2.4.1", "react-test-renderer": "17.0.1" }, "jest": { "preset": "react-native", "setupFiles": [ "./node_modules/react-native-gesture-handler/jestSetup.js" ], "transformIgnorePatterns": [ "/node_modules/(?!react-native)/.+" ] }, "rnpm": { "assets": [ "./App/Assets/Fonts/" ] } }

ghnsharma avatar Sep 12 '23 13:09 ghnsharma

reset: false,

Why are you using reset: false. Almost nobody should be using that. Do you know what it does?

christocracy avatar Sep 12 '23 19:09 christocracy

"react-native-background-geolocation": "^4.12.1",

The version posted to your issue doesn’t match the version from your package.json.

"react-native-background-geolocation": "^4.13.3",

christocracy avatar Sep 12 '23 19:09 christocracy

I suggest you fetch the logs from the plug-in. See wiki “Debugging” and learn to use the .emailLog method.

christocracy avatar Sep 13 '23 01:09 christocracy

"react-native-background-geolocation": "^4.12.1",

The version posted to your issue doesn’t match the version from your package.json.

"react-native-background-geolocation": "^4.13.3",

We updated the package after pushing the issue to see if it works.

ghnsharma avatar Sep 13 '23 09:09 ghnsharma

email logs { activityRecognitionInterval = 10000; activityType = 1; authorization = { }; autoSync = 1; autoSyncThreshold = 0; batchSync = 0; debug = 1; desiredAccuracy = "-1"; desiredOdometerAccuracy = 100; didDeviceReboot = 0; didLaunchInBackground = 0; didRequestUpgradeLocationAuthorization = 1; disableAutoSyncOnCellular = 0; disableElasticity = 0; disableLocationAuthorizationAlert = 1; disableMotionActivityUpdates = 0; disableStopDetection = 0; distanceFilter = 10; elasticityMultiplier = 1; enableTimestampMeta = 0; enabled = 1; extras = { }; geofenceInitialTriggerEntry = 1; geofenceProximityRadius = 2000; geofenceTemplate = ""; headers = { }; heartbeatInterval = 60; httpRootProperty = location; httpTimeout = 60000; iOSHasWarnedLocationServicesOff = 0; isFirstBoot = 0; isMoving = 0; lastLocationAuthorizationStatus = 3; locationAuthorizationAlert = { cancelButton = Cancel; instructions = "To use background location, you must enable '{locationAuthorizationRequest}' in the Location Services settings"; settingsButton = Settings; titleWhenNotEnabled = "Background location is not enabled"; titleWhenOff = "Location services are off"; }; locationAuthorizationRequest = Always; locationTemplate = ""; locationTimeout = 60; locationsOrderDirection = ASC; logLevel = 0; logMaxDays = 3; maxBatchSize = "-1"; maxDaysToPersist = 1; maxRecordsToPersist = "-1"; method = POST; minimumActivityRecognitionConfidence = 70; odometer = "43986.17490828034"; params = { }; pausesLocationUpdatesAutomatically = 1; persistMode = 2; preventSuspend = 0; schedule = ( ); schedulerEnabled = 0; showsBackgroundLocationIndicator = 1; startOnBoot = 1; stationaryRadius = 25; stopAfterElapsedMinutes = "-1"; stopDetectionDelay = 0; stopOnStationary = 0; stopOnTerminate = 0; stopTimeout = 5; trackingMode = 1; url = ""; useSignificantChangesOnly = 0; }

ghnsharma avatar Sep 13 '23 09:09 ghnsharma

There is a very large zip file contains the plug-in logs which is attached to the email. I’m less interested in the text in the body of the email,

christocracy avatar Sep 13 '23 10:09 christocracy

Our Application Logs background-geolocation (3).log.gz

Your Demo Application Logs background-geolocation (4).log.gz

ghnsharma avatar Sep 13 '23 11:09 ghnsharma

What org name did you register with my demo app?

christocracy avatar Sep 13 '23 11:09 christocracy

https://tracker.transistorsoft.com/Augmentworks

ghnsharma avatar Sep 13 '23 11:09 ghnsharma

Tracking for Augmentworks looks fine.

Screenshot 2023-09-13 at 7 47 23 AM

christocracy avatar Sep 13 '23 11:09 christocracy

Yes, it looks good here from your application. We tried matching all configuration as yours but still not working on iOS devices from our application, it always gives gaps of 4-5 min delay. It is working on simulator though when we try on city run. Anything you can think of that we are missing?

ghnsharma avatar Sep 13 '23 12:09 ghnsharma

Have you checked your XCode logs to see if your app is crashing (from your own application code)?

See XCode -> Window -> Devices & Simulators -> [View Device Logs]

Screenshot 2023-09-13 at 8 33 01 AM

christocracy avatar Sep 13 '23 12:09 christocracy

App is not crashing as it is already in killed state, service is running continuously, it is getting location data only after specific time period. It runs for sometime and then it goes to sleep and again gets started. And this happens continuously.

On simulator it works well. But on devices it shows gaps. We had been using your SDK since long time and it had been giving continuous tracking before for us. But suddenly it stopped giving continuous updates on production server where nothing is changed and this is happening on ios only.

So we are not able to understand the issue.

ghnsharma avatar Sep 13 '23 12:09 ghnsharma

Our Application Logs background-geolocation (3).log.gz

Your zip file is empty.

logLevel = 0;

Use LOG_LEVEL_VERBOSE

christocracy avatar Sep 13 '23 13:09 christocracy

What would you like to know about these logs?

christocracy avatar Sep 14 '23 15:09 christocracy

When it goes into the background, it triggers after covering some distance. However, it goes to sleep for 4 minutes, then starts again for 1 minute, and repeats this cycle. So, I don't know why it's causing a 4-minute delay every time.

ghnsharma avatar Sep 15 '23 11:09 ghnsharma

I suggest you build yourself a simple Hello World and attempt to reproduce it

christocracy avatar Sep 15 '23 12:09 christocracy

ok will check.

ghnsharma avatar Sep 15 '23 13:09 ghnsharma

Sorry for the late reply.

I tried the 'Hello World' project, but it still gives a 5-minute gap in background modes. For reference, I am attaching the details of my demo project. Archive.zip

ghnsharma avatar Sep 20 '23 13:09 ghnsharma

You're aware there CAN be a "gap" when a device first starts travelling? it typically takes movement of at least 200 meters before tracking engages. That is represented by the "green polyline" on the demo server (and example app). Depending on the device / environment, it can take longer.

christocracy avatar Sep 21 '23 12:09 christocracy

Yes, I am aware of the gap at the beginning, but it continues to occur continuously. Please check today's latest testing data.

https://tracker.transistorsoft.com/AugmentWorks

ghnsharma avatar Sep 21 '23 14:09 ghnsharma

I suggest you analyze your logs at the start / end of those "gaps". I suspect it's your application code responsible.

I also suggest you install the SampleApp to test and compare in parallel.

I do not experience anything like this and none of the other thousands of customers are posting about this.

christocracy avatar Sep 21 '23 14:09 christocracy

This issue is stale because it has been open for 30 days with no activity.

github-actions[bot] avatar May 04 '24 01:05 github-actions[bot]

This issue was closed because it has been inactive for 14 days since being marked as stale.

github-actions[bot] avatar May 18 '24 01:05 github-actions[bot]