Creating a non-tracking in-app web browser
Asked Answered
B

2

7

I am trying to create a webview (as an exercise) that does not track or store any browsing history locally.
I have made it so that when the webview is closed, it calls the following

[[NSURLSession sharedSession]resetWithCompletionHandler:^{}];

but I am finding that things like google search history persists some how between sessions. I have also tried clearing cookies separately through

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie *cookie in [storage cookies]) {
       [storage deleteCookie:cookie];
    }
[[NSUserDefaults standardUserDefaults] synchronize];

still to no avail. Google searches still show when a new web view is created.
Is anyone aware of a way to remove the identifier that google is using to match that search history back to me? I'm concerned it's something like the bundle identifier, which is probably a bit trickier to prevent being read.
Any ideas are appreciated.
Regards,
Luke

Blackout answered 24/3, 2017 at 8:20 Comment(7)
did you try cleaning the cache also ? [[NSURLCache sharedURLCache] removeAllCachedResponses];Univocal
I'm assuming so. - (void)resetWithCompletionHandler:(void (^)(void))completionHandler; /* empty all cookies, cache and credential stores, removes disk files, issues -flushWithCompletionHandler:. Invokes completionHandler() on the delegate queue if not nil. */. I will try that also anyway.Blackout
Set the Wkwebviewconfiguration websiteDataStore as WKWebsiteDataStore.nonPersistentDataStore() and see if it worksUnivocal
Incase of NSURLConnection ... in the delegate return nil for cachedResponse in the following delegate method -(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponseUnivocal
Or else try removing the cache [NSURLCache sharedURLCache] removeCachedResponseForRequest:request];Univocal
As far as website request is concerned try to use NSURLRequestReloadIgnoringLocalAndRemoteCacheData for NSURLRequestUnivocal
Right on the money with the nonPersistentDataStore. If you give that as an answer, the bounty is yours mateBlackout
U
15

Try setting nonPersistentDataStore for WKWebsiteDataStore of WKWebViewConfiguration

Here is a sample code snippet

let webVuConfiguration = WKWebViewConfiguration()
webVuConfiguration.websiteDataStore =WKWebsiteDataStore.nonPersistentDataStore()
let webView = WKWebView(frame: webviewRect, configuration: webVuConfiguration)
Univocal answered 30/3, 2017 at 19:55 Comment(0)
B
3

To compliment Durai Amuthan.H's answer, here is the answer for us plebs who still like to use Obj-C

WKWebViewConfiguration * config = [WKWebViewConfiguration new];
config.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];   
webView = [[WKWebView alloc]initWithFrame:viewFrame configuration:config];
Blackout answered 30/3, 2017 at 20:5 Comment(1)
Thanks for the compliment :) I am glad that I am of some help to you and I don't think Obj-C developers are plebs :) you know old is goldUnivocal

© 2022 - 2024 — McMap. All rights reserved.