Bor*_*ris 33
在Apple Developer站点中,创建一个新的App ID并确保NFC Tag Reading
已启用.
将以下行添加到.plist文件中:
<key>NFCReaderUsageDescription</key>
<string>NFC Tag!</string>
Run Code Online (Sandbox Code Playgroud)
以及这些权利文件:
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
</array>
Run Code Online (Sandbox Code Playgroud)
它应该在相应的文件中看起来像这样:
此外,还可以通过Xcode中的Capabilities选项卡启用Core NFC.
进口 CoreNFC
#import <CoreNFC/CoreNFC.h>
Run Code Online (Sandbox Code Playgroud)
并设置委托:
@interface YourViewController : UIViewController <NFCNDEFReaderSessionDelegate>
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad中:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NFCNDEFReaderSession *session = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT) invalidateAfterFirstRead:NO];
[session beginSession];
}
Run Code Online (Sandbox Code Playgroud)
在委托回调中:
- (void) readerSession:(nonnull NFCNDEFReaderSession *)session didDetectNDEFs:(nonnull NSArray<NFCNDEFMessage *> *)messages {
for (NFCNDEFMessage *message in messages) {
for (NFCNDEFPayload *payload in message.records) {
NSLog(@"Payload data:%@",payload.payload);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须添加didInvalidateWithError
委托回调,否则您将不符合协议:
- (void)readerSession:(nonnull NFCNDEFReaderSession *)session didInvalidateWithError:(nonnull NSError *)error {
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式阻止读者:
[session invalidateSession];
Run Code Online (Sandbox Code Playgroud)
进口 CoreNFC
import CoreNFC
Run Code Online (Sandbox Code Playgroud)
并设置委托:
class YourViewController: UIViewController, NFCNDEFReaderSessionDelegate
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad中:
override func viewDidLoad() {
super.viewDidLoad()
let session = NFCNDEFReaderSession(delegate: self,
queue: DispatchQueue(label: "queueName", attributes: .concurrent), invalidateAfterFirstRead: false)
session?.begin()
}
Run Code Online (Sandbox Code Playgroud)
在委托回调中:
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
for message in messages {
for record in message.records {
print(record.payload)
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式阻止读者:
session.invalidateSession
Run Code Online (Sandbox Code Playgroud)
启动视图后,您应立即看到iOS NFC阅读器对话框,如下所示:
一旦出现此对话框,您将有大约一秒钟将iPhone放置在您想要阅读的NFC标签附近.否则,该字段被停用(这似乎是苹果公司的一个错误).我经常需要取消并重试以获得一致的读数.更多细节在这里.
要解决此问题,您可以将com.apple.developer.nfc.readersession.formats
密钥添加到您的权利文件中。该密钥应与已启用的NFS类型的数组相关联。例如,您可以尝试以下操作:
<array>
<string>NDEF</string>
</array>```
It worked for me.
<img src="https://i.stack.imgur.com/I9wHX.png">
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17296 次 |
最近记录: |