Как открыть домен на основе текущей страны, в которой находится устройство?

Я разрабатываю это приложение для Android для своей компании (скажем, основной домен mycompany.com), и мне нужно открыть веб-сайт компании с конкретным TLD для текущей страны, в которой находится устройство. Итак, коды стран на основе локали мне не подходят.

Я имею в виду, если вы в настоящее время находитесь за границей в Испании и открываете наше приложение, оно должно открываться mycompany.es, если вы находитесь в Италии, оно должно открываться mycompany.it и так далее. Мне не нужно это для каждой возможной страны, только для некоторых, запасной вариант будет mycompany.com, если текущий код страны не соответствует ни одному из конкретных.

Мне действительно нужно это, прежде чем делать что-либо еще в моем приложении, это будет WebView открытием веб-приложения компании. Другими словами, пока я не получу код страны, в которой находится устройство, приложение нельзя будет использовать. Это связано с тем, что некоторые страны (например, Испания) заставляют нас иметь только mycompany.es, в то время как mycompany.com полностью заблокированы на уровне интернет-провайдера.

Мне нужно, чтобы это работало на всех устройствах, телефонах/планшетах, во всех мобильных сетях или только через Wi-Fi. Такие вещи, как TelephonyManager.getNetworkCountryIso(), вероятно, не помогут.

Мне нужно получить местоположение либо с помощью LocationManager, либо с помощью Google Location Services API. С любым из них мне нужно получить последнее известное местоположение, но если по какой-то причине я его не получу, мне нужно запросить обновления местоположения и дождаться его. В службах Google также есть предостережение, когда у пользователя могут быть отключены службы определения местоположения, что является проблемой. Мне пришлось бы вернуться к LocationManager, что не кажется таким надежным.

Все эти решения кажутся громоздкими только для того, чтобы получить текущий код страны устройства только для загрузки URL-адреса WebView в правильном домене. Но я думаю, что у меня нет другого выбора.

Если кто-то не знает лучшего решения этой проблемы... Мысли?


person rfgamaral    schedule 04.08.2016    source источник


Ответы (1)


Сначала я подумал, что то, что я нахожусь в Испании, не означает, что я внезапно научился говорить по-испански. Я все еще хотел бы видеть веб-сайт, который соответствует локали моего телефона. Но учитывая ваше заявление о том, что .com заблокирован на уровне интернет-провайдера, похоже, у вас нет выбора. Надеюсь, когда вы откроете веб-сайт, вы сможете указать язык устройства, поэтому, если я en_us, я по умолчанию получу веб-сайт .es на английском языке.

Учитывая изложенные вами требования, я думаю, вам просто нужно получить местоположение, дождаться его, а затем выполнить сопоставление местоположения с поддерживаемыми локалями ваших веб-сайтов. В этом случае я бы очень рекомендовал API служб определения местоположения вместо диспетчера местоположений. Это намного надежнее и быстрее, поскольку кэширует местоположения для любого приложения, которое уже извлекло его, и автоматически обрабатывает резервные копии для вас.

person w.donahue    schedule 04.08.2016
comment
Что вы имеете в виду, говоря, что службы определения местоположения обрабатывают резервные копии вместо меня? - person rfgamaral; 04.08.2016
comment
Эта тема довольно хорошо подводит итог stackoverflow.com /вопросы/33022662/ - person w.donahue; 04.08.2016
comment
Я наткнулся на этот пост перед тем, как опубликовать этот вопрос, я ничего не заметил об отступлении. Но я посмотрю повнимательнее, когда вернусь домой. Спасибо. - person rfgamaral; 04.08.2016
comment
Короче говоря, с помощью только Android Location API вам нужно вручную выбрать, чтобы получить GPS, сеть или пассивное местоположение. Где, как и в случае с новой версией API Play Services, он будет обрабатывать все это автоматически. Все, что вам нужно сделать, это указать минимальную надежность местоположения, которая вам нужна. Кроме того, настоящая основная причина его использования заключается в том, что он может возвращать кешированное местоположение, которое недавно было запрошено из любого другого приложения на телефоне. - person w.donahue; 04.08.2016