2
votes

La géolocalisation ne fonctionne pas dans Ionic 4 Android

Pour obtenir la position actuelle sur l'appareil Android, j'ai utilisé le plug-in Ionic 4 Geolocation et a suivi les étapes indiquées dans la documentation. Lors de l'exécution de la commande Ionic CLI, ionic cordova, exécutez android --l --c, il lance l'application et affiche la boîte de dialogue d'autorisation de localisation. Mais il renvoie une erreur comme getCurrentPosition () et watchPosition () sont obsolètes sur les origines non sécurisées. Pour utiliser cette fonctionnalité, vous devriez envisager de changer votre application vers une origine sécurisée.

Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///polyfills.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///styles.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///cordova.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///vendor.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///main.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///assets/icon/favicon.png Failed to load resource: net::ERR_FILE_NOT_FOUND

Également après avoir lu les blogs et les fils de discussion dans le forum, je viens d'utiliser la commande cli ionic cordova exécuter Android (sans rechargement). Dans ce cas, l'application ne s'est pas chargée car les sources n'ont pas été chargées correctement.

{
   PositionErrorcode: 1message: "Only secure origins are allowed ."__proto__: PositionError
   home.page.ts:37Error getting location PositionError
}

J'ai également essayé de définir l'emplacement du GPS dans l'émulateur en utilisant le contrôle étendu de l'émulateur. Essayé sur un appareil réel et il a également de tels problèmes.


0 commentaires

3 Réponses :


-1
votes

L'accès à l'emplacement de l'utilisateur est obsolète avec un contexte non sécurisé (HTTP). Voir https: //www.chromium .org / Accueil / chrome-security / prefer-secure-origins-for-puissant-new-features .

Ce n'est un problème que lors de l'utilisation du rechargement en direct.

Cela fonctionnera ionic cordova build android


3 commentaires

Ça n'a pas marché. Comme mentionné dans ma question, si j'exécute la commande ionic cordova run android / ionic cordova build android, elle génère une erreur avec le titre Failed to load resource: net :: ERR_FILE_NOT_FOUND. Ce problème particulier ne concerne pas uniquement ce projet. Après la mise à niveau vers Ionic 4, je suis confronté à cela pour tous les projets. La même chose fonctionne si j'ajoute une option de rechargement. Merci.


Essayez ces deux liens, cela peut être utile stackoverflow.com/questions/35202759/… et stackoverflow.com/questions/37449936/...


Cela n'a pas aidé. La suppression de de index.html me donne une erreur "Erreur: aucun ensemble href de base. Veuillez fournir une valeur pour le jeton APP_BASE_HREF ou ajouter un élément de base au document". La modification de la configuration comme indiqué dans le lien n'a pas modifié le résultat.



0
votes

En deux sections, je vais essayer de vous aider, j'avais les deux mêmes problèmes, j'explique comment j'ai réussi à les " corriger ", peut-être que cela fonctionne pour vous aussi.

( 1) En ce qui concerne cette erreur:

this.geolocation.getCurrentPosition({ timeout: 30000 }).then((loc) => { ...

Honnêtement, je ne suis pas sûr de la cause exacte de cela, j'enquête toujours sur la cause racine, car j'ai eu ce problème, au cas où il retour. Étrangement, j'ai eu ce problème avec Android mais pas avec la plate-forme iOS. Ce que j'ai fait pour résoudre ce problème a été d'effacer tous les plugins et de les réinstaller:

   this.platform.ready().then(() => {
        this.geolocation.getCurrentPosition().then((loc) => {
              userLatitude  = loc.coords.latitude;
              userLongitude = loc.coords.longitude;
              map.flyTo({userLatitude:userLongitude}, MAX_ZOOM - 2, ZOOM_PAN_OPTIONS);
        }).catch((error) => {
            this.utils.error('Error getting location: ' + error.message);
        }); 
   };

Après cela, ces erreurs ont disparu.

(2 ) Concernant la géolocalisation

Oui, c'est vrai, j'ai lu la documentation sur les HTTP / HTTPs et j'ai également l'avertissement lors de l'utilisation via les navigateurs. Je ne faisais pas fonctionner la géolocalisation sur les appareils (iOS et Android), elle n'a tout simplement pas reçu de signal de vie après avoir écrit le code exactement comme la documentation de l'Ionic disait. Je pensais que c'était à cause du problème que la géolocalisation (HTTP / HTTPs) sur Chrome 50 .

J'ai donc compris que sur les appareils (Android et iOS), la géolocalisation fonctionnait correctement, SI vous obtenez ils ont démarré une fois que la plateforme est prête (ou utilisez le paramètre Timeout, comme alternative). Le code qui a permis aux appareils d'obtenir la position de l'utilisateur était le suivant:

// Inside your app's folder
$ rm -rf plugins 
// Just in case (I didn't do it, but who knows!) remove and add the platform again
$ ionic cordova platform remove android
$ ionic cordova platform add android

Je n'ai pas testé, mais une autre alternative pourrait être l'utilisation du code Timeout > paramètre sur la méthode:

Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///polyfills.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///styles.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///cordova.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///vendor.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///main.js Failed to load resource: net::ERR_FILE_NOT_FOUND
file:///assets/icon/favicon.png Failed to load resource: net::ERR_FILE_NOT_FOUND

Je pense qu'il y a beaucoup de variables, concernant tout le contexte, qui pourraient faire que cela fonctionne ou non. Dans mon cas, cela se passe de cette façon.


0 commentaires

0
votes
              this.geolocation.getCurrentPosition().then((resp) => {
                console.log(resp);
                // resp.coords.latitude
                // resp.coords.longitude
            }).catch((error) => {
                console.log('Error getting location', error);
            });
my problem had been calling twice. 
When you call repeatedly, the results may not come.
Make sure to call the function once.

0 commentaires