The plugin supports customizable JSON request schemas with the following config options:
| Option | Type | Default | Description |
|---|---|---|---|
httpRootProperty |
String |
location |
The root key in the JSON to render records |
locationTemplate |
String |
undefined |
Optional template to render location data |
geofenceTemplate |
String |
undefined |
Optional template to render geofence data |
Traditionally, the plugin had a hard-coded "Location Data Schema", where it automatically appended location-data to the location key in the JSON data, eg:
bgGeo.configure({
url: 'http://my_url',
params: {
myParams: {foo: 'bar'}
}
});POST /my_url
{
"location": { // <-- hardcoded "httpRootProperty"
"coords": {
"latitude": 23.23232323,
"longitude": 37.37373737
}
},
"myParams": {
"foo": "bar"
}
}With httpRootProperty, you can now customize this key:
bgGeo.configure({
url: 'http://my_url',
httpRootProperty: 'data',
params: {
myParams: {foo: 'bar'}
}
});POST /my_url
{
"data": { // <-- customizable "httpRootProperty"!
"coords": {
"latitude": 23.23232323,
"longitude": 37.37373737
}
},
"myParams": {
"foo": "bar"
}
}If you'd rather POST your data as the root of the JSON, use httpRootProperty: ".":
bgGeo.configure({
url: 'http://my_url',
httpRootProperty: '.',
params: {
myParams: {foo: 'bar'}
}
})POST /my_url
{
"coords": { // <-- location data place *as* the root of the JSON
"latitude": 23.23232323,
"longitude": 37.37373737
},
"myParams": {
"foo": "bar"
}
}If you wish to provide your own custom HTTP JSON schema, you can configure distinct templates for both location and geofence data. Evaluate variables in your template using Ruby erb-style tags:
<%= variable_name %>Example:
bgGeo.configure({
url: 'http://my_url',
httpRootProperty: 'data',
params: {
myParams: {foo: 'bar'}
},
locationTemplate: '{ "lat":<%= latitude %>, "lng":<%= longitude %> }',
extras: {
"location_extra_foo": "extra location data"
}
})POST /my_url
{
"data": {
"lat": 45.5192657,
"lng": -73.6169116,
"location_extra_foo": "extra location data"
},
"myParams": {
"foo": "bar"
}
}The following template tags are common to both locationTemplate and geofenceTemplate:
| Tag | Type | Description |
|---|---|---|
latitude |
Float |
|
longitude |
Float |
|
speed |
Float |
Meters |
heading |
Float |
Degress |
accuracy |
Float |
Meters |
altitude |
Float |
Meters |
altitude_accuracy |
Float |
Meters |
timestamp |
String |
ISO-8601 |
uuid |
String |
Unique ID |
event |
String |
`motionchange |
odometer |
Float |
Meters |
activity.type |
String |
`still |
activity.confidence |
Integer |
0-100% |
battery.level |
Float |
0-100% |
battery.is_charging |
Boolean |
Is device plugged in? |
The following template tags are specific to geofenceTemplate only:
| Tag | Type | Description |
|---|---|---|
geofence.identifier |
String |
Which geofence? |
geofence.action |
String |
`ENTER |
You're completely responsible for "quoting" your own String values. The following will generate a JSON parsing error:
bgGeo.configure({
locationTemplate: '{ "event":<%= event %> }',
});In the logs, you'll find:
‼️-[TSLocation templateError:template:] locationTemplate error: Invalid value around character 10.
{ "event":<%= event %> }
To fix this, the String tag <%= event %> must be wrapped in "":
bgGeo.configure({
locationTemplate: '{ "event":"<%= event %>" }',
});Boolean, Float and Integer values do not require quoting:
bgGeo.configure({
locationTemplate: '{ "is_moving":<%= is_moving %>, "odometer":<%= odometer %> }',
});
You're not forced to define your templates as an {Object} — You can define them as an [Array] too.
bgGeo.configure({
url: 'http://my_url',
httpRootProperty: 'data',
params: {
myParams: {foo: 'bar'}
},
locationTemplate: '[ <%= latitude %>, <%= longitude %> ]',
extras: {
"location_extra_foo": "extra location data"
}
})POST /my_url
{
"data": [
45.5192657,
-73.6169116,
{"location_extra_foo": "extra location data"} // <-- appended #extras
],
"myParams": {
"foo": "bar"
}
}❗ #extras are automatically appened to the last element of the array as an {Object}.
#params, since there no place in the request JSON to append them.
bgGeo.configure({
url: 'http://my_url',
httpRootProperty: '.',
params: {
myParams: {foo: 'bar'}
},
locationTemplate: '[<%=latitude%>, <%=longitude%>]',
extras: {
"location_extra_foo": "extra location data"
}
})- POST /my_url
[ // <-- #params are lost. There's no place in the data-structure to append them.
45.5192657,
-73.6169116,
{
"location_extra_foo": "extra location data"
}
]