IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

API geoportail avec phoneGap


Sujet :

IGN API Géoportail

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut API geoportail avec phoneGap
    Bonjour,

    j'ai un site web sur lequel j'utilise l'API Géoportal javascript avec une clé de production rattachée à mon nom de domaine : www.marseilleprovence.net.

    Ce site étant optimisé pour un affichage mobile, j'ai décidé d'utiliser phoneGap pour faire de ce site une application mobile, sans autres modifications de code, et teste actuellement la chose sur un iPhone.

    Apparemment, je n'ai pas accès au service Geoportail depuis mon application, il doit surtout y avoir notamment un problème de clé.
    Et je comprends le problème, mon application n'est pas une web app, ni une application native.

    Existe-t-il à l'heure actuelle une solution pour faire fonctionner la librairie javascript depuis phoneGap ?

    Par avance merci de vos réponses

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 442
    Points : 502
    Points
    502
    Par défaut
    La question est qu'est-ce que renvoie ton application, un user-agent constant ?
    Si cela est le cas, alors il suffit de demander à ce que la sécurisation de ta clé ne soit pas par referer(=URL) mais par user-agent. Liste des contacts IGN sur http://professionnels.ign.fr/contacts .

    Sinon, tu peux essayer de forcer l'envoi d'un referer ; ou encore une autre possibilité, sécuriser ta clé avec un identifiant et un mot de passe (mais attention à bien la cacher).

  3. #3
    Membre habitué Avatar de nicolas.h
    Homme Profil pro
    Géomètre-programmeur
    Inscrit en
    Septembre 2012
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Géomètre-programmeur
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2012
    Messages : 122
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Andrej Voir le message
    Bonjour,

    j'ai un site web sur lequel j'utilise l'API Géoportal javascript avec une clé de production rattachée à mon nom de domaine : www.marseilleprovence.net.

    Ce site étant optimisé pour un affichage mobile, j'ai décidé d'utiliser phoneGap pour faire de ce site une application mobile, sans autres modifications de code, et teste actuellement la chose sur un iPhone.

    Apparemment, je n'ai pas accès au service Geoportail depuis mon application, il doit surtout y avoir notamment un problème de clé.
    Et je comprends le problème, mon application n'est pas une web app, ni une application native.

    Existe-t-il à l'heure actuelle une solution pour faire fonctionner la librairie javascript depuis phoneGap ?

    Par avance merci de vos réponses
    Oui il en existe une, des tutoriels sont en cours de rédaction sur ce sujet. Ceci reprenant l'exemple suivant:
    http://api.ign.fr/tech-docs-js/examp...p_mobile1.html

    En avant première voici donc ces tutoriels même s'ils ne sont pas totalement terminés:
    http://api.ign.fr/tutoriels-phonegap

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci pour ces éléments de réponse.

    Développant mon application sous iOS, je me suis inspiré du tuto Android pour faire de même.

    J'ai placé mes ressources en local et je pointe vers le fichier d'autoconfig dans l'appel "Geoportal.GeoRMHandler.getConfig(['maCle'], null, monfichier.js";

    Il a tout de même fallu chercher comment forcer le user-agent dans les fichiers phoneGap, et j'envoie donc "User-Agent : Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B141 (154564048) / iOS".

    Lorsque je lance la carte, l'API affiche bien les POIs demandés ainsi que le tracé gpx fourni, mais je n'ai pas le fond de carte, les tuiles n'ont pas l'air de se télécharger.

    J'ajoute que je n'ai pas changé la façon d'initialiser mon viewer par rapport à mon site internet.

    Dans la fonction qui lance la carte, j'ai :

    function loadIGN()
    {
    var typeViewer = 'Geoportal.Viewer.Mobile';

    if (checkApiLoading('loadIGN();',['OpenLayers','Geoportal','Geoportal.Viewer', typeViewer]) === false) {
    return;
    }

    Geoportal.GeoRMHandler.getConfig([IGNkey], null,'js/autoconfigIGN.js', {
    onContractsComplete: initMapIGN
    });
    }

    et dans mon initMapIGN :


    function initMapIGN()
    {
    var options = {
    mode:'normal',
    territory:'FXX'
    };

    mapIGN = new Geoportal.Viewer.Simple('mapList', OpenLayers.Util.extend(
    options,
    window.gGEOPORTALRIGHTSMANAGEMENT===undefined? {'apiKey':IGNkey} : gGEOPORTALRIGHTSMANAGEMENT)
    );

    if (!mapIGN) {
    OpenLayers.Console.error(OpenLayers.i18n('new.instance.failed'));
    log('new.instance.failed');
    return;
    }

    mapIGN.getMap().addControl(new Geoportal.Control.PanPanel(), new OpenLayers.Pixel(5,120));


    // ----- Layers

    mapIGN.addGeoportalLayers(['GEOGRAPHICALGRIDSYSTEMS.MAPS'],
    {
    'GEOGRAPHICALGRIDSYSTEMS.MAPS':{visibility:true},
    global:{opacity:1.0}
    }
    );
    }

    Merci de vos retours.

  5. #5
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par Andrej Voir le message
    Il a tout de même fallu chercher comment forcer le user-agent dans les fichiers phoneGap, et j'envoie donc "User-Agent : Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B141 (154564048) / iOS".
    La clef est paramétrée pour un User-Agent spécifique. Par défaut, lorsqu'on crée son contrat, c'est "iOS" ou "Android". Du coup, ton user-agent n'est pas reconnu pour ta clef et les tuiles ne montent pas. Il faut donc que tu mettes en accord le UA que tu envoies et celui de ta clef. Pour cela, je t'invite à consulter cette discussion :

    http://www.developpez.net/forums/d13...e/#post7373755

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Pensez-vous que votre api puisse réagir à un élément de mon user-agent, genre repérer que dans celui il y aurait "xxxLeNomChoisi" ?

    Parce que d'après mes tests hier, phoneGap repose beaucoup sur le user-agent, et après avoir tenté de n'envoyer que "iOS", phoneGap ne fonctionnait plus, il refusait de charger mes pages html.

    De plus, mon application étant destiné à être publié sur iOS, Android et windows mobile, ce seront autant de user-agent potentiellement différents...

  7. #7
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par Andrej Voir le message
    Pensez-vous que votre api puisse réagir à un élément de mon user-agent, genre repérer que dans celui il y aurait "xxxLeNomChoisi" ?
    Non. Le user-agent transmis doit être exactement le même que celui utilisé pour sécuriser la clef.


    Parce que d'après mes tests hier, phoneGap repose beaucoup sur le user-agent, et après avoir tenté de n'envoyer que "iOS", phoneGap ne fonctionnait plus, il refusait de charger mes pages html.

    De plus, mon application étant destiné à être publié sur iOS, Android et windows mobile, ce seront autant de user-agent potentiellement différents...
    Le User-Agent utilisé pour sécurisé la clef n'a pas de rapport avec la plateforme utilisée. Le mécanisme est simplement le suivant :

    Les requêtes envoyées par l'application aux services de la plateforme du Géoportail doivent contenir une entête HTTP "User-Agent" ayant pour valeur la même que celle utilisée pour sécuriser la clef (définie lors de la création du contrat ou modifiée après coup via une demande à l'IGN)

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    De quelle requête http me parlez-vous ?

    Vous avez tout mon code ci-dessus, vous voyez bien que je ne fais pas spécifiquement de requête hhtp, et que c'est votre API en local qui se charge d'appeler votre serveur… je ne vois pas comment avoir la main dessus ?

    La seule chose évidente sur laquelle j'ai la main est la webview global de l'application dont se sert aussi phoneGap pour charger mes pages html. Hors si je force le user-agent de cette webview pour ne mettre que iOS, c'est tout phoneGap qui refuse de fonctionner. De plus, le delegate de cette webview réagit uniquement aux pages html chargées, pas aux éventuelles requêtes ajax qui pourraient être faîtes.

    Du coup, que faire ? Avez-vous déjà fait fonctionner votre API js avec phoneGap sur iPhone ? Si oui, vous devriez avoir le bout de code qui me manque, comme celui indiqué dans le tuto Android : "this.appView.getSettings().setUserAgentString("Android");".

    Par avance merci

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Désolé de vous importuner avec tant d'incompréhension mais j'avoue ne pas saisir…

    Je ne demande pas mieux que de forcer mes entêtes http, mais je ne les vois pas.

    En effet, d'après le tuto Android, une fois que toutes les ressources ont été mises en local, vous demandez à paramètrer la config :
    Geoportal.GeoRMHandler.getConfig([IGNkey], null,'js/autoconfigIGN.js', {
    onContractsComplete: initMapIGN
    });
    }

    Et j'imagine ensuite que l'appel aux tuiles se fait lors de l'ajout de la couche :

    mapIGN.addGeoportalLayers(['GEOGRAPHICALGRIDSYSTEMS.MAPS'],
    {
    'GEOGRAPHICALGRIDSYSTEMS.MAPS':{visibility:true},
    global:{opacity:1.0}
    }
    );
    }

    C'est ainsi que je procède sur mon site. Du coup, je ne vois pas comment stipuler un entête la-dedans.

    A moins que ce ne soit pas la bonne façon de procéder ?

    Par avance merci

  10. #10
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    l'idée est bien de modifier l'entête User-Agent des requêtes HTTP émises par l'API-JS ; pas en modifiant le code javascript, mais en modifiant les caractéristiques de l'application dans sa partie "native".

    En effet, c'est bien le même principe que celui exposé dans le tuto phonegap-android qu'il faut appliquer pour l'environnement iOS. Je n'en suis pas un spécialiste, mais une recherche google m'a fait tomber sur les URLs suivantes :

    http://stackoverflow.com/questions/1...gap-user-agent
    http://stackoverflow.com/questions/8...ing-user-agent

    qui m'amènent à penser que la manipulation à faire tourne autour de ces lignes là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Your user agent", @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    à tester donc...

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    je viens de refaire un tour complet de la question, et je n'ai pas réussi à contourner le problème que j'avais précédemment identifié.

    A savoir qu'effectivement en iOS, il y a deux manières de forcer un user-agent. Celle que vous venez de citer (très simple mais qui a l'inconvénient d'être définitive) ou celle qui consiste à forcer l'entête http d'une requête.

    Il s'avère qu'aucune des deux n'a un impact sur le user-agent envoyé car dès le lancement de l'appli, le framework phonegap prend la main pour paramètrer son propre user agent en cache.

    Venant de passer 3 ans à développer sous iOS, je me suis senti de farfouiller dans toute la tambouille de phonegap pour forcer le user-agent en "iOS", avec succès. Le problème, sur quoi j'ai donc buté dès la semaine dernière, c'est que phoneGap ne fonctionne plus correctement. Ils doivent certainement vérifier si certains paramètres sont inclus dans le user-agent parce que le module ne parvient plus à charger certaines ressources. J'arrive bien à naviguer dans mon projet, mais il y a pas mal de bugs, notamment sur le lancement de l'API geoportail.

    D'après ce que vous me dîtes, vous n'avez pas eu l'opportunité de tester votre API js sous iOS. Peut-être un meilleur spécialiste que moi trouverait facilement une parade…

    Il y aurait toutefois d'autres solutions envisageables, notamment celle que j'ai très vite évoqué en demandant si vous ne pourriez pas baser vos tests sur une partie du user-agent et non sur la globalité ? Rajouter un suffixe personnalisé au user-agent n'est alors plus un problème au niveau de phonegap, et en terme de sécurité pour vous ça doit revenir au même.

    Sinon, ajouter la possibilité de personnaliser un entête http au sein même de l'API au niveau des requêtes javascript ?

    Par avance merci

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur Cartographe
    Inscrit en
    Juin 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Cartographe
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 84
    Points : 161
    Points
    161
    Par défaut Phonegap et API sur iOS
    Bonjour,

    Pour avoir testé il y a quelques temps sur iOS, la solution proposée par Gilles marche bien (tests effectués il y a 6 mois avec phonegap 2.3).

    @+

  13. #13
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par Andrej Voir le message
    Il y aurait toutefois d'autres solutions envisageables, notamment celle que j'ai très vite évoqué en demandant si vous ne pourriez pas baser vos tests sur une partie du user-agent et non sur la globalité ? Rajouter un suffixe personnalisé au user-agent n'est alors plus un problème au niveau de phonegap, et en terme de sécurité pour vous ça doit revenir au même.
    En fait j'ai été un peu trop péremptoire : après renseignements, notre infrastructure gère les user-agent "incomplets" à savoir, de type ".*MaChaine.*" : si l'application envoie un user Agent contenant "MaChaine", alors les tuiles monteront. Du coup, cela devrait résoudre ton problème.



    Sinon, ajouter la possibilité de personnaliser un entête http au sein même de l'API au niveau des requêtes javascript ?
    ça je pense que ça doit pouvoir se faire en surchargeant les classes adéquates d'OpenLayers.

  14. #14
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    ce sont mes premiers essais avec phoneGap, et je travaille actuellement sur la version 2.7.
    D'après ce que j'ai pu lire dans les forums sur les évolutions du framework, il s'avère que phoneGap prend la main sur la webView dès le lancement de l'appli.
    Et je confirme, d'après tous les tests que j'ai fait, que la traditionnel méthode pour changer le userAgent, la même que proposée par Gilles, n'a plus aucun effet.

    Pour parvenir à modifier le use-agent, voici ce que j'ai trouvé de plus propre :

    Dans la librairie Cordova, chercher la classe CDVViewController.m, et modifier la méthode (NSString*)userAgent comme suit,

    - (NSString*)userAgent
    {
    if (_userAgent == nil) {
    NSString* originalUserAgent = [CDVUserAgentUtil originalUserAgent];
    // Use our address as a unique number to append to the User-Agent.
    _userAgent = [NSString stringWithFormat:@"%@ (%lld)", originalUserAgent, (long long)self];
    }

    return [NSString stringWithFormat:@"%@ - iOS", _userAgent];

    //return _userAgent;
    }


    En ce qui concerne mon problème de tuiles, il faut croire que le problème est ailleurs puisque j'avais déjà fait cette motif il y a une semaine, et que vous confirmez que vos tests auraient du détecter la portion "iOS" de mon userAgent.

    Je m'interroge désormais sur l'utilisation du fichier d'autoConfig.

    Dans votre tuto Android, vous dîtes que celui-ci se récupère avec l'URL http://gpp3-wxs.ign.fr/votre_clé_api...egistry.regId1.
    Ce faisant, j'obtiens un code qui commence par : OpenLayers.Protocol.Script.registry.regId1({"http":{"status":200,"error":null},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ViewContext xmlns=\"http://www.opengis.net/context\"
    J'en ai déduis qu'il fallait mettre tout cela dans une fichier js, que j'inclus dans ma page html (<script type="text/javascript" src="js/autoconfigIGN.js"></script>) et que j'appelle dans l'init de l'API (Geoportal.GeoRMHandler.getConfig([IGNkey], null,'js/autoconfigIGN.js', {
    onContractsComplete: initMapIGN).

    Est-ce que cela vous semble correct ?

    Parce que dans le même temps, si je consulte le contrat lié à ma clé de développement, il y ait fait mention d'une url d'autoconfiq (http://gpp3-wxs.ign.fr/[IGNkey]/autoconf/?keys=[IGNkey]) qui elle renvoit du pur XML ???

    Etes-vous sûr qu'il ne manque rien dans mon code donné plus haut ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 442
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par Andrej Voir le message
    En ce qui concerne mon problème de tuiles, il faut croire que le problème est ailleurs puisque j'avais déjà fait cette motif il y a une semaine, et que vous confirmez que vos tests auraient du détecter la portion "iOS" de mon userAgent.
    ça dépend de l'user-agent renseigné ; en effet, le test *truc* est différent du *truc ou truc* ou de *.truc ou de truc.* ou de truc [égalité strict]. Il faudrait vérifié l'user-agent renseigné côté IGN.

  16. #16
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    D'après le contrat lié à ma clé de développement, le user-agent demandé semble être "iOS". Du coup, pouvez-vous me dire si la fait de rajouter "- iOS" à mon user-agent par défault est ce que vous attendez ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 442
    Points : 502
    Points
    502
    Par défaut
    Par ailleurs, il me semble qu'il faille éviter les URL en gpp3-wxs.ign.fr et préférer les wxs.ign.fr .

  18. #18
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par Andrej Voir le message
    En ce qui concerne mon problème de tuiles, il faut croire que le problème est ailleurs puisque j'avais déjà fait cette motif il y a une semaine, et que vous confirmez que vos tests auraient du détecter la portion "iOS" de mon userAgent.
    Non, la portion "iOS" du User-Agent ne sera détectée que si le User-Agent associé à la clef est : ".*iOS.*". Or, par défaut, lors de la souscription du contrat, celui-ci est strictement "iOS". Il faut donc s'adresser à contact.api@ign.fr pour demander à ce qu'il devienne ".*iOS.*".


    Je m'interroge désormais sur l'utilisation du fichier d'autoConfig.

    Dans votre tuto Android, vous dîtes que celui-ci se récupère avec l'URL http://gpp3-wxs.ign.fr/votre_clé_api...egistry.regId1.
    Ce faisant, j'obtiens un code qui commence par : OpenLayers.Protocol.Script.registry.regId1({"http":{"status":200,"error":null},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ViewContext xmlns=\"http://www.opengis.net/context\"
    J'en ai déduis qu'il fallait mettre tout cela dans une fichier js, que j'inclus dans ma page html (<script type="text/javascript" src="js/autoconfigIGN.js"></script>) et que j'appelle dans l'init de l'API (Geoportal.GeoRMHandler.getConfig([IGNkey], null,'js/autoconfigIGN.js', {
    onContractsComplete: initMapIGN).

    Est-ce que cela vous semble correct ?
    Pas tout à fait : il n'est pas nécessaire d'inclure le fichier js/autoconfigIGN.js dans la page. Celui-ci sera chargé lors de l'appel dans l'init de l'API.

    Parce que dans le même temps, si je consulte le contrat lié à ma clé de développement, il y ait fait mention d'une url d'autoconfiq (http://gpp3-wxs.ign.fr/[IGNkey]/autoconf/?keys=[IGNkey]) qui elle renvoit du pur XML ???
    oui, le service d'autoconfig renvoie par défaut du XML. Mais pour éviter des problème de same domain policy, on peut l'interroger en JSONP (cf. les paramètres output=json&callback=OpenLayers.Protocol.Script.registry.regId1), ce que fait l'API javascript.

    Etes-vous sûr qu'il ne manque rien dans mon code donné plus haut ?
    A priori, il ne manque rien.

  19. #19
    Membre habitué
    Homme Profil pro
    Ingénieur Cartographe
    Inscrit en
    Juin 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Cartographe
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 84
    Points : 161
    Points
    161
    Par défaut
    Bonjour,

    Citation Envoyé par Andrej Voir le message
    En ce qui concerne mon problème de tuiles, il faut croire que le problème est ailleurs puisque j'avais déjà fait cette motif il y a une semaine, et que vous confirmez que vos tests auraient du détecter la portion "iOS" de mon userAgent.
    Le plus simple pour tester le user-agent est d'installer l'addon Firefox "User Agent Switcher" (https://addons.mozilla.org/fr/firefo...gent-switcher/) qui vous permettra de tester différentes valeurs facilement dans votre navigateur et de vous assurer que celle que vous avez entré est la bonne...

    Pour le fichier d'autoConfig, en utilisant Firefox avec le user-agent correct vous devez voir passer l'interrogation du serveur (onglet réseau de firebug, une requête GET sur une adresse http://gpp3-wxs.ign.fr/MA_CLE/autoco...egistry.regId1).
    La requête est faite en JSONP, pas besoins de l'inclure dans un fichier js : c'est un fichier qui est chargé en ajax dans la fonction Geoportal.GeoRMHandler.getConfig.
    Le troisième argument correspond justement à ce fichier de config. Sur les exemples de l'API (http://api.ign.fr/tech-docs-js/examp..._template.txt&) il est laissé à null et donc calculé par la fonction mais on peut forcer à utiliser un fichier en local.
    NB : l'intérêt d'utiliser un fichier en local est de supporter le mode déconnecté (pratique sur un smartphone). On est donc assuré que l'application va se charger (même si les dalles ne se chargeront pas si on n'a pas de connexion). Pour des tests et si vous avez une connexion, vous pouvez laisser la valeur à null.
    Donc on peut forcer l'API a charger un fichier "mon_autoconf.txt" en local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Geoportal.GeoRMHandler.getConfig(["MA_CLE"], null, "mon_autoconf.txt", { onContractsComplete: myInitMap });
    J'espère avoir été assez clair...

    @+

  20. #20
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Suite à ma demande pour modifier le userAgent associé à ma clé selon le principe ".*iOS.*", il s'avère que je récupère désormais les tuiles correctement.

    J'ai également remarqué que la méthode classique (
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Your user agent", @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]
    fonctionne à partir du moment où on supprime l'application entièrement avant de la réinstaller.

    Du coup, une autre méthode est tout aussi acceptable si on ne veut pas toucher aux classes Cordova.

    Dans la class MainViewController.m, rajouter les ligne suivantes :

    - (void) webViewDidStartLoadUIWebView*)theWebView
    {
    NSString* userAgent = [theWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    userAgent = [NSString stringWithFormat:@"%@.*iOS*.", userAgent];

    NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:userAgent, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
    [dictionnary release];

    return [super webViewDidStartLoad:theWebView];
    }

    Dans mon cas, je suis en effet obligé d'utiliser .*iOS.* sinon il ne fonctionne plus correctement. Mais il est vrai que mon projet est très lourd, avec notamment des liens internes et des réécritures d'URL qui viennent certainement perturber la mécanique phoneGap.

    Merci encore pour tous vos messages

Discussions similaires

  1. Static Map avec API geoportail
    Par adaneels53 dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 02/04/2013, 12h09
  2. API Geoportail minimum en Flex avec Openscales
    Par mga_geo dans le forum IGN API Géoportail
    Réponses: 20
    Dernier message: 04/03/2010, 22h27
  3. Calcul d'itinéraire avec l'API GeoPortail
    Par spiau dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 21/07/2009, 19h08
  4. BCB6 & Mysql(api) :pb avec requete
    Par o_live dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/03/2005, 15h12
  5. Api mysql avec Devc++, erreur de compilation
    Par Viiince dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 15/06/2004, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo