我创建了一个快速示例应用程序,该应用程序只是一个带有按钮的页面,单击该应用程序将启动SFSafariViewController,其URL指向我创建的本地主机页面。本地主机页面上只有一个指向mytestapp:// hello的链接。我通过将Mytestapp网址方案添加到“ URL类型”部分中,在Xcode的我的应用程序设置中注册了它。计划是在将URL方案实施到要构建的主应用程序之前,确保URL方案能够正常工作,但是当我单击localhost页面中的链接时,没有任何反应。 SFSafariViewController完美加载,本地页面正确加载,我单击链接,但没有任何反应。
我已在应用程序委托的application(:url:options)方法中添加了一个简单的打印语句,但始终无法运行。
这是ViewController代码...
import UIKit
import SafariServices
class ViewController: UIViewController, SFSafariViewControllerDelegate {
@IBOutlet weak var launchButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func launchTap(_ sender: UIButton) {
guard let url = URL(string: "http://localhost.dcom/test/proof.php") else {
print("Unable to create the URL")
return
}
let authorizationController = SFSafariViewController(url: url)
authorizationController.delegate = self
present(authorizationController, animated: true, completion: nil)
}
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
print("safari completed")
}
}
和此处的应用程序委托方法...
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
print("app received url: \(url)")
guard let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true), let message = components.path else {
print("Invalid URL")
return false
}
print("The message received was \(message)")
return true
}
我不知道为什么这行不通,似乎我做了我应该做的所有事情,但是应用程序委托中的打印行从未被调用。
不确定是否需要它,但是以防万一,我的localhost页面实际上只是...
<?php
echo '<a href="mytestapp://hello">Here goes nothing</a>';
是否有某些东西可能无法在xcode的仿真器中工作,并且必须在实际设备上才能使URL方案正常工作?我在某个地方错过了一步吗?还有我不知道的事吗?任何帮助将非常感激。谢谢
答案 0 :(得分:0)
这里是test project
我所做的唯一更改就是将网页更新为以下内容。 PHP没问题,因为我没有PHP设置。
此外,您还会在Scene Delegate的
中获得回调func scene(_ scene:UIScene,openURLContexts URLContexts:Set)
children