はじめに
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タグ
- Amazonで買えます。10枚で1000円くらいで買えます。http://amzn.to/2u21W2i
追記
CoreNFCのセッション動画がアップされてました。
(実際はセッションはしてないはず)
* https://developer.apple.com/videos/play/wwdc2017/718/