ハイライト
iOS 14では、Core NFCのタグAPI完了ハンドラでResult enumを使用できるようになり、ISO15693の大容量メモリとセキュアな運用サポートが拡張されます。開発者は、NFC の読み取りおよび書き込み結果を処理するときに、成功または失敗の分岐に従ってコードを直接作成できます。
主要内容
NFC の問題は通常、スキャン操作自体ではなく、スキャン後のアプリのプロセスにあります。パーキングメーター、共有スクーター、充電スタンド、またはレストランのメニューに NFC タグが付けられると、ユーザーは iPhone でタッチしたときに正しいページに入ることを望みます。コア NFC は、エンティティ オブジェクトのタグを読み取り、データをアプリに渡す役割を果たします。
iPhone 7 以降、アプリは最大 60 秒間 NFC 読み取りセッションを開始できます。 iPhone XS 以降、画面がオンで、NFC フォーラムの NDEF メッセージにユニバーサル リンクが含まれている場合、システムはバックグラウンドでタグを読み取り、通知バナーを表示することもできます。ユーザーがバナーをクリックすると、この NDEF メッセージは次で終わります。NSUserActivityフォームにアプリを入力してくださいUIApplicationDelegate restoration handler。
このセッションの焦点は、2 つの開発の詳細にあります。まず、Core NFC はタグ API で Swift を使用します。Resultenum では、成功結果とエラー結果を同じ完了ハンドラー パラメーターに入れます。 2番、NFCISO15693TagISO15693 第 3 版仕様の強化された機能を入手して、より大きなメモリ タグとセキュリティ操作をカバーします。
どちらの変更も実際のデバイスのデバッグを対象としています。開発者は、複数のオプションの戻り値からタグ コマンドの成功または失敗を判断する必要がなくなりました。 ISO7816、MIFARE、または ISO15693 タグを処理する場合、成功データとエラー パスを個別に明確に記述することもできます。
詳細
NDEF とバックグラウンド タグのエントリ
(01:17) Core NFC の基本モデルは、最大 60 秒の読み取りセッションです。講演では、Core NFCがNDEFの読み書きに加え、ISO7816、FeliCa、MIFARE、ISO15693などのネイティブタグプロトコルをサポートしていることが明確に述べられている。
NFC tag contains an NFC Forum NDEF message with a universal link
-> iPhone XS or later reads the tag in the background while the screen is on
-> the system shows a notification banner
-> the user taps the banner
-> the app receives the NDEF message as NSUserActivity via UIApplicationDelegate restorationHandler
キーポイント:
- バックグラウンド読み取りでは、NDEF メッセージにユニバーサル リンクが含まれている必要があります。
- システムは最初に通知バナーを表示し、次にユーザーがそれをクリックしてデータをアプリに渡します。
・アプリ側で受信するのは
NSUserActivity、入り口は次のとおりですUIApplicationDelegate復元ハンドラー。 - 他のネイティブ タグ プロトコルは、依然として Core NFC のリーダー セッションを通じてアプリ内で処理されます。
Result enum により ISO7816 コマンドがより明確になります
(02:48) iOS 14 より前では、ISO7816 タグの送信コマンド完了ハンドラーには 4 つのパラメーターがありました。アプリは、最初にオプションのエラーを確認してから、他のパラメータを解析する必要がありました。 iOS 14 に新しい署名が戻るResult<NFCISO7816ResponseAPDU, Error>、成功時に取得NFCISO7816ResponseAPDU、失敗時に取得Error。
detectedTag.sendCommand(apdu: apdu) { (result: Result<NFCISO7816ResponseAPDU, Error>) in
switch result {
case .success(let responseAPDU):
/// Handle NFCISO7816ResponseAPDU object.
case .failure(let error):
/// Handle Error object.
}
}
キーポイント:
detectedTag.sendCommand(apdu: apdu)検出された ISO7816 タグに APDU コマンドを送信します。- 完了ハンドラーは 1 つだけを受け取ります
result、タイプはResult<NFCISO7816ResponseAPDU, Error>。 .success(let responseAPDU)タグの読み取りに成功した後に取得される応答オブジェクトに対応します。 -.failure(let error)失敗したコマンドに対応するエラー オブジェクト。 -switch result成功パスと失敗パスを構造的に分離しておきます。
MIFARE 書き込みも結果処理に変更
(03:49) WWDC 2019 の NFCFishTag サンプル プロジェクトを使用して移行をデモします。CouponViewControllerwrite 関数に次のように入力します。sendMiFareCommand新しいものと交換してくださいResultサイン。 success ブランチは返されたデータを処理し、error ブランチはエラーを処理します。
// You need to zero-pad the data to fill the block size
if blockData.count < blockSize {
blockData += Data(count: blockSize - blockData.count)
}
let writeCommand = Data([writeBlockCommand, offset]) + blockData
tag.sendMiFareCommand(commandPacket: writeCommand) { (response: Result<Data, Error>) in
switch (response) {
case .success(let responseData):
if responseData[0] != successCode {
self.readerSession?.invalidate(errorMessage: "Write tag error. Please try again.")
return
}
let newSize = data.count - blockSize
if newSize > 0 {
self.write(data.suffix(newSize), to: tag, offset: (offset + 1))
} else {
self.readerSession?.invalidate()
}
case .failure(let error):
let message = "Write tag error: \(error.localizedDescription). Please try again."
self.readerSession?.invalidate(errorMessage: message)
}
}
キーポイント:
- 書く前に
blockDataそれを補うblockSize、これは公式クリップの最初のステップです。 -writeCommand書き込みコマンド、オフセット、現在のブロックデータで構成されます。 -sendMiFareCommand完了ハンドラーが戻りますResult<Data, Error>。 .success(let responseData)ブランチチェックresponseData[0]と等しいですかsuccessCode。- 書き込み後にデータが残っている場合、コードが再帰的に呼び出されます
self.write、と置きますoffsetプラス1。 -.failure(let error)ブランチはエラー情報をに渡します。readerSession?.invalidate(errorMessage:)。
ISO15693 大容量と安全な運用のカバレッジを強化
(04:37)コア NFC でNFCISO15693TagISO15693 第 3 版 2019 仕様で定義された拡張機能がプロトコルに追加されています。スピーチで挙げられた用途は非常に具体的で、より大きなメモリ サイズのタグと安全な操作です。
NFCISO15693Tag enhancements mentioned in the session:
- fast reading multiple blocks
- extended write multiple blocks
- authenticate
- key update
- challenge
- read buffer
- extended get multiple blocks security status
- extended fast read multiple blocks
- send request
キーポイント:
fast reading multiple blocksそしてextended fast read multiple blocksマルチブロック読み取り用。 -extended write multiple blocks拡張機能用に書きます。 -authenticate、key updateそしてchallengeセキュリティ関連の操作です。 -send requestこれは、アプリが必要とするデータ パケットを送信するために使用される新しい汎用送信コマンドです。- この一連の機能は、講義では関数シグネチャのリストとしてのみ登場し、この記事では、提供されていない Swift メソッド シグネチャについては説明しません。
重要ポイント
-
オンサイトラベル書き込みツールを作成: 店舗、ブース、または設備のステッカーに NDEF URL を書き込みます。実行する価値がある理由: セッションと公式リソースの両方で、iPhone から NFC タグを作成するシナリオが示されています。開始方法: 使用する
NFCNDEFReaderSessionNDEF の読み取りと書き込みを処理するには、まずユニバーサル リンクを書き込み、次に実際の iPhone を使用してバックグラウンド読み取りパスを確認します。 -
駐車場、レンタル、または充電の入り口を物理デバイスに接続します: ユーザーがタグに触れて、支払いページまたは起動ページに入るようにします。実行する価値がある理由: この講演では、コア NFC の典型的なシナリオとして、パーキング メーター、スクーターのレンタル、電気自動車の充電ステーションが挙げられています。開始方法: タグの NDEF メッセージにユニバーサル リンクを含めると、アプリは次から起動します。
NSUserActivity特定のデバイスまたはサイトのコンテキストを復元します。 -
ISO15693在庫検査や設備メンテナンスを行うアプリ: iPhoneを使用して、大容量のISO15693タグのステータスデータを読み取ります。実行する価値がある理由: iOS 14 で追加された ISO15693 の機能強化は、マルチブロック読み取り、拡張書き込み、安全な操作をカバーします。開始方法: 使用する
NFCTagReaderSessionISO15693 タグを接続し、デバイス プロトコルに従って高速読み取り、拡張書き込み、または認証を選択します。 -
古いプロトコル タグのデバッグ パネルを作成: ISO7816、MIFARE、FeliCa、ISO15693 のコマンド応答を記録します。価値がある理由: iOS 14 以降、コア NFC はこれらのネイティブ タグ プロトコルをサポートしています
Result署名により、エラー経路が明確になります。開始方法: まず公式 Web サイトに接続しますsendCommandまたはsendMiFareCommand断片、置く.success応答と.failureエラーはそれぞれログに書き込まれます。
関連セッション
- ユニバーサル リンクの最新情報 - アプリにジャンプするための NDEF バックグラウンド タグのリンク ベースを完成させるのに適したユニバーサル リンクと関連ドメインについて説明します。
- App Clip の設定とリンク — NFC、QR コード、App Clip コード、Web リンクを通じて App Clip を呼び出す方法について説明します。
- App Clip を探索する — NFC などの現実世界のポータルを、短く焦点を絞った App Clip に設計する方法について説明します。
- App Clip を合理化する — 一般的な短いプロセスのトランザクション、通知、NFC トリガー後の完全なアプリ移行設計を補足します。
コメント
GitHub Issues · utterances