Location Updates
Contents
iOS location updates are provided through the CoreLocation library. This can provide location updates to your app when it is running in the foreground, the background and when terminated.
You will need to create a location services class that contains an instance of theCLLocationManager
class. The CLLocationManager
instance should be instantiated and registered for the required level of location updates every time the app is run. Once the app has been registered for location updates they will be provided through the CLLocationManagerDelegate
you specify.
Note: Location updates provided when your app is terminated will launch your app in the background, calling the application willFinishLaunchingWithOptions:
and didFinishLaunchingWithOptions:
methods. To properly handle the location you must ensure the location manager is created and registered for updates during this launch.
iOS (Objective-C)
// location services should implement location manager delegate
@interface LocationServices () <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
// Setup location manager
- (void)setupLocationManager {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
}
iOS (Swift)
class LocationManager: NSObject, CLLocationManagerDelegate {
var locationManager: CLLocationManager!
// setup location manager
func setupLocationManager() {
locationManager = CLLocationManager()
locationManager.delegate = self
}
}
Registering for Updates
Apple provides a guide to choosing your authorization level and registering for the appropriate location updates here. Note: Make sure that you have added all the correct information to your app's info.plist to support location updates, like theNSUsageLocationDescriptions
that are used to explain why you need locations to the user. If you want locations in the background you will also need to check the location updates box in the background modes capabilities for your app.
Pass Location Updates to Sailthru Mobile
Once you have registered and your app is receiving location updates they will arrive through theCLLocationManagerDelegate
methods. You can then pass the location using the updateLocation:
method.
iOS (Objective-C)
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *location = [locations lastObject];
[[SailthruMobile new] updateLocation:location];
}
iOS (Swift)
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last
SailthruMobile().updateLocation(location)
}