如何知道浏览器中的按钮点击动作
How to know button click action in browser
我使用自定义 url 方案在 browser.I 中打开 url 在浏览器中只有一个按钮。在浏览器中单击按钮时如何在应用程序中知道。
下面是我的参考代码:
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
}
我可以使用通用链接或深层链接吗?
如果是通用 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];
}
}
使用通用 Links
当从浏览器 linking 时,您绝对应该使用通用 Links。如果用户没有安装该应用程序并单击 URI 方案,浏览器将显示一条错误消息。有很多方法可以解决这个问题,例如 ,但这些方法非常棘手,而且往往不会一直有效。
检测浏览器中的点击
在浏览器已将控制权交给应用程序之前,不会调用应用程序委托中的函数,因此无法从应用程序本身检测到浏览器点击。您将不得不使用一些 javascript 单击事件处理程序来检测它,但是所有切换都是在 OS 级别处理的,因此您将无法控制它。
正在注册一个深度开放 link
一旦深度 [=53=] 打开您的应用程序,它将调用三个函数之一。
来自 URI 方案 (myapp://):
application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
来自通用 Link 仅当应用 运行 处于后台时 :
(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
来自通用 Link 如果应用已关闭
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
最后一个得到了大多数人的支持,因为他们认为 continueUserActivity
应该被调用,但它确实是这个函数,他们将深 link url 放在启动选项参数中。
使用 Branch 或第三方
最后,您可以使用 Branch,它在必要时同时利用 URI 和通用 Links,并将所有应用委托函数转发到一个回调,这样您就不必更新路由逻辑在三个不同的地方。
我使用自定义 url 方案在 browser.I 中打开 url 在浏览器中只有一个按钮。在浏览器中单击按钮时如何在应用程序中知道。
下面是我的参考代码:
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
}
我可以使用通用链接或深层链接吗?
如果是通用 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];
}
}
使用通用 Links
当从浏览器 linking 时,您绝对应该使用通用 Links。如果用户没有安装该应用程序并单击 URI 方案,浏览器将显示一条错误消息。有很多方法可以解决这个问题,例如
检测浏览器中的点击
在浏览器已将控制权交给应用程序之前,不会调用应用程序委托中的函数,因此无法从应用程序本身检测到浏览器点击。您将不得不使用一些 javascript 单击事件处理程序来检测它,但是所有切换都是在 OS 级别处理的,因此您将无法控制它。
正在注册一个深度开放 link
一旦深度 [=53=] 打开您的应用程序,它将调用三个函数之一。
来自 URI 方案 (myapp://):
application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
来自通用 Link 仅当应用 运行 处于后台时 :
(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
来自通用 Link 如果应用已关闭
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
最后一个得到了大多数人的支持,因为他们认为 continueUserActivity
应该被调用,但它确实是这个函数,他们将深 link url 放在启动选项参数中。
使用 Branch 或第三方
最后,您可以使用 Branch,它在必要时同时利用 URI 和通用 Links,并将所有应用委托函数转发到一个回调,这样您就不必更新路由逻辑在三个不同的地方。