У нас есть несколько видео, размещенных на нашей платформе. Скажем, mydomain.com/no_auth_video_1
и mydomain.com/no_auth_video_2
, например. Теперь мы добавили третье видео mydomain.com/auth_video_3
, но это можно увидеть, только если вы добавите несколько заголовков аутентификации в запрос.
В нашем приложении android мы используем WebView
для воспроизведения этих видео. У нас есть шаблон html:
<!-- html stuf -->
<video>
<source src="%videoUrl%"/>
</video>
<!-- html stuf -->
и, заменив URL, мы загружаем html в веб-просмотр:
webView.loadData(html, "text/html", "utf-8")
Это прекрасно работает для no_auth
видео, но не для видео, которое требует аутентификации. Ища ответов , я обнаружил, что мы должны переопределить метод shouldInterceptRequest
в WebViewClient:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (urlShouldBeHandledByWebView(url)) {
return super.shouldInterceptRequest(view, url);
}
return getNewResponse(view, url);
}
private WebResourceResponse getNewResponse(WebView view, String url) {
try {
OkHttpClient okHttpClient = getMyAuthenticatedHTTPClient()
Request request = new Request.Builder()
.url(url)
.build();
final Response response = okHttpClient.newCall(request).execute();
return new WebResourceResponse(
response.header("content-type", null),
response.header("content-encoding", "utf-8"),
response.body().byteStream()
);
} catch (Exception e) {
return null;
}
}
Это работает, так как запрос для mydomain.com/auth_video_3
выполняется, и я можно увидеть, что информация извлекается правильно с помощью отладчика. Проблема в том, что в WebView
видео все равно не загружается.