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,
  1. Problem 1: Setting a category on the notification to identify what category the notification belongs to
  2. 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.

Get updates?

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.
Categories: iOSSwift

0 Comments

Leave a Reply

Verified by MonsterInsights