2014-12-20 13 views
11

Opracowuję aplikację Cordova/Phonegap dla systemu Android, która wykorzystuje sesyjne pliki cookie do logowania się na stronach internetowych osób trzecich. W tym celu wykonuję żądanie postu AJAX (z jQuery), a następnie pliki cookie są ustawiane automatycznie.Ciasteczka sesyjne z Cordova nie działają na Androidzie Lollipop

Ale kiedy zaktualizowałem swój smartfon do Androida Lollipop 5.0, a także bibliotek aplikacji na poziom API 21, pliki cookie przestały działać. Co się zmieniło?

Odpowiedz

24

Po godzinach spędzonych na szukaniu działającego rozwiązania w Internecie natknąłem się na artykuł, który bardzo dobrze wyjaśnia ten problem, dlatego zamieszczam go tutaj, ponieważ uważam, że będzie przydatny dla innych użytkowników Stack Overflow.

Zasadniczo problem leży w nowej polityce plików cookie dla firm zewnętrznych (https://developer.android.com/about/versions/android-5.0-changes.html#BehaviorWebView), która domyślnie blokuje je.

rozwiązania jest dodać kilka linijek kodu do głównej działalności:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    super.init(); 

    // Allow third party cookies for Android Lollipop 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     WebView webView = (WebView)super.appView; 
     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.setAcceptThirdPartyCookies(webView,true); 
    } 

    super.loadUrl(Config.getStartUrl()); 
} 

Więcej informacji można umieścić link do pełnego artykułu tutaj: http://joashpereira.com/blog/2014/11/19/fix-to-cordovaphonegap-apps-targeting-android-5-lollipop-or-later-on-default-disallowing-third-party-cookies/

+1

To samo rozwiązanie ma zastosowanie nawet jeśli nie korzystasz z Cordova - po prostu używając javascripts w widoku internetowym, który wywołuje ajax. – e4c5

+1

To było domyślnie stosowane w [Cordova Android 3.7.1] (https://cordova.apache.org/announcements/2015/02/06/cordova-android-3.7.1.html), patrz także [wydanie] (https://issues.apache.org/jira/browse/CB-8026) i [commit] (https://git-wip-us.apache.org/repos/asf?p=cordova-android.git;h = 15 1948). Przed użyciem tego posta zapoznaj się z plikiem 'CordovaWebView'. – Dunc

+0

Dziękujemy! To zachowanie różni się od Qt WebView, którego użyłem do zbudowania mojej aplikacji. To naprawdę powinno być w każdym wprowadzającym samouczku Android WebView teraz, ponieważ różni się od zachowania poprzednich i innych implementacji. –

Powiązane problemy