Repeating a certain method in iOS even when app is in background - ios

I am developing an application that parses some data from web and puts it into a tableview. It is now working only when the user tells the app to do so (by clicking on a certain cell), but I want to change that or rather add a functionality, that would simplify user's life and parse that data (for example) every hour. I was thinking about Local notifications, because that is the only thing I am aware of that runs even when you kill the app. So the question is:
Is it possible to repeat a certain method or functionality in an app till (for example)the user disables this option? Is there something like a service that is running even when the application is in the background or even killed?
Can this be done by a local notification? How?
Or what is the appropriate way to do it?
Thank you

Is there something like a service that is running even when the application is in the background
See, for example:
Running iOS App In The Background
Your app can run in the background only if it is performing certain permitted kinds of activity.

Related

Fetching data in a background and sending notification in iOS

What I want to do is: when my app is running in the background, I want to fetch data from API, every, let's say, 5 minutes. If some data changed I want to send a notification to the user. Is something like that possible in Swift? My problem is that I don't know how to run code in the background. I looked up background fetch but it looks like it was not made for this purpose (I can't be sure it will be fired after x amount of time with this). My app will be mostly user opening it once, setting some settings and then leave it in the background for notifications and never open it again. Any suggestions on what I can use for this purpose? I'd like to avoid creating a backend that will send data to the app, if possible.

Background fetch alternatives

I want to my app do some computations and then communicate with external server via HTTP. I would like to perform this operations both in foreground and background. It seems that Background fetch mode is best choice for me but I have some concerns related with this. What is the minimal time interval between fetches? I read somewhere this is 10 min, is that true? I read also that when user force quit fetches are no longer invoked. Is there any walk around to this? Finally, is there any alternative to background fetch? I saw there is Newsstand mode what looks promising. Can I use it for my purposes?
If you use background fetch or another background mode and don't really use it for the intended use, iOS will detect that an kill your app. (the most promising mode for that would be VOIP, but this would't make it into the App Store, as it's a cheat either)
You can start a background task, when your app enters background, what gives you 3 minutes time (iOS 7 and above).
As I did it before, you can schedule a local notification and use it to remind the user, that he should bring the app back into the foreground for more calculations, if he likes.

swift/ios refreshing app data when in background

I'm writing a iOS/Swift application which reads data from a REST service each X minutes and updates the UI accordingly.
Now I would like that when the app is put in the background, a task keeps being invoked at X minutes intervals reading from the REST service and, in case the data just read satisfies a given condition, show a notification prompting the user to bring the app back to the foreground.
In my searches I've read that during applicationDidEnterBackground event, I should start a task with beginBackgroundTaskWithExpirationHandler.
The problem is that, if I've understood correctly, this allows a maximum of 10/15 minutes after which the app is terminated if the task is not stopped with endBackgroundUpdateTask, while I want the task to keep polling the service indefinitely (at least until the user disable it from the app's settings)
My question is:
How is this kind of functionality performed normally? Do some common solutions or best practices exist for the solution of such a problem?
Use iOS Background Fetch feature where you can specify minimum background fetch interval. But actual interval between successive invocation of your code will be determined by iOS framework. For details checkout this link: http://code.tutsplus.com/tutorials/ios-7-sdk-working-with-background-fetch--mobile-20520
I use this approach in my app and I think it is a preferred way of doing.
You can use a local notification that can be presented from the background in case your condition is met.
Correct, iOS will eventually shut down the background process, you can't enforce continuous background activity. Use the backgroundTimeRemaining property to check how much time your application has left and try to handle it as gracefully as possible by calling endBackgroundTask so that iOS does not force kill your app.
As a solution, you could think about using remote notifications with with content-available : YES, which runs the didReceiveRemoteNotification
Have a look at the Parse.com Their local datastore is an abstraction for what you are trying to acheive.
By the way, is it really necessary to refresh in the background. If call is relatively quick, there is no need to refresh until the user open's the app. Background processes like that, using the net can be quite battery consuming when the user are not on a Wifi. So consider the use case carefully!

How to run run a process frequently as a background service ios

I am working on ios app that used to read ticket data as a barcode scanner. It needs to upload data frequently to a web server, Like two or three times a day. I have done the sync function. I just wanted to run the function when the app is run in background.
This is not possible on iOS, Apple is not allowing any kind of background service on iOS.
The options you are left with is setting your apps background mode to fetch and implement application:performFetchWithCompletionHandler:. But it is totally up to ios if and when this method is called.
You could misuse one of the other background modes to keep your app open in the background, but Apple might reject your app for doing so. Also user might complain about you app draining battery.
What kind of data is that you need that you have to update it two to three times a day? I would say the when the app is opened by the user would be a good time to update, because this is when the user is expecting new data.
If you need to inform the user about some data changes you should be pull it in the app but a server should send a push notification to inform the user that there is new data.

iOS - Run background process while app is in suspended state

I have an application which takes characters from a web page and compares them to a UILabel in the application. What I want to do is enable the app to continue to do this even when the user has placed the app in a suspended state. All I have found online and in the documentation is the way to schedule a UILocalNotification while still in the active state. In the documentation, it states that you can declare certain permissions in the info.plist. I looked at the categories, but my application cannot really fit any of those.
Is there a way for me to continue comparing the two strings and scheduling a notification while in the background?
Thanks.
iOS doesn't really support multi-tasking in the manner you require. (i.e.: You can't simply carry on processing data in the background unless you're a very specific kind of app such as a VOIP service, etc.) otherwise you're likely to end up being terminated.
However, one possible solution would be to carry our this monitoring on a separate system (e.g.: a web server that your app interacts with) rather than within the app itself. You'd therefore:
Communicate the required string/web page to your web service
Carry out the processing on the web server.
Send a push notification to your app if the string was found on the page in question.

Resources