@@ -18,6 +18,8 @@ public class LoginWebView: WKWebView, WKNavigationDelegate {
1818 /// Called once the flow is completed.
1919 var completionHandler : ( ( Result < [ HTTPCookie ] , Error > ) -> Void ) !
2020
21+ private var cookieTimer : Timer ?
22+
2123 // MARK: Init
2224 @available ( * , unavailable, message: " using a custom `userAgent` is no longer supported " )
2325 public init ( frame: CGRect , userAgent: String ? , didReachEndOfLoginFlow: ( ( ) -> Void ) ? = nil ) {
@@ -34,6 +36,7 @@ public class LoginWebView: WKWebView, WKNavigationDelegate {
3436 self . didReachEndOfLoginFlow = didReachEndOfLoginFlow
3537 super. init ( frame: frame, configuration: configuration)
3638 self . navigationDelegate = self
39+ setCookieTimer ( )
3740 }
3841
3942 @available ( * , unavailable, message: " use `init(frame:didReachEndOfLoginFlow:)` instead. " )
@@ -79,9 +82,10 @@ public class LoginWebView: WKWebView, WKNavigationDelegate {
7982 }
8083
8184 // MARK: Clean cookies
82- private func fetchCookies( ) {
83- configuration. websiteDataStore. httpCookieStore. getAllCookies { [ weak self] in
84- self ? . completionHandler ? ( . success( $0) )
85+
86+ private func setCookieTimer( ) {
87+ cookieTimer = Timer . scheduledTimer ( withTimeInterval: 1 , repeats: true ) { [ weak self] _ in
88+ self ? . tryFetchingCookies ( )
8589 }
8690 }
8791
@@ -99,6 +103,9 @@ public class LoginWebView: WKWebView, WKNavigationDelegate {
99103 self ? . navigationDelegate = nil
100104 // notify user.
101105 self ? . completionHandler ? ( . success( $0) )
106+ // deinit timer
107+ self ? . cookieTimer? . invalidate ( )
108+ self ? . cookieTimer = nil
102109 }
103110 }
104111
@@ -109,20 +116,5 @@ public class LoginWebView: WKWebView, WKNavigationDelegate {
109116 completionHandler: completionHandler)
110117 }
111118
112- // MARK: Navigation delegate
113- public func webView( _ webView: WKWebView , didFinish navigation: WKNavigation ! ) {
114- switch webView. url? . absoluteString {
115- case " https://www.instagram.com/ " ? :
116- // notify user.
117- didReachEndOfLoginFlow ? ( )
118- // fetch cookies.
119- fetchCookies ( )
120- // no need to check anymore.
121- navigationDelegate = nil
122- default :
123- // try fetching cookies.
124- tryFetchingCookies ( )
125- }
126- }
127119}
128120#endif
0 commit comments