Я использую библиотеку Android (SardineAndroid) для доступа к серверу DAV, расположенному на персональном Raspberry Pi, работающем под управлением Linux / Apache2.Pi подключен к моему домашнему маршрутизатору и доступен через публичное доменное имя.
SardineAndroid построен поверх Okttp
Однако я не могу использовать тот же URL для доступа к этому серверу, если яЯ в локальной сети (Wi-Fi) и за ее пределами.Перенаправление домена не может найти IP-адрес сервера, если я нахожусь в сети.Но он работает из локальной сети, если я изменяю URL, заменяя имя домена локальным IP-адресом.
Конечно, больно вручную переключаться с одного URL на другой, в зависимости от того, где я нахожусь (сеть, к которой я подключен), будь то домашний Wi-Fi или другие ситуации.
Можно ли настроить OkHttp для разрешения этого проблемного сценария?
вот мое создание клиента Okttp:
OkHttpClient.Builder builder = new OkHttpClient.Builder();
final Map<String, CachingAuthenticator> authCache = new ConcurrentHashMap<>();
Credentials credentials = new Credentials(DAV_USER_NAME, DAV_PASSWORD);
final BasicAuthenticator basicAuthenticator = new BasicAuthenticator(credentials);
final DigestAuthenticator digestAuthenticator = new DigestAuthenticator(credentials);
// note that all auth schemes should be registered as lowercase!
DispatchingAuthenticator authenticator = new DispatchingAuthenticator.Builder()
.with("digest", digestAuthenticator)
.with("basic", basicAuthenticator)
.build();
OkHttpClient client = builder
.authenticator(new CachingAuthenticatorDecorator(authenticator, authCache))
.addInterceptor(new AuthenticationCacheInterceptor(authCache))
//.addNetworkInterceptor(logger)
.retryOnConnectionFailure(true)
.pingInterval(5, TimeUnit.SECONDS)
.connectTimeout(300, TimeUnit.SECONDS)
.writeTimeout(300, TimeUnit.SECONDS)
.readTimeout(300, TimeUnit.SECONDS)
.build();