Веб-представление и cookie на Android

У меня есть приложение на appspot, который хорошо работает через регулярный браузер, однако при использовании через веб-представление Android это не может установить и считать cookie. Я не пытаюсь получить cookie "вне" этого веб-приложения BTW, когда-то URL посещает веб-представление, вся обработка, идентификаторы, и т.д. может остаться там, все, в чем я нуждаюсь, управление сеансами в том приложении. Сначала экран также загружается прекрасный, таким образом, я знаю веб-представление +, интерактивность сервера не повреждается.

Я посмотрел на класс WebSettings, не было никакого вызова как setEnableCookies.

Я загружаю URL как это:

public class MyActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);       
    WebView webview = new WebView(this);
    setContentView(webview);      
    webview.loadUrl([MY URL]);
  }
  .. 
}

Какие-либо идеи?

51
задан burak bayramli 2 April 2010 в 01:00
поделиться

2 ответа

Я понял, что происходит.

Когда я загружаю страницу через действие на стороне сервера (посещение url) и просматриваю html, возвращенный этим действием, в Webview, то первое действие/страница запускается в этом Webview. Однако, когда вы нажимаете на любую ссылку, которая является командой действия в вашем веб-приложении, эти действия запускают новый браузер. Вот почему информация о cookie теряется, потому что первая информация о cookie, которую вы установили для Webview, пропадает, у нас есть отдельная программа.

Вы должны перехватывать клики на Webview так, чтобы просмотр никогда не покидал приложение, все оставалось внутри того же Webview.

  WebView webview = new WebView(this);      
  webview.setWebViewClient(new WebViewClient() {  
      @Override  
      public boolean shouldOverrideUrlLoading(WebView view, String url)  
      {  
        view.loadUrl(url); //this is controversial - see comments and other answers
        return true;  
      }  
    });                 
  setContentView(webview);      
  webview.loadUrl([MY URL]);

Это устраняет проблему.

35
ответ дан 7 November 2019 в 09:44
поделиться

Из документации Android :

CookieSyncManager используется для синхронизации хранилища файлов cookie браузера между ОЗУ и постоянным хранилищем. Для обеспечения максимальной производительности файлы cookie браузера сохраняются в оперативной памяти. Отдельный поток сохраняет файлы cookie между ними, управляемые таймером.

Чтобы использовать CookieSyncManager , хост-приложение должно при запуске вызывать следующее:

 CookieSyncManager.createInstance (context) 
 

Чтобы настроено для синхронизации, хост-приложение должно вызвать

 CookieSyncManager.getInstance (). startSync () 
 

в Activity.onResume () и вызвать

  CookieSyncManager.getInstance (). stopSync () 
 

в Activity.onPause ().

Чтобы получить мгновенную синхронизацию вместо ожидания срабатывания таймера, хост может вызвать

 CookieSyncManager.getInstance (). Sync () 
 

Интервал синхронизации равен 5 минут, поэтому вы все равно захотите принудительно синхронизировать вручную, например, в onPageFinished (WebView, String). Обратите внимание , что даже sync () выполняется асинхронно, поэтому не делайте этого, пока ваша деятельность завершается.

Наконец, должно сработать что-то вроде этого:

// use cookies to remember a logged in status   
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
WebView webview = new WebView(this);
webview.getSettings().setJavaScriptEnabled(true);
setContentView(webview);      
webview.loadUrl([MY URL]);
41
ответ дан 7 November 2019 в 09:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: