iOS Location status message on background doesn't show - ios

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.

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.

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

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 .

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.

How to disable or turn off iOS background location capability

On iOS 8, I can enable background location service with the capability set.
My app can receive location update in background mode, and when in background mode there is a blue bar on top to indicate the background location service is running.
The app is using Google MAP Service plus CLLocationManager.
Question:
Can I turn off background capability in run time?
Description
I want to enable / disable this background location service in app's setting page.
Somehow I've tried stopUpdatingLocation, but in background the blue bar still exists.
Thank you.
Oh, I found the answer.
When an app is enabled background location service and you want to disable it at run time, you will need:
Release all CLLocationManager in your app when entering background mode.
Set your GMSMapView .myLocationEnabled to NO

Resources