From 1fbec33719c451ebe55d45d0c16fbf0d299523fa Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 7 Dec 2023 15:53:15 -0600 Subject: [PATCH] [AltStoreCore] Fixes signing-in to Patreon with Google account --- AltStoreCore/Patreon/PatreonAPI.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/AltStoreCore/Patreon/PatreonAPI.swift b/AltStoreCore/Patreon/PatreonAPI.swift index 28888851..b197c0fe 100644 --- a/AltStoreCore/Patreon/PatreonAPI.swift +++ b/AltStoreCore/Patreon/PatreonAPI.swift @@ -97,9 +97,12 @@ public extension PatreonAPI let configuration = WKWebViewConfiguration() configuration.setURLSchemeHandler(self, forURLScheme: "altstore") configuration.websiteDataStore = .default() + configuration.preferences.javaScriptCanOpenWindowsAutomatically = true + configuration.applicationNameForUserAgent = "Version/17.1.2 Mobile/15E148 Safari/604.1" // Required for "Sign-in With Google" to work in WKWebView let webViewController = WebViewController(url: requestURL, configuration: configuration) webViewController.delegate = self + webViewController.webView.uiDelegate = self self.webViewController = webViewController let callbackURL = try await withCheckedThrowingContinuation { continuation in @@ -479,3 +482,25 @@ extension PatreonAPI: WKURLSchemeHandler Logger.main.debug("WKWebView stopped handling url scheme.") } } + +extension PatreonAPI: WKUIDelegate +{ + public func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? + { + // Signing in with Google requires us to use separate windows/"tabs" + + Logger.main.debug("Intercepting new window request: \(navigationAction.request)") + + let webViewController = WebViewController(request: navigationAction.request, configuration: configuration) + webViewController.delegate = self + webViewController.webView.uiDelegate = self + self.webViewController?.navigationController?.pushViewController(webViewController, animated: true) + + return webViewController.webView + } + + public func webViewDidClose(_ webView: WKWebView) + { + self.webViewController?.navigationController?.popToRootViewController(animated: true) + } +}