2012-01-28 21 views
5

Específicamente, cuando un servidor http recibe una solicitud de un iPhone, ¿hay alguna forma de determinar con qué tipo de conexión de Internet tiene el teléfono ?¿Es posible distinguir las solicitudes HTTP realizadas a través de 3G de otras solicitudes?

Si no hay manera de determinar esto con certeza, ¿hay alguna buena heurística?

+0

Esa es una muy buena pregunta. Dudo que HTTP proporcione algo, pero es posible que pueda ver la capa de transporte. –

+0

¿Puedo preguntar qué * realmente * quiere responder? Además de limitar los datos para tratar de reducir los posibles cargos de datos para un usuario, no puedo pensar en ninguna razón por la cual le gustaría conocer esta información en particular. ¿Tal vez realmente quieres saber sobre latencia, calidad de conexión, etc.? –

+0

No tengo una necesidad inmediata en este momento, pero ya ha identificado el motivo: para tratar de reducir los posibles cargos de datos para un usuario. Una aplicación se envió con un par de errores, y uno de los errores podría ser contabilizado en el servidor, pero obligaría al cliente a utilizar * lot * más datos. –

Respuesta

1

Si controla la aplicación de iOS, debería poder establecer un encabezado personalizado, digamos X-iOS-ConnectionType. Si está recibiendo una solicitud de Mobile Safari, dudo que obtenga algo, aunque puede intentar hacer ping a la dirección IP de origen y verificar la tasa de transferencia.

Debo añadir que, al igual que con la mejora progresiva y el diseño adaptativo, probablemente sea más útil detectar el rendimiento en lugar de 3G/WiFi. Si bien es probable que obtenga un mejor rendimiento en WiFi, he encontrado varias instancias en las que 3G era mucho más rápido.

(Tenga en cuenta que nunca he mirado en el tráfico móvil, y la IP de origen puede no ser un buen indicador de las tasas de transferencia de cliente.)

+0

Es una idea interesante, pero estoy buscando un mecanismo que no requiera modificar la aplicación de iOS. –

1

tal vez usted podría utilizar la clase Reachability para determinar la conexión a Internet y, a continuación incluyen que en su solicitud HTTP, por ejemplo como un parámetro o encabezado HTTP personalizado como sugiere Ryan Riley.

+0

Este es de hecho el camino a seguir. La clase de accesibilidad te permite saber si estás usando wifi o no (entonces, es 3G) – codingcthulhu

3

perdón por desenterrar ese cadáver, pero en realidad solo pensé en el mismo problema. El punto es: no hay forma de detectar que directamente.

Altough, se me ocurrió un enfoque, que lamentablemente necesita alguna preparación: Debe obtener el nombre de host para la IP desde la que se realizó la solicitud.

Por ejemplo, cuando hago una solicitud a mi servidor web con mi teléfono a través de la red 3G y resolver la IP solicitud a la solicitud de nombre de host, me sale esto:

ip-xxx-xxx-xxx-xxx.web.vodafone.de 

lo que sería necesario para recoger (o encuentre en Internet) una lista de nombres de host de proveedores web móviles. Con este enfoque, no se puede decir exactamente qué tipo de conexión usa un usuario, pero al menos se puede distinguir entre WiFi y redes móviles.

Cuestiones relacionadas