市販の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!と出力することができました。

参考文献

iOS13のCoreNFCを使ってみた。

[iOS 11] 新フレームワークCore NFCを使ってNFCタグのデータを読み取ってみた #WWDC17

NFC Tools