PnX-SI / gn_mobile_occtax

Application mobile pour la saisie dans le module Occtax de GeoNature
GNU General Public License v3.0
13 stars 4 forks source link

[Occtax2] - Probleme de récupération settings.json #130

Closed PNPyrenees closed 2 years ago

PNPyrenees commented 2 years ago

Version de l'application Version d'Occtax-mobile affectée par le bug : 2.0.0 Version de GeoNature utilisée : 2.9.1

Terminal et Version Android Marque et modèle du terminal : Samsung galaxy A40 Version d'Android : 11

Description du bug et comportement attendu Je n'arrive pas à faire fonctionner occTax V2 sur mon smartphone. J'essais de le tester sur un server de démo http://demo-geonature.parc-pyrenees.fr/geonature

J'ai bien déposé l'apk et le fichier settings.json dans geonature/backend/static/mobile/occtax/. L'url http://demo-geonature.parc-pyrenees.fr/geonature/api/gn_commons/t_mobile_apps fonctionne bien et l'apk a été installé sur le mobile.

Voici ce que j'ai dans gn_commons.t_mobile_app: 1,"OCCTAX","static/mobile/occtax/occtax-2.0.0-generic-release.apk",NULL,"fr.geonature.occtax2","2560"

Je lance l'appli sur le smartphone qui me demande de saisir l'url de GeoNature (http://demo-geonature.parc-pyrenees.fr/geonature) ainsi que l'url de taxhub (http://demo-geonature.parc-pyrenees.fr/taxhub). J'appuie sur la flèche retour puis l'appli reste sur la page "Synchronisation des données" mais rien ne se passe. Si je ferme et relance l'appli, j'apperçois furtivement un message d'erreur (portant sur settings_occtax2.json qui est introuvable) et je me retrouve sur la page paramètre à nouveau.

Vous auriez des pistes ? merci par avance

Logs 12:24:06.038 INFO: [fr.geonature.occtax.MainApplication] starting fr.geonature.occtax2... 12:24:06.039 INFO: [fr.geonature.occtax.MainApplication] logs directory: '/storage/emulated/0/Android/data/fr.geonature.occtax2/logs' 12:24:06.039 INFO: [fr.geonature.occtax.MainApplication] internal storage: 'MountPoint(mountPath=/storage/emulated/0, storageType=INTERNAL)' 12:24:06.040 INFO: [fr.geonature.occtax.MainApplication] external storage: 'MountPoint(mountPath=/storage/0010-A0E0, storageType=EXTERNAL)' 12:24:06.199 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from URI 'content://fr.geonature.occtax2.provider/settings/settings_occtax2.json'... 12:24:06.203 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax2.json'... 12:24:06.204 WARN: [fr.geonature.commons.settings.AppSettingsManagerImpl] '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax2.json' not found 12:24:06.205 WARN: [fr.geonature.commons.settings.AppSettingsManagerImpl] failed to load 'settings_occtax2.json' 12:24:06.227 INFO: [fr.geonature.occtax.ui.home.HomeActivity] failed to load settings 12:24:06.760 INFO: [fr.geonature.datasync.packageinfo.worker.CheckInputsToSynchronizeWorker] available inputs to synchronize: 0

camillemonchicourt commented 2 years ago

Potentiellement en lien avec https://github.com/PnX-SI/gn_mobile_occtax/issues/129 ?

PNPyrenees commented 2 years ago

Je ne sais pas car la synchro ne fonctionne pas de mon côté. Le fichier settings n'est pas descendu sur le smartphone (si j'ai bien compris on doit le trouver dans Androis/data/fr.geonature.occtax2/ et il doit être renommé settings_occtax2.json) Et j'avais le même problème avec la version debug.

JeromeMaruejouls commented 2 years ago

J'ai observé le même comportement sur la v1 : il me semble que cela se produit quand il y a plusieurs fichiers json sur le serveur (j'avais mis un fichier de sauvegarde) : l'appli mobile refuse de télécharger automatiquement le json. solution temporaire : copier le fichier à la main sur le téléphone, ou sinon, ne laisser qu'un seul fichier json sur le serveur dans le repertoire d'occtax_mobile.

PNPyrenees commented 2 years ago

Je n'ai malheureusement qu'un seul fichier json sur le serveur dans geonature/backend/static/mobile/occtax/

J'ai testé de copier (et renommer) le settings.json sur le smartphone. Ca semble mieux mise à part qu'il me retourne une erreur d'authentification... Les logs semblent peu bavarde sur le sujet...

JeromeMaruejouls commented 2 years ago

Etrange. Pour moi, ne laisser que l'apk et le fichier settings.json dans le repertoire mobile/occtax du serveur avait résolu ce problème de récupération de conf.

camillemonchicourt commented 2 years ago

L'application mobile ne se soucie pas du nom du fichier sur le serveur GeoNature ou autre, elle n'interroge que ce que renvoie la route de l'API (api/gn_commons/t_mobile_apps) pour générer localement son fichier de configuration stocké sur l'appareil mobile.

camillemonchicourt commented 2 years ago

Corrigé dans la 2.0.0 dont l'APK a été remplacée. Le soucis était lié au changement du nom du package, similaire à https://github.com/PnX-SI/gn_mobile_occtax/issues/129.

camillemonchicourt commented 2 years ago

Le fichier sur le serveur doit bien se nommer settings.json, il est mis à disposition par l'API de GeoNature. L'application mobile interroge la route de l'API /api/gn_commons/t_mobile_apps et créé le fichier settings_occtax.json localement.

Voir aussi les nouveaux schémas du workflow dans la documentation : https://github.com/PnX-SI/gn_mobile_occtax#documentation

PNPyrenees commented 2 years ago

Après l'installation du nouvel apk (après vidage mémoire + désinstallation ancienne version + redémarrage smartphone) et de la modification dans la table gn_commons.t_mobile_apps : image

Le problème persiste !

Logs 09:25:34.484 INFO: [fr.geonature.occtax.MainApplication] starting fr.geonature.occtax2... 09:25:34.486 INFO: [fr.geonature.occtax.MainApplication] logs directory: '/storage/emulated/0/Android/data/fr.geonature.occtax2/logs' 09:25:34.487 INFO: [fr.geonature.occtax.MainApplication] internal storage: 'MountPoint(mountPath=/storage/emulated/0, storageType=INTERNAL)' 09:25:34.489 INFO: [fr.geonature.occtax.MainApplication] external storage: 'MountPoint(mountPath=/storage/0010-A0E0, storageType=EXTERNAL)' 09:25:34.810 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from URI 'content://fr.geonature.occtax2.provider/settings/settings_occtax.json'... 09:25:34.816 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json'... 09:25:34.818 WARN: [fr.geonature.commons.settings.AppSettingsManagerImpl] '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' not found 09:25:34.824 WARN: [fr.geonature.commons.settings.AppSettingsManagerImpl] failed to load 'settings_occtax.json' 09:25:34.841 INFO: [fr.geonature.occtax.ui.home.HomeActivity] failed to load settings 09:25:35.188 INFO: [fr.geonature.datasync.packageinfo.worker.CheckInputsToSynchronizeWorker] available inputs to synchronize: 0

JeromeMaruejouls commented 2 years ago

Avez vous ajouté l'autorisation Stockage à l'application ? (raccourci vers les permissions Android disponible dans le menu de configuration de l'appli)

PNPyrenees commented 2 years ago

oui...

PNPyrenees commented 2 years ago

J'ai configuré l'appli mobile pour pointer vers un autre serveur en 2.9.2. Il y a du mieux, après la configuration, il me demande de m'authentifier. Je rentre login et mot de passe, il me dit que l'authentification est réussi mais retourne sur l'interface d'authentification (et ça boucle...)

Bon, déjà on sais que j'ai un problème avec mon serveur de démo en 2.9.1 mais tout n'est pas encore fluide...

PNPyrenees commented 2 years ago

Logs 10:05:56.809 INFO: [fr.geonature.occtax.MainApplication] starting fr.geonature.occtax2... 10:05:56.810 INFO: [fr.geonature.occtax.MainApplication] logs directory: '/storage/emulated/0/Android/data/fr.geonature.occtax2/logs' 10:05:56.811 INFO: [fr.geonature.occtax.MainApplication] internal storage: 'MountPoint(mountPath=/storage/emulated/0, storageType=INTERNAL)' 10:05:56.813 INFO: [fr.geonature.occtax.MainApplication] external storage: 'MountPoint(mountPath=/storage/0010-A0E0, storageType=EXTERNAL)' 10:05:57.060 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from URI 'content://fr.geonature.occtax2.provider/settings/settings_occtax.json'... 10:05:57.085 INFO: [fr.geonature.occtax.ui.home.HomeActivity] app settings successfully loaded 10:05:57.172 INFO: [fr.geonature.datasync.sync.DataSyncViewModel] starting local data synchronization... 10:05:57.212 INFO: [fr.geonature.commons.data.DatabaseModule] loading local database '/storage/emulated/0/Android/data/fr.geonature.occtax2/databases/data.db'... 10:05:57.311 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:05:57.312 WARN: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] undefined app settings to update from 'fr.geonature.occtax2' 10:05:57.371 INFO: [fr.geonature.datasync.packageinfo.worker.CheckInputsToSynchronizeWorker] available inputs to synchronize: 0 10:05:57.424 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] starting local data synchronization from 'https://gnpyr.brgm-rec.fr/geonature' (with additional data: true)... 10:05:57.434 INFO: [fr.geonature.datasync.sync.DataSyncViewModel] no periodic synchronization configured: abort 10:05:57.462 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] synchronize dataset... 10:05:57.561 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:05:57.570 INFO: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] updating app settings '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' 10:05:57.585 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] local data synchronization finished with failed tasks in 202ms 10:05:57.621 INFO: [fr.geonature.occtax.ui.home.HomeActivity] not connected (HTTP error code: 401), redirect to fr.geonature.datasync.ui.login.LoginActivity 10:05:57.798 INFO: [fr.geonature.datasync.settings.DataSyncSettingsFileDataSourceImpl] loading data sync settings from '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json'... 10:05:57.889 INFO: [fr.geonature.occtax.ui.home.HomeActivity] reloading settings after update... 10:05:57.891 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from URI 'content://fr.geonature.occtax2.provider/settings/settings_occtax.json'... 10:05:57.925 INFO: [fr.geonature.occtax.ui.home.HomeActivity] app settings successfully loaded 10:05:57.999 INFO: [fr.geonature.datasync.sync.DataSyncViewModel] starting local data synchronization... 10:05:58.025 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:05:58.032 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:05:58.038 INFO: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] updating app settings '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' 10:05:58.047 INFO: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] updating app settings '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' 10:05:58.104 INFO: [fr.geonature.datasync.sync.DataSyncViewModel] no periodic synchronization configured: abort 10:05:58.128 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] starting local data synchronization from 'https://gnpyr.brgm-rec.fr/geonature' (with additional data: true)... 10:05:58.180 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] synchronize dataset... 10:05:58.184 INFO: [fr.geonature.datasync.packageinfo.worker.InputsSyncWorker] no inputs to synchronize for 'fr.geonature.occtax2' 10:05:58.243 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:05:58.258 INFO: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] updating app settings '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' 10:05:58.313 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] local data synchronization finished with failed tasks in 201ms 10:06:08.203 INFO: [fr.geonature.datasync.auth.AuthManagerImpl] successfully authenticated, login expiration date: Wed Mar 30 09:06:09 GMT+02:00 2022 10:06:08.266 INFO: [fr.geonature.datasync.sync.DataSyncViewModel] starting local data synchronization... 10:06:08.363 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:06:08.383 INFO: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] updating app settings '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' 10:06:08.412 INFO: [fr.geonature.datasync.packageinfo.PackageInfoRepositoryImpl] updating settings for 'fr.geonature.occtax2'... 10:06:08.426 INFO: [fr.geonature.datasync.packageinfo.io.AppSettingsJsonWriter] updating app settings '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' 10:06:08.481 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] starting local data synchronization from 'https://gnpyr.brgm-rec.fr/geonature' (with additional data: true)... 10:06:08.512 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] synchronize dataset... 10:06:08.544 INFO: [fr.geonature.datasync.packageinfo.worker.InputsSyncWorker] no inputs to synchronize for 'fr.geonature.occtax2' 10:06:08.600 INFO: [fr.geonature.datasync.sync.worker.DataSyncWorker] local data synchronization finished with failed tasks in 169ms 10:06:08.671 INFO: [fr.geonature.occtax.ui.home.HomeActivity] not connected (HTTP error code: 401), redirect to fr.geonature.datasync.ui.login.LoginActivity 10:06:08.853 INFO: [fr.geonature.datasync.settings.DataSyncSettingsFileDataSourceImpl] loading data sync settings from '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json'...

PNPyrenees commented 2 years ago

J'ai un autre utilisateur "test" sur ce serveur. Si j'essaie de m'authentifier avec l'appli mobile me retourne "utilisateur inconnu" ... Je ne comprends pas.

PNPyrenees commented 2 years ago

Testé sur un troisième serveur (celui de prod). Je me retrouve dans la situation précédente où le settings.json n'est pas descendu sur le smartphone.

Si je pousse le settings.json sur le smartphone en le renommant settings_occtax.json je me retrouve dans la situation ou l'authentification boucle sur mon compte et me retourne utilisateur inconnu avec le compte test...

Je n'y comprend rien.

Edit Quand je passe mon compte test en administrateur l'authentification est marqué comme valide mais ça boucle sur la page d'authentification comme pour mon compte.

Il y a une histoire de droits mais pas que. Des infos à ce sujet ?

PNPyrenees commented 2 years ago

Il y a du mieux. En repassant sur la doc je me suis aperçus que le paramètre "uh_application_id" attend l'identifiant de geonature de la table utilisateurs.t_applications. Pour moi uh correspondait à userhub...

Reste la récupération du settings.json à résoudre...

camillemonchicourt commented 2 years ago

Ah encore un qui s'est fait avoir :-) On va renommer ce paramètre dès que possible car tu n'es pas le premier : https://github.com/PnX-SI/gn_mobile_occtax/issues/116

PNPyrenees commented 2 years ago

Je propose que ce ticket soit à nouveau ré-ouvert car le redescente du fichier de configuration depuis le serveur ne fonctionne toujours pas. Je ne sais pas ou chercher.

camillemonchicourt commented 2 years ago

Sur ton premier serveur de DEMO, le soucis peut venir d'un pré-requis non respecté : https://github.com/PnX-SI/gn_mobile_occtax/blob/master/docs/installation-fr.adoc#2-pr%C3%A9-requis

Vos instances de GeoNature et TaxHub doivent être accessibles en HTTPS.

Si je suis bien les explications, le second soucis venait d'une mauvaise valeur dans le paramètre uh_application_id.

Mais beaucoup de choses se mélangent donc j'ai du mal à suivre le fil et à comprendre où et quel est le soucis ?

camillemonchicourt commented 2 years ago

Ce que je viens de vérifier, retester aussi. Quand il y a une erreur dans le fichier de conf. Ou encore quand on a installé l'application sur un appareil et qu'on change e GeoNature sur lequel il pointe.

Cela ne marche pas directement. Il y a du cache ou des restes de la configuration précédente sur l'appareil. Même en redémarrant l'appareil, ça ne suffit pas.

PNPyrenees commented 2 years ago

Il ne reste que le problème lié à la récupération du settings.json sur le smartphone depuis le serveur.

Dans l'ordre, j'ai :

Par contre, ce qui est curieux c'est qu'à la première ouverture de l'application il y a les urls de mon serveur de démo de renseignés plutôt que des champs vides. Comme s'il y avait du cache qui se cache quelque part. Je n'arrive pas à savoir ou.

C'est très curieux car si :

J'ai beau chercher, je ne trouve pas ou sont stockées ces informations et donc comment l'appli arrive à les retrouver.

JeromeMaruejouls commented 2 years ago

Après désinstallation de l'appli, est ce que le répertoire Android/data/fr.geonature.occtax2 est bien supprimé ? Sinon il existe des outils de saisi automatique sous android, liés à certains claviers (je n'ai pas de samsung donc je ne connais pas leur paramètres), qui remplissent les formulaires avec les anciennes saisies, mais les url ne devraient pas être automatiquement renseigné avant que tu aies au moins cliqué dessus...

PNPyrenees commented 2 years ago

Je confirme que le dossier Android/data/fr.geonature.occtax2 est bien supprimé après désinstallation. Par ailleurs ayant une carte SD, j'ai constaté que l'installation d'OccTax créé également un dossier Android/data/fr.geonature.occtax2 dessus. J'ai bien contrôlé que les deux sont supprimés à la désinstallation. J'ai également testé des suppressions manuelles.

L'ouverture d'OccTax sans aucune autre intervention affiche bien les urls du serveur de demo dans les champs. Ça ne me semble pas être une proposition de valeur.

camillemonchicourt commented 2 years ago

Retour de @sgrimault :

Je pense que c'est tout simplement le fichier de paramétrage (settings_occtax.json) qui ne se met pas à jour suite au changement d'URLs, plus le fait que l'utilisateur soit déjà connecté (ou que sa session soit encore valide). Donc si on supprime simplement ce fichier et qu'on se déconnecte de l'application, au prochain lancement, elle va appliquer de nouveau la mise à jour.

Il manque donc juste ce cas là à gérer (ça fonctionnait avant ? J'ai un doute), sachant qu'actuellement (et avant aussi), le paramétrage des URLs de GeoNature se fait à deux endroits : écran des paramètres de l'application (shared preferences de l'application) et via le fichier de paramétrage. Les informations présentées dans les paramètres de l'application priment sur celles présentes dans le fichier de paramétrage et l'application applique un "merge" automatique des paramètres entre ceux présents via l'écran de paramétrage et ceux présents dans le fichier de paramétrage lors du démarrage. Donc si l'utilisateur modifie les URLs d'accès à GeoNature via l'écran de paramétrage, il faut donc :

  • forcer la déconnexion
  • forcer la mise à jour du fichier de paramétrage
  • relancer une synchronisation des données (et donc inviter l'utilisateur à se connecter)

Il manque aussi un autre cas à gérer : l'hypothèse où des relevés sont présents localement. Il faut à la fois gérer les relevés prêts à être synchronisés, des relevés en cours. Pour les relevés prêts à être synchronisés, on peut par exemple forcer une synchronisation des données (c'est à dire qu'à ce niveau là, on ne doit pas appliquer le changement des URLs d'accès à GeoNature, mais garder l'ancienne configuration, le temps de la synchronisation, à condition que tout se passe bien). Quant aux relevés en cours, soit notifier l'utilisateur qu'ils seront perdus ou alors plus simplement et pour s'affranchir de ces cas là, on interdit tout changement d'URLs tant qu'il y a encore des relevés présents localement (prêts à être synchronisés ou pas).

À discuter pour établir le bon workflow.

PNPyrenees commented 2 years ago

Merci Camille pour ce retour,

Je comprends ces explications dans le cadre du changement d'url mais dans mon cas, après suppression des données stockées et ré-installation de l'application le settings n'est pas récupéré.

Mais je viens de mettre le doigt sur quelque chose. J'ai :

Le résultat est que ça fonctionne ! La synchro se lance et je peux m'authentifier.

Je me demande donc s'il n'y a pas une anomalie dans la structure du json présenté ici : https://github.com/PnX-SI/gn_mobile_occtax#settings ou dans sa lecture côté application qui ne serait pas visible dans le cas ou l'on configure OccTaxV2 sur un serveur possédant déjà des config pour OccTaxV1

camillemonchicourt commented 2 years ago

Occtax-mobile 2.0.0 n'utilise plus l'application Sync-mobile, donc je vois pas comment il y aurait un lien avec cette application, mais là je vois pas bien.

Sur mon serveur de DEMO et de PROD, j'ai toujours Sync-mobile v1 et Occtax-mobile v1 qui restent disponibles à côté de Occtax-mobile v2.

PNPyrenees commented 2 years ago

Je fais l'hypothèse que l'appli mobile doit chercher à lire des infos qui sont dans l'ancienne structure du json retourné par t_mobile_apps

sgrimault commented 2 years ago

Bonjour,

En faisant un test rapide sur votre instance, l'appel à GET -> /api/gn_commons/t_mobile_apps retourne

[
    {
        "id_mobile_app": 1,
        "app_code": "OCCTAX",
        "url_apk": "https://geonature.pyrenees-parcnational.fr/geonature/api/static/mobile/occtax/occtax-2.0.0-generic-release.apk",
        "package": "fr.geonature.occtax2",
        "version_code": "2570",
        "settings": {
            "area_observation_duration": 365,
            "sync": {
                "geonature_url": "https://geonature.pyrenees-parcnational.fr/geonature",
                "taxhub_url": "https://geonature.pyrenees-parcnational.fr/taxhub",
                "uh_application_id": 3,
                "observers_list_id": 1,
                "taxa_list_id": 101,
                "code_area_type": "",
                "page_size": 15000
            },
            "map": {
                "show_scale": true,
                "show_compass": true,
                "max_bounds": [
                    [
                        42.62826733061433,
                        -0.8016423262464326
                    ],
                    [
                        43.22256196933102,
                        0.4281502819777965
                    ]
                ],
                "center": [
                    42.922276035501696,
                    -0.16777084451550842
                ],
                "start_zoom": 10.0,
                "min_zoom": 10.0,
                "max_zoom": 18.0,
                "min_zoom_editing": 12.0,
                "layers": [
                    {
                        "label": "OSM",
                        "source": "https://a.tile.openstreetmap.org"
                    },
                    {
                        "label": "Scan25-IGN",
                        "source": "scan25.mbtiles"
                    }
                ]
            }
        }
    },
    {
        "id_mobile_app": 2,
        "app_code": "SYNC",
        "url_apk": "https://geonature.pyrenees-parcnational.fr/geonature/api/static/mobile/sync/sync-1.3.0-generic-debug.apk",
        "package": "fr.geonature.sync",
        "version_code": "3140",
        "settings": {
            "geonature_url": "https://geonature.pyrenees-parcnational.fr/geonature",
            "taxhub_url": "https://geonature.pyrenees-parcnational.fr/taxhub",
            "uh_application_id": 3,
            "observers_list_id": 1,
            "taxa_list_id": 101,
            "page_size": 15000,
            "page_max_retry": 40
        }
    }
]

L'application "Occtax" va simplement lire les informations qui la concerne (ici package : fr.geonature.occtax2) qui contient bien tout ce qu'il faut : on retrouve notamment la partie "sync" dans "settings".

Vous n'avez que la version 2 de "Occtax" sur votre terminal de test ?

PNPyrenees commented 2 years ago

Je n'ai bien que occtaxV2 sur le smartphone.

La synchro ne fonctionne pas si la route vers t_mobile_apps ne retourne pas la partie suivante :

{
        "id_mobile_app": 2,
        "app_code": "SYNC",
        "url_apk": "https://geonature.pyrenees-parcnational.fr/geonature/api/static/mobile/sync/sync-1.3.0-generic-debug.apk",
        "package": "fr.geonature.sync",
        "version_code": "3140",
        "settings": {
            "geonature_url": "https://geonature.pyrenees-parcnational.fr/geonature",
            "taxhub_url": "https://geonature.pyrenees-parcnational.fr/taxhub",
            "uh_application_id": 3,
            "observers_list_id": 1,
            "taxa_list_id": 101,
            "page_size": 15000,
            "page_max_retry": 40
        }
    }

J'en déduis donc que occtaxV2 cherche quand même des choses dans cette partie de json.

Edit : quand je parle de occtaxV2 je fait bien référence à la toute dernière version

sgrimault commented 2 years ago

Ok à creuser/analyser, car il n'y a plus rien concernant l'application de synchronisation pour la v2 de "Occtax". Par exemple sur l'instance de démo de GeoNature, on a :

[
    {
        "id_mobile_app": 1,
        "app_code": "SYNC",
        "url_apk": "https://demo.geonature.fr/geonature/api/static/mobile/sync/sync-1.3.0-generic-release.apk",
        "package": "fr.geonature.sync",
        "version_code": "3150",
        "settings": {
            "geonature_url": "https://demo.geonature.fr/geonature",
            "taxhub_url": "https://demo.geonature.fr/taxhub",
            "uh_application_id": 1,
            "observers_list_id": 1,
            "taxa_list_id": 100,
            "code_area_type": "M1",
            "page_size": 100
        }
    },
    {
        "id_mobile_app": 2,
        "app_code": "OCCTAX",
        "url_apk": "https://demo.geonature.fr/geonature/api/static/mobile/occtax/occtax-1.3.0-generic-release.apk",
        "package": "fr.geonature.occtax",
        "version_code": "2290",
        "settings": {
            "area_observation_duration": 365,
            "sync": {
                "geonature_url": "https://demo.geonature.fr/geonature",
                "taxhub_url": "https://demo.geonature.fr/taxhub",
                "uh_application_id": 1,
                "observers_list_id": 1,
                "taxa_list_id": 100,
                "code_area_type": "M1",
                "page_size": 100
            },
            "map": {
                "show_scale": true,
                "show_compass": true,
                "max_bounds": [
                    [
                        52,
                        -6
                    ],
                    [
                        40,
                        9
                    ]
                ],
                "center": [
                    46,
                    2
                ],
                "start_zoom": 10.0,
                "min_zoom": 8.0,
                "max_zoom": 19.0,
                "min_zoom_editing": 12.0,
                "layers": [
                    {
                        "label": "OSM",
                        "source": "https://a.tile.openstreetmap.org"
                    },
                    {
                        "label": "Nantes",
                        "source": "nantes.mbtiles"
                    }
                ]
            }
        }
    },
    {
        "id_mobile_app": 3,
        "app_code": "OCCTAX2",
        "url_apk": "https://demo.geonature.fr/geonature/api/static/mobile/occtax/occtax-2.0.0-generic-release.apk",
        "package": "fr.geonature.occtax2",
        "version_code": "2570",
        "settings": {
            "area_observation_duration": 365,
            "sync": {
                "geonature_url": "https://demo.geonature.fr/geonature",
                "taxhub_url": "https://demo.geonature.fr/taxhub",
                "uh_application_id": 1,
                "observers_list_id": 1,
                "taxa_list_id": 100,
                "code_area_type": "M1",
                "page_size": 100
            },
            "map": {
                "show_scale": true,
                "show_compass": true,
                "max_bounds": [
                    [
                        52,
                        -6
                    ],
                    [
                        40,
                        9
                    ]
                ],
                "center": [
                    46,
                    2
                ],
                "start_zoom": 10.0,
                "min_zoom": 8.0,
                "max_zoom": 19.0,
                "min_zoom_editing": 12.0,
                "layers": [
                    {
                        "label": "OSM",
                        "source": "https://a.tile.openstreetmap.org"
                    },
                    {
                        "label": "Nantes",
                        "source": "nantes.mbtiles"
                    }
                ]
            }
        }
    }
]

Les 3 applications déclarés (v1 de "Sync" et "Occtax", v2 de "Occtax"). @camillemonchicourt tu as pu tester de ton coté la v2 de Occtax qui pointe sur l'instance de demo ? Il faudrait faire le même test en ne déclarant que la v2 de "Occtax".

camillemonchicourt commented 2 years ago

Oui, j'ai testé l'application mobile 2.0.0 branchée sur le serveur de DEMO et ça a bien fonctionné. Idem sur notre serveur de PROD.

Mais oui, je vais tester de suite, en retirant toutes les références à Occtax-mobile v1 et Sync-mobile v1 sur le serveur de DEMO.

camillemonchicourt commented 2 years ago

Bon, j'ai supprimé les références aux applications V1 sur le serveur de DEMO : https://demo.geonature.fr/geonature/api/gn_commons/t_mobile_apps

J'ai désinstallé l'application 2.0.0 et l'ai réinstallée.

Et là, en effet, impossible de se connecter, il ne semble pas trouver le fichier de configuration.

Logs sur l'appareil :

15:24:30.867 INFO: [fr.geonature.occtax.MainApplication] starting fr.geonature.occtax2...
15:24:30.868 INFO: [fr.geonature.occtax.MainApplication] logs directory: '/storage/emulated/0/Android/data/fr.geonature.occtax2/logs'
15:24:30.870 INFO: [fr.geonature.occtax.MainApplication] internal storage: 'MountPoint(mountPath=/storage/emulated/0, storageType=INTERNAL)'
15:24:30.871 INFO: [fr.geonature.occtax.MainApplication] external storage: 'MountPoint(mountPath=/storage/43F4-11EF, storageType=EXTERNAL)'
15:24:31.003 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from URI 'content://fr.geonature.occtax2.provider/settings/settings_occtax.json'...
15:24:31.006 INFO: [fr.geonature.commons.settings.AppSettingsManagerImpl] loading settings from '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json'...
15:24:31.007 WARN: [fr.geonature.commons.settings.AppSettingsManagerImpl] '/storage/emulated/0/Android/data/fr.geonature.occtax2/settings_occtax.json' not found
15:24:31.007 WARN: [fr.geonature.commons.settings.AppSettingsManagerImpl] failed to load 'settings_occtax.json'
15:24:31.026 INFO: [fr.geonature.occtax.ui.home.HomeActivity] failed to load settings
15:24:31.183 INFO: [fr.geonature.datasync.packageinfo.worker.CheckInputsToSynchronizeWorker] available inputs to synchronize: 0

Aucuns fichiers dans /Phone/Android/data/fr.geonature.occtax2/.

Donc la piste de @PNPyrenees semble confirmée.

sgrimault commented 2 years ago

Ok merci pour vos retours, je vais voir ça de mon coté :)

sgrimault commented 2 years ago

Je viens de me rendre compte que l'appel à GET -> /api/gn_commons/t_mobile_apps ne retourne pas une liste d'applications mais directement le json qui décrit une seule application (ici : "Occtax"). Coté module de synchronisation, il attend toujours une liste lors de l'appel à GET -> /api/gn_commons/t_mobile_apps. C'était le cas aussi coté configuration sur l'instance GeoNature du Parc National des Pyrénées ? Donc même si il n'y a plus qu'une seule application déclarée, la route GET -> /api/gn_commons/t_mobile_apps doit toujours retourner une liste même si elle ne contient qu'une seule référence à une application.

camillemonchicourt commented 2 years ago

Je ne comprends pas bien. Il n'y a pas eu de changement au niveau de GeoNature.

Il faut changer quelque chose au niveau de cette route et de GeoNature ?

sgrimault commented 2 years ago

cf. Exemple du retour lors de l'appel à GET -> /api/gn_commons/t_mobile_apps sur l'instance de demo de GeoNature qui retournait bien une liste d'applications (la v1 de "Sync" et "Occtax" et la v2 de "Occtax") que j'ai posté l'autre jour. Maintenant ce même appel donne directement la configuration de l'application "Occtax" v2 alors que l'application attend toujours une liste. On devrait obtenir ceci :

[
  {
    "id_mobile_app": 3,
    "app_code": "OCCTAX2",
    "url_apk": "https://demo.geonature.fr/geonature/api/static/mobile/occtax/occtax-2.0.0-generic-release.apk",
    "package": "fr.geonature.occtax2",
    "version_code": "2570",
    "settings": {
      "area_observation_duration": 365,
      "sync": {
        "geonature_url": "https://demo.geonature.fr/geonature",
        "taxhub_url": "https://demo.geonature.fr/taxhub",
        "uh_application_id": 1,
        "observers_list_id": 1,
        "taxa_list_id": 100,
        "code_area_type": "M1",
        "page_size": 100
      },
      "map": {
        "show_scale": true,
        "show_compass": true,
        "max_bounds": [
          [52, -6],
          [40, 9]
        ],
        "center": [46, 2],
        "start_zoom": 10.0,
        "min_zoom": 8.0,
        "max_zoom": 19.0,
        "min_zoom_editing": 12.0,
        "layers": [
          {
            "label": "OSM",
            "source": "https://a.tile.openstreetmap.org"
          },
          {
            "label": "Nantes",
            "source": "nantes.mbtiles"
          }
        ]
      }
    }
  }
]
camillemonchicourt commented 2 years ago

OK en effet j'ai supprimé les applications Sync-mobile v1 et Occtax-mobile v1 de la table. Donc il n'y a plus que l'application Occtax-mobile v2 et donc OK il y a un soucis quand il n'y a qu'une seule ligne renvoyée, je comprends.

On ne s'en est jamais rendu compte car avant on avait toujours 2 applications.

Mince, il va falloir revoir ça au niveau de GeoNature.

sgrimault commented 2 years ago

D'accord, l'appel à cette route fait donc bien en dessous une requête en base pour récupérer la liste des applications déclarées puis lors de la construction de la réponse en JSON, si cette liste ne retourne qu'une seule entrée, on se retrouve avec un objet JSON simple et non pas avec une liste contenant une seule entrée ?

camillemonchicourt commented 2 years ago

Oui il semblerait. Si ça peut être géré au niveau d'Occtax-mobile ça m'arrange pour éviter de devoir faire une release de GeoNature et que les structures doivent absolument se mettre à jour pour utiliser Occtax-mobile v2 mais sinon on le fera.

sgrimault commented 2 years ago

Du coup cette route n'est utilisée que pour "Occtax" ? Vu son nom, ce n'est pas une route transverse pour gérer toutes les applications mobile de GeoNature ?

camillemonchicourt commented 2 years ago

Il n'y a que Occtax-mobile comme application mobile GeoNature actuellement. Mais à terme, elle a vocation à être utilisée par d'autres applications en effet.

sgrimault commented 2 years ago

OK donc idéalement, il faudrait que cette route retourne toujours une liste :) Mais en attendant, je peux faire une correction pour gérer ce cas là.

camillemonchicourt commented 2 years ago

OK on va voir pour faire évoluer ça dans les prochaines versions de GeoNature. Si tu as une solution simple pour gérer ça aussi au niveau d'Occtax-mobile v2 c'est bien. Sinon il faudra passer sur les nouvelles versions de GeoNature si on n'a qu'une seule application listée dans la table des applications mobiles. Merci.

TheoLechemia commented 2 years ago

Effectivement la route renvoie une liste si plusieurs éléments et un objet si un seul. ça avait été fait comme ça (mais pas comme il faut.. c'est de ma faute), car dans mes souvenirs l'appli mobile avait également besoin de récupérer les paramètres pour une appli. Du coup il y a une query string qui filtre par app_code si on le demande. Et le code fait bêtement si length = 1 alors objet, sinon liste.

La question est de savoir si le mobile a toujours besoin de route qui renvoie un objet en passant l'app en query string : api/gn_commons/t_mobile_apps?app_code=OCCTAX ?

Sinon je fait un truc beaucoup plus standard : api/gn_commons/t_mobile_apps -> liste api/gn_commons/t_mobile_apps/<id_app> -> dict

PNPyrenees commented 2 years ago

Je trouve que la proposition de Théo permet de concilier les deux versions d'OccTax-Mobile. Et en théorie, l'application mobile V2 ne devrait donc plus attendre de liste. Ça me semble plus cohérent en l'état.

Par contre ça va nécessiter une maj de GeoNature et mutualisation OFB oblige, je ne sais pas quand on pourra la répercuter sur nos instances... Bon, c'est un autre problème qui est non bloquant car il peut être contourné en forçant la création d'une liste en déclarant une fausse deuxième application. (pas propre mais en attendant ça passe).

DonovanMaillard commented 2 years ago

Effectivement la route renvoie une liste si plusieurs éléments et un objet si un seul. ça avait été fait comme ça (mais pas comme il faut.. c'est de ma faute), car dans mes souvenirs l'appli mobile avait également besoin de récupérer les paramètres pour une appli. Du coup il y a une query string qui filtre par app_code si on le demande. Et le code fait bêtement si length = 1 alors objet, sinon liste.

La question est de savoir si le mobile a toujours besoin de route qui renvoie un objet en passant l'app en query string : api/gn_commons/t_mobile_apps?app_code=OCCTAX ?

Sinon je fait un truc beaucoup plus standard : api/gn_commons/t_mobile_apps -> liste api/gn_commons/t_mobile_apps/<id_app> -> dict

Oui, tendre vers des pratiques homogènes et standard sera de toutes manières bénéfique et facilitera la prise en main des outils par différents développeurs par la suite.

sgrimault commented 2 years ago

Je ne savais pas que la route GET -> /api/gn_commons/t_mobile_apps peut accepter un filtre pour ne récupérer que les paramètres d'une application donnée. Dans ce cas là le filtre en question c'est sur l'ID de l'application (id_mobile_app) et pas sur le package name (package) ? Dans tous les cas, l'application récupère toute la liste retournée par cette route puis filtre en se basant sur le package name. Le package name est censée être une information unique (on ne doit pas pouvoir déclarer 2 applications ayant le même package name).

sgrimault commented 2 years ago

J'ai fais une correction de mon coté pour que le retour de l'appel à GET -> /api/gn_commons/t_mobile_apps soit toujours vu comme une liste. Si ça vous convient, je peux publier une nouvelle version corrective qui embarque tout ça :)

PNPyrenees commented 2 years ago

Je serais tenté de faire le contraire. C'est à dire, l'application mobile récupère le json directement ou alors, si elle reçoit une liste, elle extrait la config approprié en se basant sur le nom du package. Sauf s'il y a une raison de conserver une liste mais en l'état je ne vois pas (une app -> un fichier de config).

DonovanMaillard commented 2 years ago

Ca peut être conservé tel quel pour le moment pour avoir une release fonctionnelle. Et je laisse le ticket ouvert pour que Théo et Sébastien puissent faire évoluer tout ca en suivant la proposition de théo d'une route un peu plus conventionnelle, filtrée sur le nom du package.