处理“手机” URL方案在实际设备上不起作用

时间:2019-06-28 13:08:40

标签: ios swift iphone

我制作了一个非常简单的应用程序来打开mobilephone URL(“测试器”):

    let url = URL(string: "mobilephone:Test?index=1")

    UIApplication.shared.open(url!) { (result) in
        if result {
            print("success!")
        }
        else {
            print(result)
        }
    } 

然后,我添加了另一个带有该URL处理程序的应用程序(“ Handler”)(位于AppDelegate中)

func application(_ application: UIApplication,
                 open url: URL,
                 options: [UIApplication.OpenURLOptionsKey : Any] = [:] ) -> Bool {


    // Determine who sent the URL.
    let sendingAppID = options[.sourceApplication]
    let source = "\(sendingAppID ?? "Unknown")"

    let alert = UIAlertController(title: source, message: url.absoluteString, preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
    self.window?.rootViewController?.present(alert, animated: true, completion: nil)

    return true
}

当然,我在Project→Info→URL Types中注册了该方案,其中mobilephone为方案,而我的应用程序标识符为Identifier。

这在模拟器上效果很好。当我在iPhone 8模拟器上运行两个应用程序时,我可以打开测试仪,尝试打开URL,它会切换到处理程序应用程序并显示消息框。到目前为止一切顺利。

但是随后我将两个应用程序都部署到了运行iOS 12.3.1的真实iPhone 8手机上,并且未处理该URL。测试器应用从false报告UIApplication.shared.open,并且处理程序应用未启动。我想我缺少一些注册部分,但无法弄清楚。有什么帮助吗?

编辑:似乎当我将方案更改为某个随机名称时,它可以正常工作……mobilephone方案是否以某种方式保留?我在保留方案列表中没有看到它。

2 个答案:

答案 0 :(得分:2)

您可能无法注册这样的URL。它由“电话”应用程序注册。

您可以通过进入Safari并键入:mobilephone://test来分辨。它将提示您打开“电话”应用程序,然后说:“ Safari无法打开该URL,因为它无效”。

编辑:自iOS 10+起,该URL不再有效。。这是被阻止的URL列表(以及打开的设置更新):http://appcofe.blogspot.com/2016/10/apple-blocked-41-app-url-scheme-on-ios_18.html

https://imgur.com/a/tpTcqOs

enter image description here enter image description here enter image description here

在iPhone X(NQAJ2LL / A)-iOS 12.2(16E227)上进行了测试

答案 1 :(得分:0)

尝试server { listen 443; ... location / { proxy_pass http://app; proxy_pass_header Set-Cookie; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_connect_timeout 120; proxy_send_timeout 120; proxy_read_timeout 120; send_timeout 120; error_page 404 = @cms; proxy_intercept_errors on; } location @cms { proxy_pass http://cms; proxy_pass_header Set-Cookie; proxy_set_header Host $host:8081; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Scheme on; # not working proxy_set_header App-Cookies $http_set_cookie; proxy_redirect http:// $scheme://; } }