Location permission alert on iPhone with PhoneGap

IphoneCordovaCore Location

Iphone Problem Overview


How do you change the string on the alert saying:

> (Appname/whatever it is) would like to use your current location

Of course, I only want to change the appname part. Because when you use the PhoneGap framework, the string is very ugly, something like this:

> /var/mobile/Applications/157EB70D-4AA7-826E-690F0CBE0F/appname.app/www/index.html

Someone having an idea?

Iphone Solutions


Solution 1 - Iphone

You need to do the geolocation after the device is ready. The following Jquery code, for example, will geolocate without that nasty alert:

$(function(){
  document.addEventListener("deviceready", onDeviceReady, false);
})

function onDeviceReady() {
  navigator.geolocation.getCurrentPosition(onSuccess, onError);		
}

function onSuccess(position) {
  // your callback here 
}

function onError(error) { 
  // your callback here
}

Solution 2 - Iphone

On phonegap 3.0 the answer by Pius Uzamere needs to be followed AND the plugin installed.

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

otherwise you will get the double permission request.

Solution 3 - Iphone

I just followed the documentation and solved it. Open the terminal and cd to your project and enter following command. $ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

Also add this in your config.xml

<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature>

It will solve this issue. :)

Source: http://docs.phonegap.com/en/3.0.0/cordova_geolocation_geolocation.md.html#The%20Command-line%0AInterface

Solution 4 - Iphone

Although this question is much older, I found similar questions here and here.

For my resolution, I had to add NSLocationWhenInUseUsageDescription to the .plist file. However, I suppose since my geolocation plugin was out of date, I had to update it first. Then I had to remove/add the Cordova iOS platform. Finally, I added NSLocationWhenInUseUsageDescription to the .plist file.

First, remove/add the geolocation plugin:

cordova plugin rm org.apache.cordova.geolocation
cordova plugin add org.apache.cordova.geolocation

Second, remove/add the iOS platform:

cordova platform rm ios
cordova platform add ios

Last, add NSLocationWhenInUseUsageDescription to the .plist. Open /platforms/ios/{project}/{project}-Info.plist and add the following:

<key>NSLocationWhenInUseUsageDescription</key>
<string>[App Name] would like to access your location when running and displayed.</string>

See this iOS Developer Library link for detailed information regarding NSLocationWhenInUseUsageDescription versus NSLocationAlwaysUsageDescription versus NSLocationUsageDescription.

Solution 5 - Iphone

Finally fixed the issue.

IN the index.html just move your cordova.js up

<script src="cordova.js"></script>

as the first js file to be included (especially make sure it is above maps include js). This will make sure that the prompt shows only once.

No other codejs or ondeviceready is needed.

Solution 6 - Iphone

After looking for solution i've founded, just add a variable when you add the plugin location like this line

cordova plugin add cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="your usage message"

Solution 7 - Iphone

None of the above answers worked for me. My location request was already firing on deviceready. Adding the following to config.xml fixed the issue:

<gap:plugin name="org.apache.cordova.core.geolocation" />

Solution 8 - Iphone

To solve the issue I have to run cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git which adds (automatically) to the config.xml the following:

<feature name="Geolocation">
     <param name="ios-package" value="CDVLocation" />
</feature>

To get things working I have to put also this lines into the config.xml:

<plugins>
        <plugin name="Device" value="CDVDevice" />
        <plugin name="Logger" value="CDVLogger" />
        <plugin name="Compass" value="CDVLocation" />
        <plugin name="NetworkStatus" value="CDVConnection" />
        <plugin name="Debug Console" value="CDVDebugConsole" />
        <plugin name="Geolocation" value="CDVLocation" />
        <plugin name="SplashScreen" value="CDVSplashScreen" />
        <plugin name="Battery" value="CDVBattery" />
        <plugin name="Globalization" value="CDVGlobalization" />
    </plugins>

Hope it could be helpful.

Solution 9 - Iphone

After making sure my geolocation request was called after the device was ready, making sure the geolocation plugin is correctly installed and configured, I was still receiving the unsightly popup.

I resolved it by moving and referencing my cordova.js file and cordova_plugins.js files into the root directory of my application (they were originally in a subfolder), so the path to cordova.js would be:

<script src="cordova.js"></script>  

I feel this should be included in the documentation (maybe it is, but I haven't managed to find it)

Solution 10 - Iphone

  • Just by including "cordova.js" file in your html file where you are accessing this location will resolve this issue. NOTHING FANCY REQUIRED.

Solution 11 - Iphone

I'm late to the party here, but will answer the question for reference. The answer is to use the geolocation functions found in phonegap.js which is included with Phonegap. You will be able to find such instructions on the Phonegap site at http://www.phonegap.com.

If you use navigator.geolocation, you are using the default Safari geolocation system. This happens as PhoneGap works by running your pages effectively in a Safari instance. If you include phonegap.js into your site, you can use a separate geolocation method exposed by PhoneGap's Objective-C code, which will present the behaviour seen in other apps where it asks for permission from [your app name].

Solution 12 - Iphone

  1. modify Location.m in PhoneGapLib project. replace all references of navigator.geolocation with navigator_geo

  2. Copy phonegap.js to phonegap2.js and put in root of app. I have now learned that every time I build my application and load it onto device or simulator, the phonegap.js file is being regenerated. OK. Well I need to modify it so lets just use another one and deal with the hassles of upgrading in the future.

  3. Modify the line (in phonegap2.js) that creates the constructor for the navigator.geolocation on 626 to be ... if (typeof navigator._geo == "undefined") navigator._geo = new Geolocation();

  4. Now in your HTML whenever you want to use the PHONEGAP GPS stuff, you can reference it with navigator._geo.getCurrentPosition or similar

  5. Enjoy the ONE, and CLEAN, location alert permission without revealing to your users your intelligence to use PhoneGap and build an app with HTML/JS.

*** CAVEAT AND PLEASE HELP! ***

If I run the watchPosition function, I will get the first location update with all sorts of stats. There after, It will always report an error. I assume this sucks for this 30 second time of getting accurate GPS on these things?

http://groups.google.com/group/phonegap/browse_thread/thread/8067c2037816a9ad

Solution 13 - Iphone

I followed all the instructions and it still failed. In the end I played around with the PhoneGap demo and found the final solution:

  1. Move all the js files and html files into the same folder (not even sub-folder). Congratulations! Problem solved, no permission alert any more : )

  2. BTW, You'd better use a " setTimeout(function(){utility.getGeoData();},1000);" I found "document.addEventListener("deviceready", utility.getGeoData(), false);" not work for me.

Hope that helps when you find no solution above : )

Good luck!

Solution 14 - Iphone

Since I was struggling for days now with the same problem and finally found the solution, I decided to share it with anyone who still was not able to fix it.

The solution is simple: The geolocation plugin was missing in the plugins directory within the www directory, even though I added the plugin via the phonegap command line interface AND the plugin files were in the /Plugins directory. So you only have to copy the missing files into /www/plugins and you are done. Just simple as that.

If anyone needs the missing files: http://d.pr/f/xqhq

btw: i am using cordova 3.2.0.

I hope this works for you as well!

Solution 15 - Iphone

Phoengap/Cordova version 3.5 here.

Similar to Manuel's answer above but this time the plugin does not install in the platforms/ios/[appname]/Plugins folder.

The fix for me was to just manually create a new folder for the plugin in the ../platforms/ios/[appname]/Plugins folder > then rename it to org.apache.cordova.geolocation > then copy the .h and .m files of the plugin into it.

You can find the .m and .h files for the geoLocation plugin in the [root]/plugins/org.apache.cordova.geolocation/src/ios directory.

Solution 16 - Iphone

Got this error (and a lot of others) after upgrading Cordova from 3.6 to 4.3.

I think there is some fails in the upgrade process and the only working solution for me was cordova platform rm ios then cordova platform add ios

/!\ You will lost all your ios project settings and you need to reupload splash and icons.

Solution 17 - Iphone

In my case, I am using Cordova/Ionic and have experienced the same problem. That's because of the code before device is ready. I have simply wrapped the code with document.addEventListener on "deviceready". For example:

document.addEventListener("deviceready", function () {
  $cordovaGeolocation.getCurrentPosition(options).then(function(position){
      ...your code here...
    });
});

Then the additional message does not appear.

Solution 18 - Iphone

"Move all the js files and html files into the same folder (not even sub-folder). Congratulations! Problem solved, no permission alert any more : )" Like Caleb says works for me, well only moving the cordova.js file to the root and adding the plugin to config.xml

Solution 19 - Iphone

What is the Bundle display name of your project?

Try changing manually from the default value ${PRODUCT_NAME} and see..

That Permission to use location alert picks your bundle display name only!!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionbolmaster2View Question on Stackoverflow
Solution 1 - IphonePius UzamereView Answer on Stackoverflow
Solution 2 - IphoneRobert VergeView Answer on Stackoverflow
Solution 3 - IphoneShozab HasanView Answer on Stackoverflow
Solution 4 - Iphonetrailing slashView Answer on Stackoverflow
Solution 5 - IphoneToughPalView Answer on Stackoverflow
Solution 6 - Iphonefsalazar_schView Answer on Stackoverflow
Solution 7 - IphoneKyle SussView Answer on Stackoverflow
Solution 8 - IphonehalbanoView Answer on Stackoverflow
Solution 9 - IphoneBrett GregsonView Answer on Stackoverflow
Solution 10 - IphonemahipalzView Answer on Stackoverflow
Solution 11 - IphoneTim RogersView Answer on Stackoverflow
Solution 12 - IphoneLuke OllettView Answer on Stackoverflow
Solution 13 - IphoneBingoView Answer on Stackoverflow
Solution 14 - IphoneManuelView Answer on Stackoverflow
Solution 15 - IphoneChris LambrouView Answer on Stackoverflow
Solution 16 - IphoneTibView Answer on Stackoverflow
Solution 17 - IphoneJongsoo ChoiView Answer on Stackoverflow
Solution 18 - IphonelgomezcView Answer on Stackoverflow
Solution 19 - IphoneprakashView Answer on Stackoverflow