如何拦截任何 UIApplication openURL 调用?

Posted

技术标签:

【中文标题】如何拦截任何 UIApplication openURL 调用?【英文标题】:How to intercept any UIApplication openURL calls? 【发布时间】:2014-04-08 22:38:11 【问题描述】:

我正在使用WeChat SDK 将我应用的一些内容分享到微信。根据我的观察,分享功能以UIApplicationopenURL 启动微信应用。微信开发人员没有处理的一个极端情况是在根本没有安装微信应用程序时显示警告。我想自己处理这种情况,首先检查canOpenUrl 与传递给openURL 的相同URL。不幸的是,我不知道微信 URL 方案,因为我只有它们的头文件和编译文件。有什么方法可以拦截任何openURL 调用以找出正在打开的 URL?

【问题讨论】:

【参考方案1】:

子类UIApplication 并让应用使用您的子类。在您的子类中,覆盖 openURL: 并添加您的逻辑。如果您愿意继续打开操作,请致电[super openURL:...];

通过编辑 main.m 文件教应用使用您的自定义子类:

return UIApplicationMain(argc, argv, NSStringFromClass([XXApplication class]), NSStringFromClass([XXAppDelegate class])); 

(假设XXApplication 是您的应用程序子类,XXAppDelegate 是您的应用程序委托类,请记住导入适当的标头)

【讨论】:

这将有助于指出如何设置应用程序/项目以使用自定义 UIApplication 子类。 我明白了。 - (BOOL)openURL:(NSURL *)url NSLog(@"%@", url); return [super openURL:url];。方案是这样的:weixin://app/wxd930ea5d5a258f4f/sendreq/?。显然“微信”是微信的中文名称。

以上是关于如何拦截任何 UIApplication openURL 调用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIApplication.shared.open 连续调用多个 URL - 仅先打开

js打开新窗口并且不被拦截

window.open被拦截

关于window.open()被拦截

window.open方法被浏览器拦截的处理方式

JS window.open()拦截问题解决方案