Giter Site home page Giter Site logo

cybernetics / android-cookie-store Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gotev/android-cookie-store

0.0 2.0 0.0 259 KB

Android InMemory and persistent Cookie Store for HttpURLConnection and OkHttp, with extensions to easily sync cookies in Android WebViews.

License: Apache License 2.0

Kotlin 98.14% Shell 1.86%

android-cookie-store's Introduction

Android Cookie Store

Android Arsenal Android Weekly ktlint Download Maven Central PRs Welcome

Android InMemory and persistent Cookie Store for HttpURLConnection and OkHttp, with extensions to easily sync cookies in Android WebViews.

Why?

Neither HttpURLConnection nor OkHttp provides a native and rapid way of storing cookies persistently on Android. This library aims to fill this gap, by implementing the standard java.net.InMemoryCookieStore in Kotlin, with extendability in mind.

With this library you have:

  • super tiny footprint (the library is only a bunch of classes)
  • an in memory only cookie store
  • a shared preferences backed cookie store which can survive app reboots
  • possibility to extend both to provide your own custom implementation which best fits your needs without reinventing the wheel for cookie management

Compatibility

Android API 16+

Getting started

Add this to your dependencies:

implementation "net.gotev:cookie-store:x.y.z"

Replace x.y.z with Download

Usage

Create your Cookie Manager:

// Example extension function to demonstrate how to create both cookie stores
fun Context.createCookieStore(name: String, persistent: Boolean) = if (persistent) {
    SharedPreferencesCookieStore(applicationContext, name)
} else {
    InMemoryCookieStore(name)
}

val cookieManager = CookieManager(
    createCookieStore(name = "myCookies", persistent = true),
    CookiePolicy.ACCEPT_ALL
)

HttpURLConnection

To setup the default Cookie Manager:

CookieManager.setDefault(cookieManager)

OkHttp

Add the following dependency (suitable for JVM and Android):

implementation "net.gotev:cookie-store-okhttp:$cookieStoreVersion"

And when you build your OkHttpClient, set the Cookie Jar:

val okHttpClient = OkHttpClient.Builder()
    .cookieJar(JavaNetCookieJar(cookieManager))
    .build()

WebView

It's a common thing to obtain a cookie from an API and to open an authenticated web page inside an app which needs the cookie. You can find a complete working example in the demo app.

You have two ways of doing this:

  • Using WebKitSyncCookieManager
  • Using standard java.net.CookieManager

Using WebKitSyncCookieManager

val cookieManager = WebKitSyncCookieManager(
    store = createCookieStore(name = "myCookies", persistent = true),
    cookiePolicy = CookiePolicy.ACCEPT_ALL,
    onWebKitCookieManagerError = { exception ->
        // This gets invoked when there's internal webkit cookie manager exceptions
        Log.e("COOKIE-STORE", "WebKitSyncCookieManager error", exception)
    }
)

Then follow standard instructions from the Usage section to setup HttpURLConnection or OkHttp according to your needs.

Incoming Cookies will be automatically synced to WebKit's CookieManager. Syncing is unidirectional from WebKitSyncCookieManager to android.webkit.CookieManager to have a single source of truth and to prevent attacks coming from URLs loaded in WebViews. If you need bi-directional sync, think twice before doing it.

To clear cookies:

cookieManager.removeAll()

This will clear both the CookieStore and WebKit's Cookie Manager.

Using standard java.net.CookieManager

Cookies syncing is entirely up to you and manual.

To copy all cookies from the cookie store to the WebKit Cookie Manager:

cookieManager.cookieStore.syncToWebKitCookieManager()

Remember to do this before loading any URL in your web view.

To remove all cookies from the Cookie Store:

cookieManager.cookieStore.removeAll()

To remove all cookies from WebKit Cookie Manager:

android.webkit.CookieManager.getInstance().removeAll()

That's all folks!

android-cookie-store's People

Contributors

dependabot-preview[bot] avatar gotev avatar jimmymorales avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.