市販のNFCタグを買って遊んでみた
はじめに
AmazonでNFCタグをとても安く購入できたので遊んでみました。
僕が今回購入したNFCタグは以下のリンクのものです
https://www.amazon.co.jp/gp/product/B07P61XH3K/ref=ppx_yo_dt_b_asin_title_o04_s00
CoreNFCができてすぐはNFCの読み取りしかできず、Androidなど別の端末で書き込みを行わないと使い物にならない感じでしたが、iOSでもいつの間にか書き込みができるようになっていました。
NFCタグを読み取るための前準備
1.permission
info.plistに何のためにNFCタグを使うのか記載する必要があります。
Property Listから追加する場合
Privacy - NFC Scan Usage Description
Source Codeから追加する場合
<dict>
<key>NFCReaderUsageDescription</key>
<string>NFCを使うよ!</string>
...省略...
</dict>
2.Capability
Targetに対してCapabilityを追加してあげる必要があります。
NFCへの書き込み
Amazonから購入したばかりのNFCタグにはまだ何も書き込まれていないので初期状態で読み取りをすることはできません。
最近iosでもNFCタグへの書き込みができるようになったみたいですが、NFC Toolsというアプリがあったのでそちらを使って書き込みを行いました。
https://apps.apple.com/jp/app/nfc-tools/id1252962749
NFCの読み込み
import UIKit
import CoreNFC
class ViewController: UIViewController {
var session: NFCNDEFReaderSession?
override func viewDidLoad() {
super.viewDidLoad()
if NFCNDEFReaderSession.readingAvailable {
session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
session?.alertMessage = "スキャン中"
session?.begin()
} else {
// permissionが許可されていない場合ここにきます
print("NFCが使えません")
}
}
}
extension ViewController: NFCNDEFReaderSessionDelegate {
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
print("error")
}
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
for message in messages {
for record in message.records {
if let payload = String.init(data: record.payload, encoding: .utf8) {
print("payload: \(payload)")
}
}
}
}
}
enという文字が入っちゃってますが、Hello NFC!と出力することができました。