I'm building a iPhone application which depends data from an online database.
To update the data in the app i could check at a certain time interval if an update is necessary but it is way cooler if i could use a push services which sends a notification to the app letting it know it is time for an update.
i'm not talking visible push notifications here, just a invisible push notification to fire the update method in my app.
Is there a standard way to do this or could i use apple's push notification services for this purpose ?
With other words: i'm now using pull to get updates, is there a push way to let the backend of my app know it is time for an update?
Edit: And if it is impossible, what would be good time interval for the update (0.03 kb if there are no updates). Is it to much to check it every 30 seconds ?
Short answer to your first question: You have to poll.
Why :- When your app is in the background, it can not know of any push notifications, unless there is an alert and user clicks
View
orLaunch
, which is not guaranteed (and you don't want the alert too).You may also want to avoid using APNS (if its only for this purpose), because of the additional overhead of configuring a server with Apple certificates and all that jazz.
To answer to your second question: How frequent you want your updates really depends on what your app does. For example, if you are showing "Stock" values, you may want to update the data every few seconds. For weather, it may be a few hours. For others, it may be days or even longer. It depends on how critical the updates are for the user.
I dont' think your is the right approach. Consider all the stuff You will build for a simple task: 1) server for push 2) registering for notification 3) going background and resuming (the big and complicated is the server for push notification)
and anyway when You got a message, you must ask the data... no savings comparing asking directly.
So a clean solution can be: 1) ask to the server using normal HTTP (using async NSURL request..) for example: http://...... &lastupdate='2012:05:01 18 00' passing the last update date we got a successful download (You can also use a unicx time stamp...)
2) the server will compare that date with its internal last update date: if it has newer date, it will respond with XML or plist (i prefer plist...)
3) the app downloads new data and updates the date/time.
4) if no data the answer is simply an empty string or for example the same date we sent.
Yes, it is possible with iOS 7+
You can receive "background" push notifications if you override this method of UIApplicationDelegate: application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
As documentation of this method method says:
Don't forget to enable "Background fetch" and "Remote notifications" in your background modes.
More info about background execution here.
You can receive notification while you are in foreground, but the server won't make any difference if you are in background or in foreground, unless you send an information to the server that you are in foreground.
That's why in your case, ase described in the previous message, it's better to check with the server when you came from background or when the application starts if there is any upload.
The other option is to send a visible notification so the user will start the application and then the update (as described in the previous paragraph) will happens
Use the delegate methods applicationDidRecieveRemoteNotification to tell the app to check in with the update service. Or you can have the app poll the update service durin applicationwillEnterForgound of you don't want to set up push notifications.
There is a well explained documentation in the Apple Online Library.
With Apple Push Notification Service (APNS) you can get ANY combination of:
When I say any I mean that no alert, no badge and no sound are also possible. Remote notifications are available even if the application is closed (but at least once executed, for register into the notification service), iOS has the debt of manage the push and wake up your application.
If you want to use APNS you need
Everything related with CSR and trusting your server is detailed in the iOS provisioning portal, "App ID" section, "How to" tab. Try this link.
In your web server must be hosted the APNS provider who will do these two actions:
Register a token identifying a concrete installation on a concrete iOS device. This token is generated for the Apple APNS and will be sended to the Provider by your app.
Generate push notifications: Will be sended from your provider to Apple APNS, an Apple APNS will delivery to your app (with an alert and/or badge and/or sound and/or silence mode)
The APNS notification will be delivered to your app using the Remote Notification System.
You can look into the Easy APNS App Delegate
As a provider you can use your own developed or you can use/modify anyone already downloadable like
So the answer is YES, it is possible. Using Easy APNS esamples, the push generation must look like this: