LoginSignup
5
4

More than 5 years have passed since last update.

coreNFCを使いバックグラウンドでNFCタグを読み取れるか

Last updated at Posted at 2019-03-31

案件でNFCタグをアプリを起動せずに読み込めるかどうかを検証したので、
備忘録として。

動作環境

  • Xcode10.1
  • iPhoneXS

iPhoneXS以降

URLタイプのNFCタグであればアプリがなくてもタグを読み込むことが可能。
Universal Linksを使うことで特定のアプリを開くことも可能なので
いろいろなことができそう。

ただし、端末がOFFのとき・カメラが起動されているときは
NFCタグを読み込むことができない。

iPhone7 ~ iPhoneXまで

NFCタグを読み込むためには、アプリが必要。
下記サンプルソースでログにNFCタグに書き込んだ内容を取得することが可能。

サンプルソース

import UIKit
import CoreNFC

final class ViewController: UIViewController {

    private var session: NFCNDEFReaderSession?

    override func viewDidLoad() {
        super.viewDidLoad()
        // NFCの利用制限確認
        if NFCNDEFReaderSession.readingAvailable {
            // invalidateAfterFirstReadは連続でNFCタグを読み込むかどうか(true : 一回 false: 複数回)
            self.session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
            self.session?.alertMessage = "NFCタグをiPhoneに近づけてください" 
            // 読み取り開始
            self. session?.begin()
        } else {
            print("❎端末的に使えないよ❎")
        }
    }
}

extension ViewController: NFCNDEFReaderSessionDelegate {
    /// 読み取りエラーが起こった時呼ばれる。ユーザーがキャンセルボタンを押すか、タイムアウトしたときに呼ばれる。
    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
        print("Error: \(error.localizedDescription)")
        print("🙅‍♂️エラー")
    }

    /// 読み取りに成功したら呼ばれる。
    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
        for message in messages{
            for record in message.records {
                print(String(data: record.payload, encoding: .utf8))
                print("👌読み取ったよ")
            }
        }
    }
}

まとめ

iPhoneXS以降の端末であればアプリを起動していなくても、URLタイプのみNFCタグを読み込むことができるが、
画面がオンの状態じゃないといけないのが難点かもしれない。
また、iPhone7~iPhoneXまでは別途アプリが必要なので、今のところはバックグラウンドでNFCタグを読み込むのは
限定的すぎて現実的ではなさそうでした。

参考記事

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4