Good UX for Capturing Location + Push Notification Authorizations on iOS?


In Android, you don’t seem to have to ask for permission to track the user, or to send them push notifications (they are on by default based on device settings) but on iOS it seems you must ask for permission.

Is it best to ask for the permissions on intial launch of the application as a lifecycle event and save a Bool value to True on the device when the permission is granted?

Then use an if… else… on startup to check whether the bool is true? And if true, direct them to the next action/page?


Great Question. I actually wish more developers would think about the UX in these situations.

First… yes, iOS requires permission, Android does not.

And here’s where there’s no right answer but there’s good and bad UX. When you open an app for the 1st time and it prompts you for notifications… what do you do? Me… I decline EVERY TIME. I don’t know enough about the app or trust it yet to feel secure that their notifications won’t be intrusive in my life.

It’s been tested that when users are informed at proper spots in an app as to why the notifications benefit them, the timeliness of notifications, etc… users are more likely to agree to them by a WHOPPING 50% (I’ll try and find the source I read that from but it was a legit study).

My recommendation here… don’t worry about notifications until the user feels like 1 would be useful. An example… Your user looks up a flight and make a booking. Perhaps there’s an ability to receive updates on the booking in-app or perhaps there’s a confirmation process to the booking request that takes time… this is a great spot that the user would already be wondering “how will they let me know of the update”… it’s a spot here where a warm intro into opting into notifications would be a welcome instead of an annoyance. Providing a screen 1st for them to learn why they want notifications and asking them if they want to receive them or not BEFORE the official screen appears is a great strategy.

1 thing about notification request prompts… you only get 1 shot at sending them 1. If they decline, in order to change their mind, they have to manually go into the Phone’s Settings app -> Notifications -> your app name -> toggle notifications on. That’s TERRIBLE! Who wants to do that. Apple’s iOS doesn’t allow you to change their mind for them so you really wanna be smart about when you prompt them to accept the official request because you don’t get a second chance later.

Also, if you inform them and ask them if they want to opt-in (before they officially do), and they decline there… you now have an opportunity down the road to ask them again (maybe for a new compelling reason) in your app, and if they accept then… then you display the official request.

This is something more teams need to take seriously. I can’t believe in 2019, new apps appear with all the request permissions spilling into the 1st screen. it’s just terrible UX and they do a disservice to the value the notification can hold for the user.

Thanks for asking.


Say they decline initially, but my app requires access to their location, what is a practice that can be adopted to get then to manually adjust the setting on either Android or IOS?

Is there a way to check if the notification setting is enabled and trigger an if… else… to do something, such as display a popup directing them to the appropriate section on the device?


For GPS (Core Location aka “CL”) authorization status… yea you can check here… and then run logic to show a new screen saying "here’s how you can change it manually in the settings apps. Other apps try to provide instruction to help them turn it on so they can give the info to the app so that’s a good practice.

I don’t think we have a place to check for push notifications however. You could set device variable up to remember the setting they chose based on this fork in the road event spot when they are offered up the authorization in the first place.


What about on Android?

Can you check the status of location tracking somehow?


Doesn’t appear to be.

You can run the same Device Variable strategy suggested above though…


When I go to check for the location status as you indicate here which should work, it tells me this when i click ‘save’

Basically I’m trying to configure an if… else… to either request location authorization if ‘not determined’ , or go ahead and open the maps for directions if the permission is granted.


I don’t think it will work like that. I believe though when you present the authorization, you get a fork in the road where you could set a device variable to know the answer for later however. I would design it to present it and then based on the decision, you’ll know if it was granted or not.


No fork unfortunately…


It doesn’t make sense to me that we can’t check for an authorization and run actions if the authorization is granted or not.

Even the test for CCAuthorizationStatus is already there.


Just thought of a workaround I hope will work…

Bool device variable (assuming defaults to NO) that is written as “location ever updated?” which, upon an updated location (which obviously the user must grant access in advance for) you set it to YES.

Then, you run your if else based on whether that “location ever updated?” variable is yes. If yes, open map for directions, if no, then ask for authorization.