无法获得自定义网址方案以在iOS中工作

时间:2019-12-10 20:23:47

标签: ios swift url-scheme

我创建了一个快速示例应用程序,该应用程序只是一个带有按钮的页面,单击该应用程序将启动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方案正常工作?我在某个地方错过了一步吗?还有我不知道的事吗?任何帮助将非常感激。谢谢

1 个答案:

答案 0 :(得分:0)

这里是test project

我所做的唯一更改就是将网页更新为以下内容。 PHP没问题,因为我没有PHP设置。

此外,您还会在Scene Delegate的

中获得回调

func scene(_ scene:UIScene,openURLContexts URLContexts:Set)

children