自定义 URL 方案

Posted

技术标签:

【中文标题】自定义 URL 方案【英文标题】:Custom URL schemes 【发布时间】:2017-11-14 16:52:48 【问题描述】:

如何处理以允许将一个应用程序定向到另一个应用程序?例如instagram://user?username=someusername 通过用户名将用户直接引导至用户个人资料。我需要创建类似的东西。

我已经检查了application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Boolapplication(_ application: UIApplication, handleOpen url: URL) -> Bool,但是在尝试实施时它们似乎有一条红线,所以我认为它们已被弃用。此外,当我从浏览器通过 url 打开我的应用程序时,它们似乎没有被调用。

【问题讨论】:

当方法被弃用时,警告通常会告诉您应该使用哪种方法。 @EmilioPelaez 没有出现警告 无论您在哪里看到它已被弃用,它都可能说明现在要使用什么。或者你可以谷歌搜索 UIApplication 的文档。 【参考方案1】:

以这个网址为例:appName://?id=12345

你可以在你的应用程序中使用这样的 url 启动后做一些事情

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool 
    let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false)
    if let items = urlComponents?.queryItems as [NSURLQueryItem]?,
        (url.scheme == "appName") 
        if items.first?.name == "id",
            let id = items.first?.value 
            print(id) // prints 12345 to console
            // do something with the id, possibly present/push a controller for the user
        
    
    return false

【讨论】:

【参考方案2】:

ios 13 及以上版本以下功能将不再起作用。

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

从 iOS 13 及更高版本更新的功能

 func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>)

SceneDelegate 类中使用此函数。 信用:https://www.swiftdevcenter.com/custom-url-scheme-deep-link-ios-13-and-later-swift-5/ 更多详情请关注this tutorial

【讨论】:

以上是关于自定义 URL 方案的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 自定义 URL 方案不再有效

自定义 URL 方案

自定义 URL 方案的问题

第一次未调用 Cocoa 自定义 URL 方案选择器

在 Cordova 中使用带有自定义 URL 方案的 handleOpenURL

我可以在 Phonegap Build 中为 iOS 定义自定义 URL 方案吗?