この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
任意のタイミングでの Cookie 削除
iOS, Android でそれぞれ WebView の Cookie を削除する方法をご紹介します。
結構ハマりました。
WebView は罠が多いですね。
iOS
iOS は WKWebView に関しての方法です。
UIWebView については調べていません。
サンプルコード
- (void)removeAllCookies
{
NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
NSString *cookiesPath = [libraryPath stringByAppendingPathComponent:@"Cookies"];
NSString *webKitPath = [libraryPath stringByAppendingPathComponent:@"WebKit"];
[[NSFileManager defaultManager] removeItemAtPath:cookiesPath error:nil];
[[NSFileManager defaultManager] removeItemAtPath:webKitPath error:nil];
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[cookieStorage.cookies enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) {
[cookieStorage deleteCookie:cookie];
}];
NSOperatingSystemVersion version = { 9, 0, 0 };
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) {
NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes
modifiedSince:date
completionHandler:^{}];
}
}
解説
やっていることは以下のとおりです。
Application/Library/Cookies
ディレクトリの削除Application/Library/WebKit
ディレクトリの削除- NSHTTPCookieStorage の Cookie を全削除
- iOS 9 以上の場合 WKWebsiteDataStore のデータを全削除
私の環境ではこれら全てを実施しなければ期待した動作は得られませんでした。
Cookie が消えることもあれば消えないこともあるといった、不安定な動作となったのです。
どれか一つが残っていれば、WebView が自動でデータを復元することもあるという情報があったので、このような実装になっています。
Android
サンプルコード
@SuppressWarnings("deprecation")
private void removeAllCookies() {
CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeAllCookies(null);
} else {
cookieManager.removeAllCookie();
}
}
解説
Android 5.0 以上の場合は CookieManager の removeAllCookies() メソッドを、それ以外は removeAllCookie() メソッドを実行しています。
さいごに
調べていて感じたのですが、iOS も Android も Cookie の削除については様々なやりかたがあり、対応方法は一つではないようです。
削除したいタイミングやデータによって、消えることもあれば消えないこともあるのでしょう。
それゆえ、情報が散らばり「WebView は複雑である」という印象を与えているように感じました。
今回紹介した方法も、私の環境では上手く動作しましたが、他の人の環境では意図通りに動かないかもしれません。
あくまで、「こういうやり方もある」と捉えていただければ幸いです。
リンク
ミレニアム・ファルコン製作日記 #51
51 号 表紙
パーツ
成果
今回の作業は以下の 2 つでした。
- 上部外殻フレームを拡張する
- 半径方向肋材を加える
前回で組み立てたものにフレームを加え、フレーム補強用に肋材を取り付けました。
これで上部外殻フレームの 3 分の 1 が完成だそうです。
・・・下部外殻フレームに比べて組み立てペースが早く感じるのは気のせいでしょうか。
オリジナル塗装ディテール参考写真
マガジン内で紹介された こちらのページ では、『帝国の逆襲』で使用されたオリジナルの撮影用ミニチュアの各部を写した一連の写真を見ることができます。
作り手の愛が伝わってくるので、是非ご覧ください。
それではまた次回。
May the Force be with you!