Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Background Only Geofences in 1.8 #102

Open
ShawnPavel opened this issue Feb 14, 2018 · 10 comments
Open

Background Only Geofences in 1.8 #102

ShawnPavel opened this issue Feb 14, 2018 · 10 comments

Comments

@ShawnPavel
Copy link

ShawnPavel commented Feb 14, 2018

Your Environment

  • Plugin version: 1.8.0
  • Platform: Android
  • OS version: 8.1.0
  • Device manufacturer / model: Google Pixel 2
  • Nativescript version (tns info):
┌──────────────────┬─────────────────┬────────────────┬─────────────┐
│ Component        │ Current version │ Latest version │ Information │
│ nativescript     │ 3.4.2           │ 3.4.2          │ Up to date  │
│ tns-core-modules │ 3.4.0           │ 3.4.0          │ Up to date  │
│ tns-android      │ 3.4.1           │ 3.4.1          │ Up to date  │
│ tns-ios          │ 3.4.1           │ 3.4.1          │ Up to date  │
└──────────────────┴─────────────────┴────────────────┴─────────────┘
  • Plugin config
    let options = {
        license: 'xxx',

        /* *****
            [Geolocation] Common Options
         * *****/
        desiredAccuracy: BackgroundGeolocation.DESIRED_ACCURACY_LOW,
        distanceFilter: 150,

        /* *****
            [Geolocation] iOS Options
         * *****/
        stationaryRadius: 100,
        useSignificantChangesOnly: true,

        /* *****
            [Activity Recognition] iOS Options
         * *****/
        disableMotionActivityUpdates: true,

        /* *****
            HTTP & Persistence Options
         * *****/
        url: LsApiPathConfig.API_URL + LsApiPathConfig.USER_LOCATION,
        extras: this.getBackgroundGeolocationExtras(),
        httpRootProperty: '.',
        maxRecordsToPersist: 1,

        /* *****
            [Application] Common Options
         * *****/
        stopOnTerminate: false,
        startOnBoot: true,
        heartbeatInterval: 300,

        /* *****
            [Application] Android Options
         * *****/
        foregroundService: false,
        notificationTitle: 'LiveShopper',
        notificationText: 'Location service activated',
        notificationIcon: 'drawable/ls_notification',

        /* *****
            Logging and Debug Options
         * *****/
        debug: false,
        logLevel: BackgroundGeolocation.LOG_LEVEL_VERBOSE,
        logMaxDays: 3
    };

Expected Behavior

The plugin will start monitoring geofence events on close.

Actual Behavior

When I call BackgroundGeolocation.startGeofences in the android activitiyStoppedEvent the app crashes

Steps to Reproduce

  1. Subscribe to the activity stopped event
        app.android.on(app.AndroidApplication.activityStoppedEvent, (args: any) => {
            startGeofences();
        });
  1. Start Geofence monitoring in the event

Context

I am attempting to only monitor geofences while the app is closed or in the background. I start the geofences when the app enters background. And also in the activity created event so that it starts when android restarts the app in the background. This worked fine before I updated the plugin to 1.8 and nativescript to ^3.4.

Debug logs

02-14 11:07:52.581  6728  6728 E AndroidRuntime: 	at com.tns.Runtime.callJSMethodNative(Native Method)
System.err: com.tns.NativeScriptException: 
System.err: Calling js method onSuccess failed
System.err: 
System.err: TypeError: Cannot read property 'getIntent' of undefined
System.err: File: "file:///data/data/com.liveshopper.mobile/files/app/tns_modules/nativescript-background-geolocation-lt/background-geolocation.js, line: 624, column: 47
System.err: 
System.err: StackTrace: 
System.err: 	Frame: function:'BackgroundGeolocation.init', file:'file:///data/data/com.liveshopper.mobile/files/app/tns_modules/nativescript-background-geolocation-lt/background-geolocation.js', line: 624, column: 48
System.err: 	Frame: function:'BackgroundGeolocation.getAdapter', file:'file:///data/data/com.liveshopper.mobile/files/app/tns_modules/nativescript-background-geolocation-lt/background-geolocation.js', line: 639, column: 18
System.err: 	Frame: function:'BackgroundGeolocation.startGeofences', file:'file:///data/data/com.liveshopper.mobile/files/app/tns_modules/nativescript-background-geolocation-lt/background-geolocation.js', line: 210, column: 18
System.err: 	Frame: function:'', file:'file:///data/data/com.liveshopper.mobile/files/app/shared/utils/app-event-setup.util.js', line: 45, column: 76
System.err: 	Frame: function:'onSuccess', file:'file:///data/data/com.liveshopper.mobile/files/app/tns_modules/nativescript-background-geolocation-lt/background-geolocation.js', line: 112, column: 17
System.err: 
System.err: 	at com.tns.Runtime.callJSMethodNative(Native Method)
System.err: 	at com.tns.Runtime.access$2400(Runtime.java:34)
System.err: 	at com.tns.Runtime$3.run(Runtime.java:1099)
System.err: 	at android.os.Handler.handleCallback(Handler.java:789)
System.err: 	at android.os.Handler.dispatchMessage(Handler.java:98)
System.err: 	at android.os.Looper.loop(Looper.java:164)
System.err: 	at android.app.ActivityThread.main(ActivityThread.java:6541)
System.err: 	at java.lang.reflect.Method.invoke(Native Method)
System.err: 	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
System.err: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
@christocracy
Copy link
Member

1.9.0-beta.3 released. Be sure to do this

@ShawnPavel
Copy link
Author

ShawnPavel commented Nov 5, 2018

@christocracy I finally got time to test out updating the app to 1.9.0-beta.4. The good news is it no longer crashes! Unfortunately, I no longer get geofence events sent to my http endpoint in the background as I did before.

Is there anything special that changed with the newest version when setting up geofences to get it to send the http post like before?

I tested it out by starting at one geofence location, walking to another, waiting for a few minutes, and then walking back to the first.

Here's the emailLog info.

{
    "activityRecognitionInterval": 10000,
    "allowIdenticalLocations": false,
    "autoSync": true,
    "autoSyncThreshold": 0,
    "batchSync": false,
    "debug": true,
    "deferTime": 0,
    "desiredAccuracy": 0,
    "desiredOdometerAccuracy": 100,
    "disableElasticity": false,
    "disableStopDetection": false,
    "distanceFilter": 10,
    "elasticityMultiplier": 1,
    "enableHeadless": true,
    "enableTimestampMeta": false,
    "extras": {
        "date": 1541439204,
        "isInBackground": false,
        "isIos": false,
        "userToken": "wAcF2QjJJtV2PkyrP5SxxdhE2YA3",
        "pushToken": "dlsJMhKMJYw:APA91bFcbbS3PqZqb-u8kQ5lICTI9rko7s9K5PIl--ikrPoRgheW1_GIlXyqMjZ0GrM6v8cslo5fDiezILEbSIXfYJs_2f_zsz2i7QgH0YAV7Dt2H3kLFmwfHa4GJjFNFnnLcFYGht6o"
    },
    "fastestLocationUpdateInterval": 10000,
    "forceReloadOnBoot": false,
    "forceReloadOnGeofence": false,
    "forceReloadOnHeartbeat": false,
    "forceReloadOnLocationChange": false,
    "forceReloadOnMotionChange": false,
    "forceReloadOnSchedule": false,
    "foregroundService": true,
    "geofenceInitialTriggerEntry": true,
    "geofenceProximityRadius": 1000,
    "geofenceTemplate": "",
    "headers": {},
    "headlessJobService": "com.transistorsoft.backgroundgeolocation.HeadlessJobService",
    "heartbeatInterval": 300,
    "httpRootProperty": ".",
    "httpTimeout": 60000,
    "isMoving": false,
    "locationTemplate": "",
    "locationTimeout": 60,
    "locationUpdateInterval": 1000,
    "locationsOrderDirection": "ASC",
    "logLevel": 5,
    "logMaxDays": 3,
    "maxBatchSize": -1,
    "maxDaysToPersist": 1,
    "maxRecordsToPersist": -1,
    "method": "POST",
    "minimumActivityRecognitionConfidence": 75,
    "notificationColor": "",
    "notificationLargeIcon": "",
    "notificationPriority": -2,
    "notificationSmallIcon": "",
    "notificationText": "Locating nearby tasks! (Long press to hide notification.)",
    "notificationTitle": "LiveShopper",
    "params": {},
    "persist": true,
    "schedule": [],
    "startOnBoot": true,
    "stationaryRadius": 25,
    "stopAfterElapsedMinutes": 0,
    "stopOnStationary": false,
    "stopOnTerminate": false,
    "stopTimeout": 5,
    "triggerActivities": "in_vehicle, on_bicycle, on_foot, running, walking",
    "url": "https:\/\/fuzzy-dragonfly-73.localtunnel.me\/user-location",
    "enabled": false,
    "schedulerEnabled": false,
    "trackingMode": 0,
    "odometer": 81.15462493896484,
    "isFirstBoot": false
}

And here's the log file:
background-geolocation.log

@christocracy
Copy link
Member

There are no geofences firing in your logs. You will not get a geofence event sent to your end-point if no geofence events occur.

@ShawnPavel
Copy link
Author

I did not change anything in my configuration, or implementation other than updating the plugin.

Is there anything special that changed with the newest version when setting up geofences to get it to send the http post like before?

I tested it out by starting at one geofence location, walking to another, waiting for a few minutes, and then walking back to the first.

@christocracy
Copy link
Member

It has nothing to do with HTTP. The geofences are not firing.

You can see in the logs that the geofences are being created and monitored. They are not firing.

  • Are you using a min radius of 200 meters?
  • Is WiFi enabled on device?
  • Location Mode art to “High Accuracy”?

@ShawnPavel
Copy link
Author

I understand it has nothing to do with HTTP. I should have rephrased that when I asked it again.

Is there anything special that changed with the newest version when setting up geofences to get it to FIRE GEOFENCES like before?

To answer your questions:

  • Are you using a min radius of 200 meters?
    • I assume you are talking about the radius on the geofence here. These are set to 100 per your documentation.
  • Is WiFi enabled on device?
    • Yes.
  • Location Mode art to “High Accuracy”?
    • It is never changed from the default value. Which I believe is 0 or "HIGHEST POWER, HIGHEST ACCURACY"

Here's one of the geofences:

{
    "identifier": "-KxsBI2uRgLXppk8ogGT",
    "radius": "100",
    "latitude": 41.059098,
    "longitude": -83.589661,
    "notifyOnEntry": true,
    "notifyOnExit": true,
    "notifyOnDwell": true,
    "loiteringDelay": 30000,
    "extras": {
        "location": "-KxsBI2uRgLXppk8ogGT",
        "campaign": "-KwuecyexbJW5Z5fvuuP",
        "user": "wAcF2QjJJtV2PkyrP5SxxdhE2YA3"
    }
}

@christocracy
Copy link
Member

Is there anything special that changed with the newest version when setting up geofences to get it to FIRE GEOFENCES like before?

No.

These are set to 100

The docs are mistaken. It should read minimum is 200. Change your radius to 200.

t is never changed from the default value. W

I'm not talking about the plugin config. I'm talking about your Android Device Settings -> Location.

@ShawnPavel
Copy link
Author

I updated it to 200. And the device is configured to use wifi for high accuracy GPS. Still no events.

My issue here is that it works when I run v1.8 but not 1.90-beta.4. If I downgrade to 1.8 and go for the exact same walk, I get geofence events firing without changing any configuration on my device or the plugin.

@ShawnPavel
Copy link
Author

ShawnPavel commented May 8, 2019

@christocracy I am coming back to this issue again after some time away working on other projects. I am still experiencing the issue above when running background geofences only. I do not see any geofence events firing for Android. I am still using the configuration above, but I am now using version 1.9.1 of the background-geolocation-lt plugin.

With the configuration provided above I receive ENTER events on iOS almost instantly after creating the geofence. This is as I expected it to behave. I have tested with a walk, and a drive across town. I do not get any geofence events.

Here is a recent email log from my last test:

{
    "activityRecognitionInterval": 10000,
    "allowIdenticalLocations": false,
    "autoSync": true,
    "autoSyncThreshold": 0,
    "batchSync": false,
    "debug": true,
    "deferTime": 0,
    "desiredAccuracy": 100,
    "desiredOdometerAccuracy": 100,
    "disableElasticity": false,
    "disableStopDetection": false,
    "distanceFilter": 150,
    "elasticityMultiplier": 1,
    "enableHeadless": false,
    "enableTimestampMeta": false,
    "extras": {
        "date": 1557342331,
        "isInBackground": true,
        "isIos": false,
        "userToken": "mZQ01aaw3rbMV9YJ4wNfrd41yJo1",
        "pushToken": "cnb6kT7lpKM:APA91bEP-ZbwC7rsYkJ2chu9ux9WC45TUxYxrtcCsicC1PgdsDaZ97H5YNCpMoJq9AwanPiLo5oCbtGrFcQjw6Ny7LNacuHx75yqwBKEPH9QGFPj_M-xkkDq-R90tWKB3fA5r4y4Nlvs"
    },
    "fastestLocationUpdateInterval": 10000,
    "forceReloadOnBoot": false,
    "forceReloadOnGeofence": false,
    "forceReloadOnHeartbeat": false,
    "forceReloadOnLocationChange": false,
    "forceReloadOnMotionChange": false,
    "forceReloadOnSchedule": false,
    "foregroundService": true,
    "geofenceInitialTriggerEntry": true,
    "geofenceProximityRadius": 1000,
    "geofenceTemplate": "",
    "headers": {},
    "headlessJobService": "com.transistorsoft.backgroundgeolocation.HeadlessJobService",
    "heartbeatInterval": 300,
    "httpRootProperty": ".",
    "httpTimeout": 60000,
    "isMoving": false,
    "locationTemplate": "",
    "locationTimeout": 60,
    "locationUpdateInterval": 1000,
    "locationsOrderDirection": "ASC",
    "logLevel": 5,
    "logMaxDays": 3,
    "maxBatchSize": -1,
    "maxDaysToPersist": 1,
    "maxRecordsToPersist": 1,
    "method": "POST",
    "minimumActivityRecognitionConfidence": 75,
    "notificationColor": "",
    "notificationLargeIcon": "",
    "notificationPriority": -2,
    "notificationSmallIcon": "",
    "notificationText": "Locating nearby tasks! (Long press to hide notification.)",
    "notificationTitle": "LiveShopper",
    "params": {},
    "persist": true,
    "schedule": [],
    "startOnBoot": true,
    "stationaryRadius": 100,
    "stopAfterElapsedMinutes": 0,
    "stopOnStationary": false,
    "stopOnTerminate": false,
    "stopTimeout": 5,
    "triggerActivities": "in_vehicle, on_bicycle, on_foot, running, walking",
    "url": "https:\/\/api.liveshopper.com\/v1-dev\/user-location",
    "enabled": true,
    "schedulerEnabled": false,
    "trackingMode": 0,
    "odometer": 36.359375,
    "isFirstBoot": false
}

background-geolocation.log.gz

@ShawnPavel
Copy link
Author

@christocracy Can you provide any insight as to why the geofence events aren't firing?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants