我使用自定义网址方案在浏览器中打开网址。我在浏览器中有一个按钮。如何在浏览器中点击按钮时知道应用程序。
下面是我的代码:
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
}
我可以使用通用链接还是深层链接?
答案 0 :(得分:0)
如果是Universal Link 您应该实现委托方法。希望这段代码会有所帮助。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURLComponents *URLComponents = [NSURLComponents componentsWithURL:userActivity.webpageURL resolvingAgainstBaseURL:YES];
[[UniversalLinksManagerLocator model] handleDeepLink:userActivity.webpageURL];
}
}
答案 1 :(得分:0)
从浏览器链接时,您绝对应该使用Universal Links。如果用户未安装应用程序并且他们单击URI方案,则浏览器将显示错误消息。有很多方法可以解决这个问题,比如javascript redirect,但是这些方法非常黑客,而且往往不会一直有效。
在应用程序已经从浏览器获得控制权之前,不会调用应用程序委托中的功能,因此无法从应用程序本身检测到浏览器点击。您必须使用一些javascript点击事件处理程序来检测,但所有切换都是在操作系统级别处理的,因此您无法控制它。
深层链接打开您的应用后,它会调用三个功能之一。
来自URI Scheme(myapp://):
application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
仅在应用程序在背景中运行时从通用链接:
(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
如果应用关闭则来自Universal Link
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这最后一个人得到了大多数人,因为他们认为continueUserActivity
应该被调用,但它确实是这个功能,他们将深层链接url放在启动选项参数中。
最后,您可以使用Branch在必要时利用URI和通用链接,并将所有应用委托功能转发到一个回调,这样您就不必在三个不同的位置更新路由逻辑。