如何知道浏览器中的按钮单击操作

时间:2018-05-11 13:30:18

标签: ios swift3 url-scheme

我使用自定义网址方案在浏览器中打开网址。我在浏览器中有一个按钮。如何在浏览器中点击按钮时知道应用程序。

下面是我的代码:

 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 个答案:

答案 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和通用链接,并将所有应用委托功能转发到一个回调,这样您就不必在三个不同的位置更新路由逻辑。