iOS8: How to display blue bar "is Using Your Location" with "requestAlwaysAuthorization" - ios

How does an app register for location services in the background and signification change location services, i.e. using requestAlwaysAuthorization, and get the Blue Bar to warn the user that they might want to end their activity?
According to Apple documentation using requestWhenInUseAuthorization:
The system displays a location-services indicator in the status bar when your app moves to the background with active location services.
However,
Apps cannot use any services that automatically relaunch the app, such as region monitoring or the significant location change service.
The limitation on requestWhenInUseAuthorization seems severe (cannot be relaunched if killed by the OS).
Can an app call both the Authorization methods?
Is the app supposed to forgo being relaunched by significant location change services, in order to get the Blue Bar to be seen?
Am I missing something obvious here?
(Similar question is Blue banner "Your app is using your location" is not showing after exiting my app. Other questions seem to want to get rid of the banner.)

The blue bar only show when you enable Background Location Updates and request when-in-use authorization in iOS 8.
Blue bar “is Using Your Location” appears shortly after exiting app
Sounds like location manager can't stop immediately. So the blue bar will appear until location manager stop completely. Or maybe it's just a bug .

Related

Prevent Location blue bar in ios 11

As you already heard, in iOS11, an app that’s actively receiving continuous background updates will show a double-height blue bar, whenever authorization is set to While Using. It seems there is no way to remove the blue bar if the App is using background location App.
My app supports ios 9.0 and above and, I have added all the keys required in info.plist including the one below.
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string></string>
But seems everybody says there is no way to remove the blue bar while background location updates is working.
However I have installed UBER and somehow they managed to hide the blue bar when the app is in background, but in my app I can see blue bar when I put app in background.
Does some one knows any solution to get rid of blue bar in iOS11 when we set permission "while using the app" ?
In iOS 11, the Blue Bar will appear when an Always authorized app opts-in to displaying the blue bar while it is actively receiving Continuous Background Location updates via startUpdatingLocation()
There’s a new property on CLLocationManager that Always authorized apps can use to control the visibility of their blue bar.
#property(assign, nonatomic) BOOL showsBackgroundLocationIndicator
When-in-use authorized apps will continue showing the Blue Bar as before.
No other service will turn on the Blue Bar. When an app which makes use of any other location service receives an occasional update (for example Significant Location Change), the location arrow on the status bar will momentarily blink solid, but the Blue Bar will not appear.
According to apple , After iOS 11 update that blue bar is showing when app is running on the background. What you can do is, track user location when app is in the foreground.
Check this
Try with NSLocationAlwaysUsageDescription in info.plist file and use requestAlwaysAuthorization in CLLocationManager.
showsBackgroundLocationIndicator is useful for requestAlwaysAuthorization.

When does iPhone shows solid location icon in the status bar?

I am developing an app that subscribes to user's significant location changes, visit changes and region (geofence) changes. However, I always see a solid location icon in the status bar. Looking at "Privacy->Location Services" settings I see that recently the location was used by my app and some other app.
Also once I set location permission for my app to 'Never', the location icon in status bar disappears.
I am wondering whether the subscription to significant location changes, visits and region changes cause iOS to show the Solid Location icon.
I am actually sitting in my room for half of the day and as a result the phone doesn't change location and I do not expect any location change event to be fired.
What is the exact condition when solid location icon is shown in the status bar?
I've read this question, but I think it is unrelated.
I wanted to cover all aspects of your question and I hope you don't mind a long descriptive answer.
Permission levels:
Never - User denies the app permission to use the location.
While In Use - User has given the app permission to use use the location when it is in use. This means foreground and location access is granted to the app while the user is actively using it.
Always - User has given the app permission to use the location in background and foreground.
The main arrow denotes location use:
The arrow at the right top corner before the battery level indicator can have two shades.
Hollow (outlined) - Indicates that there are apps on the phone that use geofencing
Solid arrow - Indicates that there are one or more apps that actively use the location of the phone including GPS. The solid arrow displays for apps running in the foreground and background.
If your app is utilizing region monitoring then, it gets delegate callbacks for entry and exit events. This often means the phone is being tracked using significant location changes. For region monitoring, you don't need to explicitly register to receive location updates as it is all taken care of by the underlying APIs.
The solid arrow will continuously display in case you have regions that are in close proximity to the phone, my observation is anywhere up to 3KM. The distance is unpredictable and largely depends on the geographic location of the phone, but I have noticed the continuous use of location to trigger regions and then the OS switches back to significant change based monitoring once the region has triggered or the phone has moved a lot further. If this is not the case, then review the LocationManager delegate implementation to make sure the app is not receiving updates more frequently.
On the other hand, if you are registering for significant changes in location to be notified, then the solid arrow will display whenever location updates are delivered to the app.
The solid purple, solid gray and outlined purple arrows in privacy settings are displayed against the apps and are described in the screenshot below.

bluebar stays forever even if stopupdating is called in iOS 11

I am accessing location services as 'always', i know all the changes made by apple in iOS 11. i updated my plist as required( added new key). I calling stopUpdatingLocation as soon as application goes to the background, but this blue still stays there saying your application is using location in the background. Top of that filled location icon in status bar changes to outlined location icon also. I am using Mapbox SDK as well. Is it a bug with iOS 11 or am i missing something? Just to give background information, i am fully aware how location services works. i tried almost all solutions to remove that blue bar, but it seems it is not happening.
I tried self.locationManager.allowsBackgroundLocationUpdates = false, self.locationManager = nil, self.locationManager.delegate = nil but nothing is helping.
It will be great if anyone can help me with this.
iOS 11 Beta release 5 has removed the unnecessary and intrusive Blue banner that displays for apps that used the location of the iPhone. Displaying the Blue bar for background location use is left to the app developer through a property.
#property(assign, nonatomic) BOOL showsBackgroundLocationIndicator
The users of the apps with location features are prompted to allow location permission first at the time of installing an app and then periodically prompted for apps that use location in the background continuously. The location use indicator arrow with three different shades is another mechanism for users to know if the location service is in use. Therefore an always appearing blue banner is unnecessary and Apple has recognized it.

iOS Location status message on background doesn't show

I've implemented a CLLocation like waze to get the users location on background mode, I want to show the bar like "incall" showing that I'm getting the location.
I don't know why the bar doesn't show, I have in the info.plist this
Key : NSLocationAlwaysUsageDescription.
I assume you are talking about the blue "navigation" bar that appears under the status bar.
That only appears when an app is being used for navigation. An app that simply gets location in the background does not show the blue bar (or any other color bar).
If you requestAlwaysAuthorization the bar will not appear (because you could use location services at any time). The bar appears only when you requestWhenInUseAuthorization and the app asks to keep receiving location updates while in the background.
See the documentation for requestWhenInUseAuthorization (emphasis added):
If the user grants “when-in-use” authorization to your app, your app
can start most (but not all) location services while it is in the
foreground. (Apps cannot use any services that automatically relaunch
the app, such as region monitoring or the significant location change
service.) When started in the foreground, services continue to run in
the background if your app has enabled background location updates in
the Capabilities tab of your Xcode project. Attempts to start location
services while your app is running in the background will fail. The
system displays a location-services indicator in the status bar when
your app moves to the background with active location services.
This line about the "location-services indicator" is notably absent from the documentation for requestAlwaysAuthorization.

Blue banner '%MyApp% is Using Your Location' for app that uses location services only when active

In my app I'm updating user location every time when app becomes active. I stop CLLocationManager once updated location is received or in applicationWillResignActive:.
In Info.plist there is a NSLocationWhenInUseUsageDescription with appropriate description.
If app is activated and then immediately moved to background, blue banner saying that '%MyApp% is Using Your Location' appears for less then a second. This banner gets hidden as soon applicationWillResignActive: is called.
I've noticed the same problem in Google Maps, but not in Apple Maps.
Is there a way to get rid of this banner completely? Is there anything else I should do to make iOS happy? I do not want it to freak out my users and prevent them from using cool features that require location.
You have probably set location as Background mode in your info.plist. If you remove that, then the blue bar won't appear anymore.
Or, you can use requestAlwaysAuthorization instead of requestWhenInUseAuthorization on CLLocationManager (and provide the related NSLocationAlwaysUsageDescription in the info.plist file), and then it will not appear either.
In my case, my app is using location in the background in some cases, and I would like the blue bar to appear when that is the case. But I do not want it to appear when exiting the app without location in background. As far as I know that is not possible to achieve (I've asked about it here).
EDIT: Note that starting with iOS-9, you can make sure that the blue bar only appears when the user actually wants the app to use the location in the background. See this answer.
If you want to get access to the user's location with CLLocationManager, the app will need to show that banner and the user will need to press "Allow". If they don't do that, your location manager won't be able to detect the user's location.
Apple's Maps is a special case because it's a first party app.

Resources