我使用自定义网址方案在浏览器中打开网址 . 我在浏览器中有一个按钮 . 如何在浏览器中点击按钮时在应用程序中知道 .
下面是我的ref代码:
let customURL = URL(string: customURLScheme)!
if UIApplication.shared.canOpenURL(customURL) {
if #available(iOS 10.0, *) {
// UIApplication.shared.open(customURL)
UIApplication.shared.open(customURL, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(customURL)
}
}
在Appdelegate
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
我可以使用通用链接还是深层链接?
2 回答
在Universal Link的情况下你应该实现委托方法 . 希望这个片段会有所帮助 .
使用通用链接
从浏览器链接时,您绝对应该使用Universal Links . 如果用户未安装应用程序并且他们单击URI方案,则浏览器将显示错误消息 . 有很多方法可以解决这个问题,比如javascript redirect,但是这些方法非常黑巧,而且往往不会起作用 .
检测浏览器中的点击
在应用程序已从浏览器获得控制权之前,不会调用应用程序委托中的功能,因此无法从应用程序本身检测浏览器单击 . 您将不得不使用一些javascript单击事件处理程序来检测它,但所有切换都在操作系统级别处理,因此您将无法控制它 .
从深层链接注册打开
深层链接打开您的应用后,它将调用三个功能之一 .
From URI Scheme (myapp://) :
application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
From Universal Link ONLY WHEN APP IS RUNNING IN BACKGROUND :
(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
From Universal Link if app is closed
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这最后一个得到了大多数人,因为他们认为
continueUserActivity
应该被调用,但它确实是这个功能,他们将深层链接url放在启动选项参数中 .使用分支机构或第三方
最后,您可以使用Branch,在必要时利用URI和通用链接,并将所有应用程序委托功能转发到一个回调,这样您就不必在三个不同的位置更新路由逻辑 .