Быстрое получение URL-адреса из расширения общего доступа или WebView, возвращающего недопустимое значение

Внутри моего приложения пользователь может получить доступ к WebView, который захватывает URL следующим образом:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    self.url = webView.url
}

Пользователь также может получить доступ к приложению через ShareExtension, где я беру URL следующим образом:

if let item = extensionContext?.inputItems.first as? NSExtensionItem,
       let itemProvider = item.attachments?.first,
       itemProvider.hasItemConformingToTypeIdentifier("public.url") {
        itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil) { (url, error) in
            if (url as? URL) != nil {
            // do something with URL

У меня это работает нормально и всегда получает правильный URL.

Проблема:

Я обнаружил, что у некоторых людей в моем приложении URL сохраняется С PageTitle. Это проблема, потому что при попытке открыть их (я сохраняю их в textView с функцией hyperLink) происходит ошибка, поскольку String не может быть отформатирован в URL. Вот несколько примеров недопустимого URLs:

Зови меня своим именем https://www.amazon.de/dp/B07B58SGWP/ref=cm_sw_r_cp_api_fabc_iCJ6Fb0QVVW8Y?_encoding=UTF8&psc=1

https://farfetch.onelink.me/yQyB/b9f5e5d2?af_dp=https%3A%2F%2Fwww.farfetch.com%2Fshopping%2Fitem-16119737.aspx&af_web_dp=https%3A%2F%2Fwww.farfetch.com%2Fitem-16119737.aspx Shoppen Кроссовки Golden Goose 'Hi Star'

Schau dir LANDSKRONA IKEA an. Более подробная информация: https://ingka.page.link/gqV9dAw61TqNJrne9

https://www.amazon.de/DALLE-PIANE-CASHMERE-Anthrazit-Einheitsgröße/dp/ B06XY2ZGBZ/ref=mp_s_aWebView13_sspa?dchild=1&keywords=dalle%2Bpiane%2Bcashmere%2Bschal&qid=1610091194&sprefix=dalle%2Bpia&sr=8-13-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExT0hHOFRLWElYVUJBJmVuY3J5cHRlZElkPUEwOTY1ODUyOUJWWUU4MlY0SVUwJmVuY3J5cHRlZEFkSWQ9QTA0ODk2NzEzSDZNSUJOR1haREVTJndpZGdldE5hbWU9c3BfcGhvbmVfc2VhcmNoX210ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU&th=1

https://www.apple.com/de/shop/buy-ipad/ipad-air/64gb-gr%C3%BCn-wifi

Любая идея, почему первые 3 примера сохраняются именно так, и есть ли решение этой проблемы???

Последние 2 примера меня действительно смущают. Я не могу их открыть, так как Swift сообщает мне, что они недействительны URLs. Но почему? Здесь нет пробелов, как в других примерах. А также никаких китайских букв или арабского текста, которые сделали бы их недействительными.

Я действительно застрял здесь так рад за каждую помощь!


person Chris    schedule 14.01.2021    source источник
comment
Для последнего, возможно, это связано с ü, ö или ß символами (быстрый тест в Playground: ["a", "ü", "ö", "ß"].forEach { let full = "http://www.google.com" + $0; print("full: \(full) \(URL(string: full) != nil)") })   -  person Larme    schedule 14.01.2021