【问题标题】:iOS 11 CoreNFC How To Check if device has NFC Capability?iOS 11 CoreNFC 如何检查设备是否具有 NFC 功能?
【发布时间】:2017-08-28 03:27:43
【问题描述】:

如何检测 iPhone 是否具备使用核心 NFC 框架提供的 NFC 芯片的能力?

我现在知道它只适用于 iPhone 7 和 7 plus,但我不想硬编码硬件字符串标识符,因为我不知道未来会推出哪些设备。

【问题讨论】:

标签: ios iphone nfc ios11 core-nfc


【解决方案1】:

您可以使用readingAvailable 类属性:

if NFCNDEFReaderSession.readingAvailable {
    // Set up the NFC session
} else {
    // Provide fallback option
}

【讨论】:

  • 在 iPhone 7 Plus 和 iPhone 6S 上工作和测试。 7 显示了 NFC 按钮,而 6S 没有。
  • 如果我只使用上面的块,它会在 iPhone 7 上返回 false。=/ 我需要做更多吗?
  • @iori24 你是在物理设备上测试吗?
  • @Paulw11 是的。物理设备
【解决方案2】:

iOS 12 更新:

1) 如果您只想为 iPhone 7 和更新机型运行您的应用,您可以在Info.plist 中添加 NFC 要求:

<key>UIRequiredDeviceCapabilities</key>
    <array>
        // ... your restrictions
        <string>nfc</string>
    </array>

有了这个要求,只有配备 NFC 的设备才能从 App Store 下载我们的应用程序。

2) 对于 iPhone 7 之前的 iPhone 和 iPad 支持,您还必须检查 Core NFC 是否可用,因为这些设备不包括。这就是为什么你应该使用Weak Linking链接Core NFC框架:

然后检查代码中Core NFC 的可用性:

var isNFCAvailable: Bool {
    if NSClassFromString("NFCNDEFReaderSession") == nil { return false }
    return NFCNDEFReaderSession.readingAvailable
}

如果isNFCAvailable返回true,那么您可以使用Core NFC提供的所有API,而不必担心您的应用崩溃。

【讨论】:

    【解决方案3】:

    还要检查 iOS

    import CoreNFC
    .
    .
    // Check if NFC supported
    if #available(iOS 11.0, *) {
       if NFCNDEFReaderSession.readingAvailable {
          // available  
       }
       else {
         // not
       }
    } else {
      //iOS don't support
    }
    

    【讨论】:

      【解决方案4】:

      可以查看苹果https://developer.apple.com/support/required-device-capabilities/的设备列表(很长,使用:cmd-f + "nfc")

      【讨论】:

      • 问题是基于代码的解决方案,如果运行代码的设备支持 NFC,则允许人们签入他们的代码。这使它成为未来的证明,您不必稍后更改代码来支持或删除设备。
      • 最初的问题对我来说毫无意义,因为如果设备没有,具有 NFC 功能的应用程序将拒绝安装。所以你看到了通知。安装和执行另一个代码来查看另一个通知是没有意义的。
      • 这个问题是在大约 5 年前提出的,当时有设备可以运行 iOS 11 并且可以使用可以打开和关闭 NFC 访问的应用程序。这在今天仍然适用于 iPad、Mac 和 iOS 混合应用程序。此外,您还可以在非 NFC 手机上安装 NFC 应用程序,除非开发人员声明该应用程序应仅限于 NFC 手机。如果开发者不限制,可以安装在非NFC手机上。
      • 好的,很好的信息
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 2016-08-31
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      相关资源
      最近更新 更多