La forma mas idiota que se me ocurre (y de hecho, se puede hacer geo sin GPS) es usando un web view e invocando el api de JS, o tener un servidor web remoto, hacer un request y este registrar la llamada con GeoIP:
https://www.maxmind.com/en/geoip-demo
(P.D: Ahora que me acuerdo, si tienes la IP publica no necesitas la llamada remota, solo tener una copia de GeoIP local!)