单击 Universal Link 在我的应用程序中打开 WKWebView
Click on Universal Link open WKWebView inside my App
我在 Swift 4 中创建了一个自制的 PWA 应用程序来浏览我的网站,其中包含一些选项,例如 Firebase 和 Notifies
当我的站点在 Safari 中打开时或当用户单击朋友共享的通用 Link 时,我需要打开我的应用程序。
我使用 apple-app-site-association
正确设置了我的网站并且它有效,当我在 Safari 中打开相对 url 它显示了打开我的应用程序的提示。
但问题是当我尝试处理通用 link 当我的应用程序在 Safari 中出现的提示之间打开时,我尝试使用它(如 Apple 文档所述 universal-link)
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool{
为了更改我的 WKWebView,我使用了基于 答案的代码。
这是我在 func continue
内的 AppDelegate 代码,用于更改 WebView url:
if(userActivity.webpageURL != nil){
g_url = userActivity.webpageURL // g_url is declared at top as 'var g_url: URL?'
let notificationName = NSNotification.Name(rawValue: "updateUrl")
NotificationCenter.default.post(name: notificationName, object: nil)
return true
}else{
return false
}
这里是在ViewController里面设置url的代码:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
url = appDelegate.g_url
let notificationName = Notification.Name("updateUrl")
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.updateUrl), name: notificationName, object: nil)
updateUrl()
更新网址:
@objc func updateUrl(){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
if(appDelegate.g_url != nil){
url = appDelegate.g_url!
}else{
url = URL(string: "https://my.Site/Home")!
}
let request = URLRequest(url: url)
MyWebView.load(request)
MyWebView.navigationDelegate = self
当 Safari 调用应用程序时,WebView 页面是最后打开的页面,或者 'Home' 如果是第一次打开。
我需要了解我是否错过了什么,或者我是否应该使用其他东西来制作这个
由于 IOS 13 的最新更新,代码无法正常工作。
continue 中的 AppDelegate 函数未被调用,但在 中添加了 continue 函数SceneDelegate 它起作用了。
我得到 url 旧模式的参数(仅在一个场景下运行良好):
private(set) static var shared: SceneDelegate?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
Self.shared = self
}
在我的 ViewController 代码中设置
let appDelegate = SceneDelegate.shared?.g_url
获取变量,并且这个 Observer 调用 change
let notificationName = Notification.Name("updateUrl")
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.updateUrl), name: notificationName, object: nil)
我在 Swift 4 中创建了一个自制的 PWA 应用程序来浏览我的网站,其中包含一些选项,例如 Firebase 和 Notifies
当我的站点在 Safari 中打开时或当用户单击朋友共享的通用 Link 时,我需要打开我的应用程序。
我使用 apple-app-site-association
正确设置了我的网站并且它有效,当我在 Safari 中打开相对 url 它显示了打开我的应用程序的提示。
但问题是当我尝试处理通用 link 当我的应用程序在 Safari 中出现的提示之间打开时,我尝试使用它(如 Apple 文档所述 universal-link)
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool{
为了更改我的 WKWebView,我使用了基于
这是我在 func continue
内的 AppDelegate 代码,用于更改 WebView url:
if(userActivity.webpageURL != nil){
g_url = userActivity.webpageURL // g_url is declared at top as 'var g_url: URL?'
let notificationName = NSNotification.Name(rawValue: "updateUrl")
NotificationCenter.default.post(name: notificationName, object: nil)
return true
}else{
return false
}
这里是在ViewController里面设置url的代码:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
url = appDelegate.g_url
let notificationName = Notification.Name("updateUrl")
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.updateUrl), name: notificationName, object: nil)
updateUrl()
更新网址:
@objc func updateUrl(){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
if(appDelegate.g_url != nil){
url = appDelegate.g_url!
}else{
url = URL(string: "https://my.Site/Home")!
}
let request = URLRequest(url: url)
MyWebView.load(request)
MyWebView.navigationDelegate = self
当 Safari 调用应用程序时,WebView 页面是最后打开的页面,或者 'Home' 如果是第一次打开。
我需要了解我是否错过了什么,或者我是否应该使用其他东西来制作这个
由于 IOS 13 的最新更新,代码无法正常工作。 continue 中的 AppDelegate 函数未被调用,但在 中添加了 continue 函数SceneDelegate 它起作用了。 我得到 url 旧模式的参数(仅在一个场景下运行良好):
private(set) static var shared: SceneDelegate?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
Self.shared = self
}
在我的 ViewController 代码中设置
let appDelegate = SceneDelegate.shared?.g_url
获取变量,并且这个 Observer 调用 change
let notificationName = Notification.Name("updateUrl")
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.updateUrl), name: notificationName, object: nil)