One reason is that advertisement SDKs (software developer kits) often require it or the ads won't display. This doesn't mean that location services have to be turned ON for an app - just that if the file that contains the list of capabilities required by the app (which is then reflected to the store) doesn't contain that capability, ads won't display, and developers won't get any money. It bugs the snot out of me as a developer - I don't want people suspicious of my apps because they ask for certain services that I'm not using, simply because the ad control requires it.
All apps that use location services MUST (in order to be certified):
1. Notify the user and ask his permission to use location service on the first time that location services are used (after that, if permission granted, no further prompt needed)
2. Have an easily discoverable way of turning location services off.
Here's one for you - Microsoft's own ad control requires:
ID_CAP_IDENTITY_USER
ID_CAP_MEDIALIB_PHOTO
ID_CAP_PHONEDIALER
Why User Identity? I have no idea. (edit - see below) Media Library - Photo? No idea (edit - see below). Phone Dialer I can understand. Advertisers would want you to be able to tap an ad, see their page, and if they've put a phone number in the ad, tap the phone number to call it. The others, I have no idea why. Thankfully that doesn't require location, but I use adRotator, an ad control that allows you to not only rotate between ad services (say one service has no ads to serve for a region), but also lets you configure your ad services remotely without putting out an update to the app (it does this by checking for a file on your server, and that file tells it what ads to use). That control requires the above capabiliteis, but also these:
ID_CAP_IDENTITY_DEVICE
ID_CAP_NETWORKING
ID_CAP_WEBBROWSERCOMPONENT
I can understand the webbrowser component - they wanted to use the common web browser control that we devs can put in our apps, so the ads can display that way. I can understand device identity (a lot more than user identity), because they may not want to show the same ad to the same user more than x times, and the user is most likely going to be using the same device. And networking, of course - how else do you serve an ad. Why doesn't Microsoft's control require that? They must be doing some behind-the-scenes magic that others don't have access to, in order to serve up ads without this capability.
While some ads can be used without location services, if the developer uses location services, and sends that information to the ad provider, the ad provider can serve up more targeted ads. A guy in Bangledesh doesn't want to see an ad for Whataburger, right? Well, he wouldn't anyway, because the phone does tell the service what region it is in.... but if you're in the US, on the West Coast, I'm sure you're not going to care about an ad for Krispy Kreme, right? So a US region phone would use location services to filter out ads that are not applicable to the area (this is done by the advertiser controlling what area he wants his ads to be displayed in - Krispy Kreme saying that they only want their ads shown to the Southeast).
Oh - and once an app adds the networking capability, it must have a privacy policy that is easily discoverable. So any app that accesses the web must have one, either in the app or on a server, with a way to access it from within the app.
So, yes, there are a lot of apps that use services where you wouldn't think that it is necessary, but this is one reason that often goes unexplained. I hope this helps.
EDIT: I just found a reference that says why the Microsoft ad control uses user identity and media library.
User identity incorporates a "small set of coarse demographics" in order to help improve ad relevance.
The media library capability is required in case there is a coupon in an ad, you can tap it and save it to the media library for later use.
Last edited by hopmedic; 08-23-2013 at 09:01 AM.
06-11-2013 10:12 PM