24
24
import android .webkit .WebSettings ;
25
25
import android .webkit .WebView ;
26
26
import android .webkit .WebViewClient ;
27
+ import android .webkit .CookieSyncManager ;
27
28
28
29
import com .facebook .react .bridge .Arguments ;
29
30
import com .facebook .react .bridge .LifecycleEventListener ;
@@ -368,6 +369,32 @@ public void setMessagingEnabled(WebView view, boolean enabled) {
368
369
((RNCWebView ) view ).setMessagingEnabled (enabled );
369
370
}
370
371
372
+ public void setCookies (WebView view , @ Nullable ReadableMap cookieAndDomain ) {
373
+ // key should be the cookie, value should be domain
374
+ clearCookies (view );
375
+ ReadableMapKeySetIterator iterator = cookieAndDomain .keySetIterator ();
376
+ while (iterator .hasNextKey ()) {
377
+ String key = iterator .nextKey ();
378
+ CookieManager .getInstance ().setCookie (cookieAndDomain .getString (key ), key );
379
+ }
380
+ }
381
+
382
+ private void clearCookies (WebView view ) {
383
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
384
+ CookieManager .getInstance ().removeAllCookies (null );
385
+ CookieManager .getInstance ().flush ();
386
+ } else {
387
+ ReactContext reactContext = (ReactContext ) view .getContext ();
388
+ CookieSyncManager cookieSyncMngr =CookieSyncManager .createInstance (reactContext );
389
+ cookieSyncMngr .startSync ();
390
+ CookieManager cookieManager =CookieManager .getInstance ();
391
+ cookieManager .removeAllCookie ();
392
+ cookieManager .removeSessionCookie ();
393
+ cookieSyncMngr .stopSync ();
394
+ cookieSyncMngr .sync ();
395
+ }
396
+ }
397
+
371
398
@ ReactProp (name = "source" )
372
399
public void setSource (WebView view , @ Nullable ReadableMap source ) {
373
400
if (source != null ) {
@@ -382,6 +409,9 @@ public void setSource(WebView view, @Nullable ReadableMap source) {
382
409
return ;
383
410
}
384
411
if (source .hasKey ("uri" )) {
412
+ if (source .hasKey ("setCookies" )) {
413
+ setCookies (view , source .getMap ("setCookies" ));
414
+ }
385
415
String url = source .getString ("uri" );
386
416
String previousUrl = view .getUrl ();
387
417
if (previousUrl != null && previousUrl .equals (url )) {
@@ -797,3 +827,4 @@ public void postMessage(String message) {
797
827
}
798
828
}
799
829
}
830
+
0 commit comments