Is it possible for an iphone app to continually send gps device location updates to a remote server, so the device could be "pin-pointed"?
I understand i can get the gps cords and get the app to continue to get them in the background, but im unsure about being able to send the cords to a webservice when in the background mode or if apple would even allow me.
-trav.
According to the apple documentation, I think this should be possible.
But you will not be able to use real GPS device. When running in the background you will only receive major location changes. Which are detect when the user travels into a new GSM cell.
Read more on background execution:
https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5-SW4
Related
Am developing application for calculate count of user moved steps and draw the user activities in the map. And we are using UIAccelerometer delegate for receive acceleration-related data from the onboard hardware. So I need to receive acceleration-related data when the application in background mode too. Last time one of my application got rejected because of using location service in background, Apple suggested me like "you can only use this background mode if your app truly needs this information to provide value for the user". Kindly suggest the best approach for this application.
You cannot run accelerometer in background.
You can track user's location in background... however, if you just keep tracking it and do nothing with that info.. apple is going to reject it and tell you to just get the lates location when app comes to foreground.
what you can try is.. update the user of total distance covered etc on a regular basis (like run keeper) and this will justify tracking location in background.
But first, you can try appealing to the review board explaining that you need to track location in background because you show entire route travelled by user when app comes to foregraound. and compare this to existing apps like run keeper and if you are lucky apple may approve your application without any changes...
This can easily be done.
What happens in that iOS put your application in halt state when your application is not in running in foreground state.
You just need to register your application for background execution.
Refer :
http://dcraziee.wordpress.com/2013/05/20/background_ios/
Also refer :
iOS background application network access
for apple policies about using location service.Which states that you can use location service in background.
I am using CoreLocation to determine user's location to calculate the distance and show the route on the map. To minimize battery usage I am turning off GPS after getting location and turning it on again after 1 minute. When the application is active everything works fine, but after sending it to background and turning off GPS, the app seems to be inactive at all, it doesn't output anything (using NSLog()). I have added directive to info.plist file to allow the application to run in background. When I don't turn off the GPS in background the app works as well as in foreground.
So my question is the following: does GPS always need to be turned on in background to prevent the application to be suspended or there is another workaround (because the turned GPS drains the battery)?
P.S. I am new to iOS and mobile development at all, so maybe there are some tips that I have to know.
See http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html
Apple does not support long running background task in general.
This does only work for specific tasks:
audio,
location,
voip,
newsstand-content,
external-accessory,
bluetooth-central and
bluetooth-peripheral
When you do not use any of that, your app could be suspended.
In your case ypu have specified location, but disabled the location update. Then for apple there is no reason to keep your app in background mode.
I am developing an iphone app. the iphone which install my app was asked to upload it's location every minute(or hour) to a webservice. So what should i do with this situation?
I know there is a corelocation framework, I could use it for my app. like when I run this app, the corelocation will grab the GPS for my. my question is what if I close the app? Can i still get the GPS and upload it to webservice every minute? If I can't, how could I ?
You could enable background location service, If application is in background and receives a considerable change in location it will activate the app for a brief amount of time, This will give you some time to process. Apple recommends not to use web-service calls during this time, because there wont be any guarantee that the app would be live when it returns back. But since you just want to update the location, you could just post it and dont have to wait for response. Please note that significant location change should be used and this will help you to save your device's battery life. This is when the app is in background state.
May be you could try registering for the proximity/location alert or something. But i am not sure whether it would help when app is closed.
If your app is running in the background then you can get the GPS data but it the application is removed from the Background then you cannot get the GPS data. This is not possible in iPhone.
Can I make iphone app that get coords from gps in 2 seconds and save them in file. In the end of the day I should send via mail?
You cannot tell the Core Location framework to alert your app every 2 seconds with GPS information. Your app can use the Significant-Change Location Service. So if the device is in a car on the highway, that could well be every 2 seconds. But if the device is traveling by foot, then that depends on how fast the user is walking. Then you can use a Local Notification to alert the user and bring the app from the background at the end of the day.
You can never have GPS location in 2 seconds, only the coordinates from triangulation of wifi signals.
You never know how long the device would take to detect the user's location.
You can of course make an app which should check the user's accurate location and then write it to plist and later whenever you planned to share it via email or any other source, you should able to share it easily.
To get the user's most accurate location look up for the accuracy property in CoreLocation framework. If you considering time limit just for the sake that the user need not to wait until the app gets the accurate location, then you should use background location service introduced in iOS 4.0.
For the sake of this question, assume I plan to build a Google Latitude client app for iOS 4.
my app needs to upload the user gps location every two minutes, and also download the user friends locations. - in the background!
my app can't wait to be woken up by the OS on cellular tower switches (because they may only happen after 2 KM, while my app needs constant gps updating), so I understand I can create a thread, similar to the ones GPS navigators use, to run in the background.
I have no knowledge in iPhone programming, I just need to know if my app is feasible.
Will I be able to access the internet from within the background thread (and upload the user gps location), or is it restricted to only sampling the GPS location.
1.
Will Apple approve such an application, or is this type of use forbidden? because my app isn't realy critical such as a gps navigator
Thanks!
As Don said, iOS will send location events to apps that support it. From there, the app can do what it needs to do with the location event.
Background apps can register for one of three options:
Significant changes only: a low-power way to track location that only wakes the app up when there's a "significant" change in location
Standard location services: compatible with all iOS devices that can use location services, allows you specify change in distance, and works in background. However, if the app has been terminated or suspended, iOS won't attempt to relaunch the app.
Continuous location services: allows the program to receive continuous location updates and iOS will not suspend the application when sent to the background.
More info: Executing Code in the Background and Location Awareness Programming Guide
If you take a look at Executing Code in the Background, Apple provides guidelines on what multitasking-aware apps should and shouldn't do.
You will receive the locationManager:didUpdateToLocation:fromLocation: message in your app. In there, you can do whatever you need to, although you should not update the UI or use Open GL if your are in the background.