iOS 11:如何使用CoreNFC检测和读取NFC标签

注意:该项目的源代码可以在Github上找到。

iPhone三年来一直在为Apple Pay配备NFC(近场通信)阅读器,而开发人员一直在耐心地等待访问该小芯片。 随着今年秋天iOS 11的发布,Apple终于向开发人员提供了这一急需的功能。 幸运的是,我们不必等待三个月就可以开始玩了!

iOS 11的新框架之一是CoreNFC ,实际上设置起来非常简单!

注意: CoreNFC仅在iPhone 7或iPhone 7 Plus上受支持,即使其他iPhone内装有NFC芯片也是如此。

证书,标识符和配置文件

为了使用具有NFC Tag Reading功能的应用程序,您需要在Apple的证书,标识符和配置文件网页上注册应用程序ID。 前往该处,然后在“ Identifiers标题下选择“ App IDs ”。

继续并添加一个iOS应用ID,该ID与您在Xcode中使用的绑定ID相同。 您可以根据需要命名描述。 在“ App Services部分中,选择“ NFC Tag Reading ,然后单击“继续”。 完成添加新的App ID,然后回到Xcode开始!

无论您是否将此应用程序发布到App Store,都需要执行此步骤,所以请不要跳过它!

入门

就我而言,我将创建一个名为TestingCoreNFC的新项目。 创建一个新的Single View App,并根据需要命名。 我正在为此项目使用Swift,并跳过了单元测试。 继续保存到任何地方,让我们开始吧。

权益

Project Editor选择“ Capabilities 。 打开其中任何一个,然后再将其关闭。 为什么? 因为这是将权利文件添加到您的应用程序的最简单方法。 在我的情况下,它称为TestingCoreNFC.entitlements

在您的权利文件中,添加一个键为com.apple.developer.nfc.readersession.formats的数组。 在数组内部添加一个值为NDEF的字符串。

现在返回Project Editor并选择“ Build Settings选项卡。 搜索Code Signing Entitlements ,并将其值设置为权利文件的路径。

信息清单

打开您的Info.plist文件并添加新行。 选择“ Privacy — NFC Scan Usage Description作为密钥,然后将值设置为所需的值。

注意:每次启用NFC时,都会显示您设置的使用情况说明,并将其附加到以下文本:“将iPhone放在…附近”

真正的乐趣

现在我们完成了项目的设置,我们可以开始编码了!

制作一个新的Swift文件,并将其命名为NFCReader.swift

该文件的第一步是导入CoreNFC框架。

 进口CoreNFC 

注意:模拟器不支持CoreNFC因此您需要使用设备才能进行此操作

创建将包含实际NFC阅读器的类。

 类NFCReader { 
}

设置类以符合NFCNDEFReaderSessionDelegate 。 您还需要对NSObject进行子类化,因为NFC类实际上是基于Objective-C构建的。

  NFCReader类:NSObject,NFCNDEFReaderSessionDelegate { 
}

添加以下两个功能以满足协议:

  func readerSession(_会话:NFCNDEFReaderSession,didDetectNDEFs消息:[NFCNDEFMessage]){ 
用于消息中的消息{
用于记录在message.records {
打印(“找到新记录:”)
打印(record.identifier)
打印(record.payload)
打印(record.type)
打印(record.typeNameFormat)
}
}
}
  func readerSession(_会话:NFCNDEFReaderSession,didInvalidateWithError错误:错误){ 
打印(“ NFC NDEF无效”)
打印(“ \(错误)”)
}

这些功能分别说明检测和失效。 扫描代码时,将调用第一个功能。 它被设置为直接将所有数据打印到调试器。 第二个功能将打印出尝试使用NFC阅读器时收到的任何错误。

要将所有内容整合在一起,请向NFCReader类添加另一个功能:

  func beginSession(){ 
let session = NFCNDEFReaderSession(委托:self,队列:nil,invalidateAfterFirstRead:false)
session.begin()
}

每当您要开始搜索NFC芯片时,就会调用此函数。

让我们跳到ViewController.swift ,将它们组合在一起!

在名为nfcReader的类中的变量中添加一个常量:

 让nfcReader = NFCReader() 

当点击视图控制器时,添加功能以在NFC Reader中开始新的会话:

 覆盖func touchesEnded(_ touches:Set ,事件:UIEvent?){ 
nfcReader.beginSession()
}

而已! 继续并在iPhone 7或iPhone 7 Plus上运行该应用程序,然后尝试一下。 当它运行时,点击屏幕,您应该看到一个视图从底部弹出。 现在该开始扫描事物了!

您将注意到上面的屏幕截图显示“将iPhone放在火旁”。这是因为我将NFC的使用说明设置为“…火”。您的当然应该有所不同。

下一步:

播放Main.storyboardViewController.swift文件,并将它们设置为将NFC芯片的内容粘贴到屏幕上。 本教程是设置CoreNFC的准系统,但我留给您做一些独特的事情。 让我知道您在评论中正在处理哪些项目,或者遇到任何麻烦!

如果您喜欢它,别忘了👏!

注意:请记住,该软件仍处于测试阶段,因此未来几个月可能会更改!

注意:该项目的源代码可以在Github上找到。