ios - 拦截广告 View 上的触摸,呈现警报,根据响应前进

标签 ios swift admob

我有一个应用程序使用 Google 移动广告 SDK 来显示队列中的广告。我希望能够检测到用户何时点击广告(而不仅仅是在滚动时触摸它)。如果我检测到他们已单击,我希望能够显示一条警报,通知用户如果他们继续,他们将离开该应用程序,为他们提供两个选项 - 一个继续,另一个取消。如果他们选择继续,那么我不想打断他们点击广告时发生的默认操作。如果他们选择取消,我不希望发生任何事情。

我已经通读了 Apple 的文档:https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/multitouch_background/multitouch_background.html#//apple_ref/doc/uid/TP40009541-CH5-SW9

并尝试在实际广告 View 的容器 View 上覆盖 hitTest:withEvent:。这让我可以检测到触摸,但我无法判断是实际触摸还是用户滚动。此外,我无法通过警报同步停止 hitTest 的返回。该函数在警报返回响应之前完成(这是预期的)。

我也研究过合成触摸事件,但似乎非常不鼓励这样做,也许唯一的方法是使用我不想做的私有(private) API。

我觉得我离这里很近了,但仍然缺少一些东西,假设我正在尝试做的事情是可能的。

最佳答案

对于问题的第一部分,您可以在包含广告的 View 顶部创建一个没有文本的清晰 UIButton,这样您就可以拦截触摸而不必担心滚动。我认为使用响应者链是错误的方法,因为你想要一个需要用户响应的事件在你检测到触摸和你希望广告事件触发之间触发,所以没有办法甚至暂停它并允许它在以后继续。

我不确定你问题的第二部分,因为我对 Google Ads 没有太多经验,但我怀疑他们已经关闭了任何允许你在没有用户交互的情况下程序性触发广告事件的方法它会使系统容易受到滥用。那只是我的怀疑,可能是错误的。如果我错了,那么值得探索的途径是在 Google Ads 框架内的任何按钮上调用 sendActionsForControlEvents(如果它们被公开)。如果它们没有公开,您可以递归搜索您有权访问的顶级 View 的 subview ,并检查它们是否属于 UIButton 类型。有可能他们甚至不使用 UIButton,所以这可能是一条死胡同。

关于ios - 拦截广告 View 上的触摸,呈现警报,根据响应前进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514736/

相关文章:

ios - 我们如何使用带有 iOS GLKTextureLoader 的 RGB565 格式的纹理?

ios - Alamofire HTTP 请求失败

iPhone 应用程序像 iPad 应用程序一样在 iPad 上打开

ios - 类型为 "Date & Time"的 UIDatePicker 只返回日期而不返回时间

swift - 从 Swift 函数返回混合值类型时遇到问题

ios - 为什么我的标签没有隐藏?

ios - 存储 UISwitch 状态的问题

ios - 通过 AdMob 集成 MillenialMedia 中介时出错

java - 如何在 Android WebView 中正确实现 AdMob 插页式广告?

angular - 有没有办法将 google adsense 或 admob 添加到 ionic Angular PWA?