Как некоторые приложения могут успешно выполнять вход в Google в веб-просмотре Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как некоторые приложения могут успешно выполнять вход в Google в веб-просмотре Android?

Сообщение Anonymous »

Как описано здесь, Google прекратил поддержку входа в Google в веб-просмотре. Но в магазине Play Store есть приложения (приложения «все в одном»), которые отображают несколько прогрессивных приложений в своих приложениях с помощью веб-просмотра, и мы можем войти туда, используя вход Google.

Поэтому мой вопрос заключается в том, как мы можем сделать это возможным.

Я искал вопросы по SO с помощью следующего запроса.


Android 403: Ошибка: запрещенный агент пользователя


Нашел много принятых ответов, некоторые из которых содержат различные UserAgentString

Перепробовал все, но ни один из них не помог. Поскольку UserAgentString помогает не всегда.

Если вход осуществляется путем открытия нового окна, то это не работает. Несмотря на то, что мы определяем ту же строку UserAgentString с webview в обратном вызове onCreateWindow WebChromeClient.

Я также пробовал искать для альтернативы веб-просмотра, например CrossView и т. д., но они не поддерживаются последние 3 года.

Я не могу использовать пользовательские вкладки Chrome, поскольку могу' скрыть адресную строку на пользовательской вкладке Chrome.

Поэтому, пожалуйста, подскажите мне, действительно ли это возможно в веб-просмотре или есть ли альтернатива веб-просмотру < /code>.

РЕДАКТИРОВАТЬ – то, что я пробовал до сих пор.

Инициализация WebView в onCreate()

Код: Выделить всё

webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36");
webView.getSettings().setGeolocationEnabled(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView.setWebChromeClient(new MyWebChromeClient());
enableHTML5AppCache(webView);

webView.loadUrl("https://www.makemytrip.com/");
Поддержка методов и классов

Код: Выделить всё

private void enableHTML5AppCache(WebView mWebView) {

mWebView.getSettings().setDomStorageEnabled(true);

// Set cache size to 8 mb by default. should be more than enough
mWebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);

// This next one is crazy.  It's the DEFAULT location for your app's cache
// But it didn't work for me without this line
mWebView.getSettings().setAppCachePath("/data/data/" + getActivity().getPackageName() + "/cache");
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);

mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
}

private class MyWebChromeClient extends WebChromeClient {

@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, android.os.Message resultMsg) {
WebView newWebView = new WebView(getActivity());

newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
newWebView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36");
newWebView.getSettings().setLoadWithOverviewMode(true);
newWebView.getSettings().setAllowContentAccess(true);
newWebView.getSettings().setDatabaseEnabled(true);
newWebView.getSettings().setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
newWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
enableHTML5AppCache(newWebView);
newWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onCloseWindow(WebView window) {
webView.removeView(window);
}
});
view.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
return true;
}

@Override
public void onCloseWindow(WebView window) {
webView.removeView(window);
}
}
Теперь, когда я использую указанный выше UserAgentString, вход в Google работает там, где он выполняется в том же веб-представлении. Но на вышеуказанном сайте, когда вы нажимаете «Вход»->Google, он запрашивает новое окно (у меня есть код возврата выше для нового окна — см. метод onCreateWindow() выше), затем отображается ошибка 403 — Disallowed ПользовательскийАгент.

Подробнее здесь: https://stackoverflow.com/questions/458 ... id-webview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»