LoginSignup
5

More than 5 years have passed since last update.

iOS11のCoreNFCの使い方

Last updated at Posted at 2017-06-08

はじめに

WWDC2017で発表になったiOS11の新しいフレームワークであるCoreNFCですが、早速使ってみました。しかも流行りのSwiftではなくObjective-Cで書いておきます。

基本的な呼び出し方は、すでに何人かの方が書いているので参考にしてもらえればと思います。AppID、Info.plistでのPrivacyなどなど。

で、最初ドキュメントのとおりにやったらエラーで表示できなくて、何が行けないのか調べたところ、

entitlements

に1行書けと。
そんなのどこにも書いてないよって感じの情報でした。Twitterで回答してる人がいて助かりました。

ではコードを書いてみます

CoreNFCでは2つのdelegate(成功とエラー)を書くわけですが、基本的に取得する内容は

@property (nonatomic, assign) NFCTypeNameFormat typeNameFormat;
@property (nonatomic, copy) NSData *type;
@property (nonatomic, copy) NSData *identifier;
@property (nonatomic, copy) NSData *payload;

の4つしかありません。
NFCは仕様がいくつかあるので、typeなどによってpayloadを解析してあげないといけません。後はこんな感じでやるだけです。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.nfcSession = [[ NFCNDEFReaderSession alloc ]
        initWithDelegate:self queue:nil invalidateAfterFirstRead:TRUE ];
    [ self.nfcSession beginSession ];

}

- (void)readerSession:(NFCNDEFReaderSession *)session
       didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages
{
    for ( NFCNDEFMessage *message in messages ) {
            // 複数ある可能性があるので
        for ( NFCNDEFPayload *record in message.records ) {

            // record.typeNameFormat;
            // record.type;
            // record.identifier;
            // record.payload;
        }
    }
}
- (void)readerSession:(NFCNDEFReaderSession *)session
        didInvalidateWithError:(NSError *)error
{
    // エラーとか読み込み終了とか    
}

ここまではそんなに難しくない(解析は自分でやらないといけないため)です。あとは仕様書とにらめっこしながらバイナリを解析していきましょう。

参考
* https://developer.apple.com/documentation/corenfc

NFCタグ

追記
CoreNFCのセッション動画がアップされてました。
(実際はセッションはしてないはず)
* https://developer.apple.com/videos/play/wwdc2017/718/

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