You pretty much determined everything you need to do.
When you call the method CLLocationManagerDelegate didEnterRegion:, you can run the background job and then run the network request. After you receive a response, you can send a local notification, if necessary, and then complete the background task.
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
}
, - didEnterRegion:. - API, , didEnterRegion:.