The following is a guide for improving your location region experience on Stringify mobile applications.
iOS 11 & Stringify v1.4.12 UPDATE:
iOS11 required us make some changes to our app, and in that process, some default behavior was changed. Please make sure you re-visit Settings -- Privacy -- Location Services -- Stringify and set it to Always.
General suggestions regardless of device and changes regarding the latest version of our app
Previously, our app kept track of geofences as you created a flow. This was changed in version 1.4.8 (iOS) and 1.7.2 (Android).
We changed how this is done in preparation for supporting Friends/Family location - a phone must not only keep track of its own geofences, but it must accept geofences that other Stringify accounts (based on permissions you grant) set on your phone. This change allows us to internally test the feature that we hope to release in the next few months. We will add support for triggers such as "Last person leaves a location" and "first person enters a location."
This is how it works now: When you enable or disable a flow using location, our servers send a "silent push notification" to your phone asking it to "check in" with our servers to get the latest list of geofences as well as report to us whether you are inside or outside of each geofence. On iOS, this requires "Background App Refresh" to be enabled in iOS Settings for Stringify. We have recently discovered that if you disable a flow and re-enable it within a few minutes, Apple & Android may not send your phone the "re-enable" message thinking it is a duplicate, resulting in your phone not receiving the second message. We are working with the timing of sending these silent push notifications to make this more reliable.
We have also discovered that the fewer geofences you have, the better - especially if they overlap. If you have many flows that use your home location (either home or away), you will experience much greater reliability if you use the Mode Thing instead. The Mode Thing doesn't have any "capabilities" by itself, but it allows you to set one of four modes (Home, Away, Awake, Asleep) via a flow and have other flows triggered by change in mode.
#1 Recommendation if you are having issues with location:
Use this single flow in all places where you want a flow to run conditionally based on whether you are home or not (or run when you arrive or leave home)
(click on the above link on your mobile device and click on 'Get Flow' to directly import it into the Stringify app)
Explanation of how this flow works:
- A single geofence is placed around your home with the trigger "When I enter OR leave a location"
- When this trigger fires, it passes a parameter 'Entered' or 'Left' to our 'Functions:Text" Thing, which has the ability to continue a flow based on text matching
- If you entered an area, it sets your Mode to "Home." If you left an area, it sets your Mode to "Away."
Now, in all flows where you previously used location, you can use Mode! Mode has both WHEN ('WHEN my Mode changes to 'Home') and ONLY IF ('ONLY IF my Mode is Home) triggers. This gives many additional benefits:
- Since our Activity Log only shows actions, you will be able to see at a glance whether your phone contacted our server with its new location. This can be difficult to self-troubleshoot when location is being used as an ONLY IF trigger
- If you have any issues, having a single Location 'Thing' makes things significantly easier for us to troubleshoot. As usual, just email email@example.com with any issues!
- You can manually set your Mode. If for some reason the Location 'Thing' did not work, you can click on Mode in the Things section of our app to set your Mode. You can also create flows that use widget buttons to set the Mode!
Make sure you give the Stringify application permissions to access your location. Airplane mode prevents location triggers.
Additional iOS tweaks
Turn off Low Power Mode
This will prevent the Stringify application from doing anything in the background. So keep it off unless you absolutely need it for a short period of time.
Go to Settings -> Battery.
Location: Always and Background App Refresh
As of the latest version of our app (1.4.8), background refresh is required in order for the phone to get the latest geofences after creating a flow. You can find Background App Refresh in iOS Settings -> Stringify
Android allows the user to set your Location Accuracy. It gives you the options of High accuracy, Battery saving, and Device only. Your Stringify location experience will change slightly based on your setting. I suggest only using either High accuracy or Battery saving. High accuracy will use GPS and will use more battery power than Battery saving which relies on cell towers, wifi, and bluetooth.
To give you an idea of the accuracy differences: High accuracy locations generally come in terms of tens of meters where as Battery saving locations can come in terms of hundreds or thousands of meters. So let's say you have a location region that's 100m in radius. If you're on High accuracy, your device may likely get a location that's accurate within 20 meters. If you're on Battery saving and connected to wifi, your device may also get a location that's accurate within 20 meters. But if you're on Battery saving and NOT connected to wifi, than your device may also get a location that's accurate within 800 meters. I've even seen it as bad as 4,000 meters. When your device is relying on cell towers for location it can be pretty inaccurate.
That being said, i've fully optimized the Stringify application to properly handle location region even when you're on Battery saving mode getting locations that are accurate within 800+ meters. But do be aware that you'll get better and more responsive location triggers with High accuracy set.
Go to Settings -> Location -> Mode.
Doze Mode is an Android feature, Android 6.0 Marshmallow and above, that saves battery by disabling location features and internet access to Stringify’s background service. It's nice for saving battery, but it will hinder your ability use Stringify's location regions. Doze Mode is turned on by default for all Android applications and will kick in a short time after you lock your screen or leave your device idle. Here I will explain the pros and cons to using it as well as when you want to use it and when you want to disable. I'll also show you how to disable it.
Having Doze Mode turned on will delay your Stringify location triggers. The delay is usually between 0-10 minutes, but it can be more. If your location setting is not set to High Accuracy than you are more likely to get longer Doze delays. If your device is unlocked and not idle, Doze should not cause any delays in location triggers. If the couple minute delay doesn't bother you and you'd prefer to save as much battery as possible, then leave Doze Mode turned on and consider setting your Location to High Accuracy.
Having Doze Mode turned off will allow your device to process location and region changes as quickly and consistently as possible with minimal delays. The Stringify application is optimized to battery efficiently with Doze both on and off, although you'll see a little more battery usage with Doze Mode turned off.
Go to Settings -> Battery -> "..." -> Tap Battery optimization.
Filter by All apps.
Find the app in the list.
Set your preference. Optimize means Doze Mode is on. Don't optimize means Doze Mode is off.
All other battery saving "features"
I suggest disabling all other battery saving "features". Android device manufacturers vary and like to put their own spin on things. If you want your location flows to work properly, you should disable all battery saving "features" that are NOT Doze Mode. I do fully support Doze Mode, but will not be testing against the device manufactures specific optimization "features".
Go to Settings -> Battery. Some devices have them and some don't. But they may look like this.