This was another one of those rather simple problems that took me a while to work out, mainly because of my approach to iOS development. So how am I approaching it? well since I am new to it, I tend to not know a lot of stuff so I generally have lots of problems I need to solve. So if I get stuck on a problem, I will simply move onto to another problem that I can solve and later revisit the problem I could not. This will allow my iOS knowledge to grow and something that is not immediately obvious initially, will be so later on. One of the problems, I faced was knowing which notification caused iOS app to resume and in this post, I will talk about a solution to it.
Problem
I have an iOS app that uses local notifications to create a more engaging user experience. The local notifications fall into one of two distinct categories and when the app resumes via a notification, it performs a set of “app resume/awake” behaviours that are relative to the notification category. Wow, even I would have trouble following what I just wrote, so let me just make this beyond super simple. Ok, here goes, say I have an app called
Animal whose only job is to make a sound and it does so when the user resumes the app via a local notification. So there are two categories of notifications that a user can get and they are
dog and
cat. So if the app resumes via a
dog notification it produces the
bark sound i.e.
woof woof!!! and if it resumes via the
cat notification, it must
meow!!!. So the app can either
bark or
meow depending on the notification that causes it to resume.
Knowing which case
There are two problems that need to be solved here,
- Problem 1: Setting a category on the notification to identify what category the notification belongs to
- Problem 2: Getting access to the notification object that triggered the app to resume so it’s category can be identified
Solution to Problem 1
So a localNotification is scheduled using the
UILocalNotification object and it has a dictionary called
userInfo.
UserInfo is basically a dictionary to which you can add whatever you want as long as it conforms to
[NSObject:AnyObject], so the information about the notification category can be added there.
So at this point, we know how add the notification category information to the local notification, so we can schedule a notification with the unique category info but how do we extract that category info when the notification triggers the app resume or launch?
Solution to Problem 2
Ok so it took me a bit of time to figure this one out, but I finally have a solution for this. Similar to what I identified in this
post, I suppose I just did not know where to look for the answer. Now I do and the answer lies in the
UIApplicationDelegate protocol, which has the following optional method
optional func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification)
So just add that method to your app’s AppDelegate and that method will be invoked when the app resumes or launches due to a local notification. This gives you access to the scheduled UILocalNotification object so you also have access to the userInfo dictionary of the notification from which you can extract the notification category. So I am not dealing with remote notifications in my app, but like the above method, the app delegate also has a this method
optional func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
so we are getting the userInfo with the remote notification as identified from the method above.
Note: I am only talking about the app resuming, which would generally mean that the app was running even if in the background, however the aforementioned method applies, even if the app was not running. When it is not running the notification will simply cause the app to launch.
So what did I learn from the process of solving this problem?
My recommendation to anyone starting iOS development would be to read some informative blogs on iOS development, blogs such as Ran Wanderlich. Simultaneously the
Apple docs are a fantastic resource and do a really good job in explaining certain concepts.
As usual, if you find any of my posts useful support me by buying or even trying one of my apps on the App Store.
https://mydaytodo.com/apps/
Also, if you can leave a review on the App Store or Google Play Store, that would help too.
Post Views: 977
Related
0 Comments