IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

nicroman

Android & Addresses Réseaux

Noter ce billet
par , 05/11/2015 à 19h00 (721 Affichages)
Si vous voulez vous amuser avec les web-services sous Android, vous allez souvent être confronté à l'épineuse question de "l'URL".

J'ai réalisé une petite infographie histoire de bien comprendre de quoi il en retourne:
Nom : Anet.png
Affichages : 1086
Taille : 30,5 Ko


1. Votre serveur est sur Internet (et donc accessible avec une URL).
C'est le plus simple... l'URL à utiliser est dans tous les cas, celle de votre serveur. Même un device virtuel (AVD) sera capable de joindre le service.
Par contre, côté développement, les outils de "debug" à travers Internet sont souvent pauvres, du coup, on réserve assez souvent cette situation à un environnement de "production".

2. Votre serveur est sur votre machine de développement.
C'est le plus compliqué. Tout va dépendre du client utilisé....

Cas A: Depuis un device virtuel (AVD), la seule adresse IP possible pour accéder au web-service est 10.0.2.2... Votre URL sera donc de la forme: http://10.0.2.2:{portD}/....

Cas B: Depuis un device sur internet (connecté en GSM, 2G, 3G, 4G, ...), la seule adresse IP possible pour accéder au web-service est l'adresse IP publique de votre routeur. Celle-ci risquant de changer dynamiquement (tout dépend de votre contrat), vous devrez passer par un service de DNS dynamique (la plupart des routeurs proposent ce service automatiquement, et permettent de modifier ces DNS dynamiques dès qu'ils detectent un changement d'adresse IP). D'autre part vous devrez effectuer une "redirection de port", c'est à dire indiquer au routeur que toutes les requêtes pour le port {portP} devront être redirigées vers votre machine de développement avec le port {portD}.
L'adresse à utiliser sera alors http://{votre-ip-publique}:{portP}/ ou http://{votre-dns}:{portP}/

Cas C: Depuis un device sur le réseau local (connecté en WiFi sur le même réseau), la seule adresse IP possible pour accéder au web-service est l'adresse IP privée de votre machine de développement (192.168.0.173 dans l'image ci-dessus).
L'adresse à utiliser sera donc: http://{ip-privée-dev}:{portD}/

Nous avons donc trois URLs différentes selon le type de connexion, ou le type de device.

3. Votre serveur est sur votre réseau local (hors machine de développement).
C'est un bon mix entre les deux précédents:
Un device sur le réseau local (y compris un device virtuel) devra utiliser l'adresse ip privée (cas 2.c. ci-dessus)
Un device sur internet devra utiliser l'adresse ip publique (cas 2.b. ci-dessus).

Simplifier les choses.
Il est tout à fait possible de simplifier légèrement les choses... Mais cela nécessite de faire un peu de travail sur le réseau local lui-même:
Tout d'abord harmoniser les "ports". Faire en sort que le port externe public ( {portP} ci-dessus ) soit identique au port interne privé ( {portD} ci-dessus ). Il faudra donc au maximum éviter les ports "classiques" tels que 80, 53, et autres... (le plus simple étant de rester dans les ports > 1024).

S'assurer que le routeur redirige bien les ports au bon endroit.

Ensuite installer localement un serveur DNS, ainsi qu'un DNS externe (dynamique ou non).
Localement, le DNS gèrera la zone "mon-domaine.fr" par exemple... Dans cette zone on indiquera: "monservice.mon-domaine.fr" comme étant l'adresse privée du serveur.
Le DNS externe gèrera la même zone "mon-domaine.fr", mais indiquera "monservice.mon-domaine.fr" comme étant l'adresse publique du routeur.

Pour finir et gérer le cas ou le serveur serait sur la machine de développement *et* le client sur un device virtuel, utiliser le bout de code suivant:
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
private static final String  SERVICE_HOST = Build.FINGERPRINT.contains("generic") ? "http://10.0.2.2{:port}" : "http://monservice.mon-domaine.fr{:port}";
 
private static final String  SERVICE_URL = SERVICE_HOST + "/mon-path.php";
On peut utiliser les static final String car il n'y a aucune chance pour que le Build.FINGERPRINT change dans le temps !

Envoyer le billet « Android & Addresses Réseaux » dans le blog Viadeo Envoyer le billet « Android & Addresses Réseaux » dans le blog Twitter Envoyer le billet « Android & Addresses Réseaux » dans le blog Google Envoyer le billet « Android & Addresses Réseaux » dans le blog Facebook Envoyer le billet « Android & Addresses Réseaux » dans le blog Digg Envoyer le billet « Android & Addresses Réseaux » dans le blog Delicious Envoyer le billet « Android & Addresses Réseaux » dans le blog MySpace Envoyer le billet « Android & Addresses Réseaux » dans le blog Yahoo

Catégories
Java , Android

Commentaires