【问题标题】:Is it possible to hide iOS system alert for NFC reading session是否可以隐藏 NFC 读取会话的 iOS 系统警报
【发布时间】:2018-05-22 09:57:39
【问题描述】:

当您成功完成NFC 阅读会话时,您会看到类似的内容:

这将覆盖当前呈现的ViewController 约 3 秒。有趣的是,这种行为是不一致的,因为如果阅读会话很快结束,这个窗口会立即消失。

这意味着我无法确定这个叠加层会持续多久,这对我们应用的用户体验设计不利。

问题很简单:有没有办法强制此叠加层消失或至少处理它何时消失的事件(而不是在NFC 会话结束时)?

【问题讨论】:

  • 你能显示一些代码吗?您所描述的内容听起来好像您没有使用主队列
  • @Paulw11 它是商业产品的一部分,所以我想我不能。我确信完成是在主线程上执行的,因为它是由RxSwfit.observeOn(MainScheduler()) 处理的。此外,正如我所提到的,行为是一致的:如果阅读会话非常快(在
  • 设置NFCNDefReaderSession 时会通过什么队列?试试这个,看看你是否得到相同的行为; github.com/hansemannn/iOS11-NFC-Example
  • @Paulw11 我没有为NFCNDefReaderSession 添加自定义队列,因此它在后台选择了一些后台队列(不是主队列),但我观察了主队列上的结果。

标签: ios nfc core-nfc


【解决方案1】:

我找到了一种有趣的方法来隐藏那个窗口。只需 2 个简单的步骤:

1) 初始化阅读器会话时,将最后一个参数设置为 false:NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)

2) 在readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) 的正文中,您应该调用session.invalidate()

就是这样。它会像您点击取消/完成一样工作 - 系统窗口将立即消失。

【讨论】:

  • 实际上您可能希望将会话失效延迟大约 0.5 秒,这样用户就有机会看到复选标记屏幕
  • 这不起作用。至少在 iOS 12 上不会。无论如何,对话都会持续大约一秒钟。基本上破坏了 NFC 的任何有用应用。
猜你喜欢
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多