- 
							
							Core NFCのエンハンスメントこのセッションでは、AppをNFCに対応させ、NDEFの書き込みや広く採用されているネイティブのタグプロトコルのサポートといった最新機能を活用する簡単な方法について紹介します。 リソース関連ビデオWWDC20Tech TalksWWDC17
- 
							このビデオを検索(音楽) (歓声と拍手) Core NFC Enhancementsへようこそ WWDCと昨日のBashは楽しみましたか? 私はNFCソフトウェアチームの ゴードンです ローレンスもあとで登場します では始めましょう 2年前 Core NFCフレームワークで NDEFタグを読み取る機能を 導入しました 昨年はバックグラウンドでの タグスキャンで NDEFタグの自動検出と アプリケーション起動が可能に Core NFCフレームワークの 導入以来― ある要望をいただいてきました 今年はその要望に応え NDEFタグ書き込みと ネイティブタグアクセスを 可能にしました (歓声と拍手) どうも (含み笑い) (拍手) NDEFフォーマットタグの 読み書き以外に ネイティブプロトコルで タグの操作も可能です NFCで様々なことが できるようになります パスポートの読み取り 非接触型ICカード NFC対応ハードウェアの操作など iPhone 7以降で対応しています APIの変更点の説明後 NDEFタグの書き方を確認します 次に ネイティブタグアクセスの説明 最後にこれらのデモを行います まずAPIの変更点です Core NFCフレームワークの 全体構造に変更はなく アプリケーションが Reader Sessionを取得 セッションが有効になれば NFC操作が可能です タグ読み取りの アクションシートが表示され タグ書き込みと ネイティブタグアクセスが可能です バックグラウンドのタグスキャンは NDEFフォーマットを要し 読み取り専用です さらに― 最大スキャン時間は 各セッション60秒のままです 新しい点は? 新たなNFCTagReaderSessionは アプリケーションでスキャンや タグへの接続を可能にします ポーリングサイクルの停止や再実行で 新しいタグの検出などもできます NFCNDEFReaderSessionも タグ書き込み用に修正しました 提供されるNFCタグオブジェクトで 新たなタグに基づく インターフェイスが使用可能です 新たなタグのプロトコルは ご覧のとおり 主要な種類ばかりです NDEF ISO7816 MIFARE ISO15693とFeliCaです NFC技術に詳しくなければ 最初はNDEFを提案します では 使い方の基本的な手順です まずコアシンタックスの エンタイトルメントを有効に これはNFC機能を有効にする例です 特に許可は要りません 異なる2つの機能があります NDEF用と ネイティブタグアクセス用です 次にどちらの機能が必要か決め 適切なReader Sessionを使用 デリゲートコールバックで タグを受け取り― Reader Sessionでタグに接続します この段階でタグオブジェクトを使った 操作が可能です 終わったらセッションを無効にし タグをリリース NFCに慣れていなければ 最初はNDEFから始めてください NFC機能の追加が最も簡単です NDEFフォーマットタグなら 種類を問わず 素早く実装と プロトタイピングが可能です 例えば QRコードと同じ方法で 既存のユースケースに組み込めます さらに 直接iOSから バックグラウンドで― タグスキャンに対応する NFCタグを作成できます それでは… どうも (拍手) NDEFタグへの書き込みは簡単です NFCNDEFReaderSessionを使用します didDetectタグのコールバックを実装し NDEFタグを受け取ります これで様々なことができます 最大容量を含むタグに関する― NDEF関連情報のクエリ 書き込み可能か否かの判断 NDEFメッセージの読み書きも可能です タグがロック可能なら 書き換えも防げます ではコードです まずNFCNDEFReaderSessionの インスタンスを生成 デリゲートを提供し invalidateAfterFirstReadを falseにします タグをデリゲートコールバックで 受け取ります 受け取ったら Connectメソッドに送り タグに接続 別のタグへの接続や 再ポーリングをしなければ タグは接続状態が続きます タグに接続したら NDEF情報のクエリをします 読み書き可能なら タグにメッセージを書き込みます 次にペイロードで NFCNDEFMessageを作成し writeNDEFメソッドに送り タグを更新 invalidateメソッドを呼び出し NFC操作とセッションが終了 以上で 簡単に NDEFタグを書き込めます NDEFフォーマット以外の ユースケースには ネイティブタグアクセスを使います 詳しく見ましょう まずISO7816からです これはNFCタグのType AとBに使われ 様々なユースケースがあります 例えば パスポートやアクセス機能 非接触型ICカード 支払いや交通システムです 7816をサポートするタグは Application Protocol Data Unit Interfaceを活用 俗にAPDUと言います 7816のタグオブジェクトを使って APDUコマンドの送受信が可能です 7816タグには 幾つか特別な条件があり 先にそれを説明します まずinfo.plistファイルに エントリーを追加 するとアプリケーションが 使用予定の特定のAIDを 幾つか宣言します タグが検出されれば info.plistファイル内のAIDを サポートするか確認 適合するまで AIDを1つずつ確認します そして デリゲートコールバックで AIDが選択された状態のタグを 受信します この時点でファイル内の 他のAIDも選択可能になります 当面は ペイメントカードの 読み取りはサポートされません これはinfo.plistファイルの AIDリストの例です NDEF操作をするAIDを 表示しています 実際の7816タグオブジェクトです プロトコルは7816技術特有の プロパティです 属性はUIDと historicalBytesを含みます 2番目に多かった要望が UIDに関してでした sendCommandメソッドも あらゆるAPDUをタグに送受信できます 7816タグのスキャンを開始するには NFCTagReaderSessionのプロトコルに 準拠するデリゲートを実装 メソッドはご覧の3つだけです スキャンを開始するには NFCTagReaderSessionの インスタンスを生成 ポーリングオプションを ISO14443に設定します これはType AとBタグの NFC基本技術です AIDが適合するタグが検出されれば デリゲートコールバックで受信 7816タグがあることを確かめ session.connectでタグに接続します 接続したら Helper ClassでAPDUを生成し sendCommandメソッドで APDUの送受信をします 処理中にエラーが出た場合 続行を中止します 仮にパスポートを読み込む際に 資格情報や― パスワードの計算を間違えたとします この場合 ユーザに エラーを示すべきです invalidateメソッドで セッションを無効にすれば アクションシートにエラーシンボルと メッセージが表示されます このエラー表示の例は デモでお見せします 3番目に要望が多かった機能です (拍手) これは成功した場合の表示です 以上が7816で 次はMIFAREです 7816に似た技術で Type Aタグに基づいています NXPが定義した技術で チケッティングや IDバッジに使われています NFCMiFareTagのプロトコルには 7816に似たプロパティがあります さらにMIFAREタグ特定の mifareFamilyも発見されました それは“Ultralight Plus DESFire”ですが Classicタグはサポートされません これはMIFAREコマンドを送るメソッド DESFireやPlusなどに 7816のAPDUを送る― 便利なメソッドも存在します 実際に見ましょう MIFAREタグをスキャンし Reader Sessionの インスタンスを生成 ポーリングオプションを ISO14443に設定 デリゲート設定し beginを呼び出します 7816のインターフェイスに対応し info.plistファイル内の― AIDを含むMIFAREタグは 7816オブジェクトとして返ります なのでコールバックの際― MIFAREタグが返されたか確認します session.connectメソッドで タグに接続し― MIFAREコマンドを送信 では 次にISO15693について 説明します Type 5や近傍タグとも言われ 小売業 工業用 医療用に 使われています プロトコルはISO15693技術特有の プロパティで― “UID ManufactureCode SerialNumber”があります 15693のコマンドセットは 多数あります ご覧のリストは一般的な操作に 便利なメソッドです 1行や複数行のブロックの読み書き ブロックのロック 選択やリセット カスタムコマンドを送るメソッド ISO15693仕様で構成した 任意コマンドを このメソッドで送信できます 詳細は仕様を参照してください 近傍タグのスキャン方法も もう お分かりでしょう NFCTagReaderSessionを デリゲートに提供 ポーリングオプションは ISO15693に変更 15693タグが検出されれば コールバックで受け取ります 正しいタグタイプか確認し session.connectで接続 タグで readSingleBlockコマンドを発行 次は最後の技術 FeliCaです ソニーにより定義され 日本で交通系 決済システムに使われています FeliCaにも追加条件があります info.plistファイルに エントリーを追加し 特定のFeliCaシステムコードを宣言 セキュリティー上 分離したシステムコードにしてください 7816に似て FeliCaタグが検出されれば info.plistファイルにある システムコードを含むか検証 含むならタグを受け取り なければタグの存在は アプリケーションに通知されません こちらがinfo.plistファイルに FeliCaシステムコードが 登録された例です プロトコルは FeliCa特有のプロパティで 製造IDと選択された システムコードがあります sendFeliCaCommandメソッドで タグに送信も可能 FeliCa操作に便利な メソッドもあります 詳細はソニーの コマンド仕様を参照ください この先の操作方法は おなじみですね インスタンスを生成し デリゲートに提供 ポーリングオプションを ISO18092に変更します タグに適合する システムコードが検出されたら タグオブジェクトを受信 正しいタグタイプか確認し タグに接続 最後に タグで requestResponseを送信 以上で NDEFタグ書き込みと 4つのネイティブ技術で タグ操作をしました では ローレンスが 実際にデモを行います (拍手) どうも ゴードン 皆さん こんにちは ようこそ Core NFCフレームワークの実例を 架空の鮮魚店を使って 説明していきます 私はハイテクな鮮魚店の店主で NFC技術を利用すれば 顧客関係と在庫管理が 向上できると聞きました このプレゼンを聞いて ビジネスに役立つ― アプリケーションを 2つ作ることにしました NFCの使用方法は2つ 初めに― NFC NDEFタグで 商品の説明をします 次に MIFARE Ultralightタグで クーポンタグを作ってみます 商品を届けるまでの概要です 魚を釣ったら NFC NDEFタグを使い 魚の説明をします この情報には釣った魚の名前と 値段が含まれます タグを商品パッケージに付け 顧客の元に商品を届けます 最初に Fish Tag Creatorを作ります この様な画面です すべての情報を入力後 “Write To Tag”をクリックし タグに書き込みます さらにNFCクーポンコードを作成し 販売促進も行えるのです MIFARE Ultralightタグで クーポンコードを顧客に送信します クーポンを1つ選択し タグに書き込みます 2つ目は Fish Tag Readerの作成です 顧客はApp Storeから ダウンロードし 購入した魚のタグを読み取ります 最初のパネルに 魚のタグを読み取る “Scan Tag”があります そしてタグ情報を表示します 次のパネルで “Scan Coupon”をクリックし クーポンタグを読み取ります これは次回以降 使えるクーポンです 実際に行ってみましょう ご覧の画面は― Fish Tag Creatorの アプリケーションです ここに商品の “Creative Salmon”があります (含み笑い) 今日の日付を選択 魚の名前も選択します これは大きな魚ですよ (複数の声) そして“Write To Tag”をクリック アクションシートが表示されたら 電話をNDEFタグにかざします 成功です では 皆さんに クーポンタグを作ります “Create Coupon”を選択 WWDCの特別オファーで 50%オフを選びます (歓声と拍手) ボタンをクリック アクションシートが表示されたら iPhoneをタグにかざします 成功です ではNFC Tag Readerに切り替え NFCタグのテストをします 画面は開いています “Scan Tag”を押し NDEFタグを読み込みます 商品情報が画面に表示されます すばらしい では― クーポンタグをスキャンしてみます 次のパネルに移動し “Scan Coupon”をクリック 50%オフのクーポンです 2つ目のクーポンを読み取ります 無効なクーポンです 実際の操作を見たところで ソースコードに切り替え 実装方法を見ます まず魚のタグの 作成方法を説明します エンタイトルメントファイルに NDEFとネイティブタグ機能を設定 この2つの機能は アプリケーションで使用します Main View Controllerで NDEF書き込みの実装方法を見ます この中の… お待ちください Write Tag機能の中に NFCNDEFReaderSessionの インスタンスを生成 警告メッセージを設定し beginでセッションを開始 検出されたNDEFは デリゲート機能に送信 タグに接続し― queryNDEFStatusを呼び出します タグが書き込み可能で容量があれば writeNDEF機能を呼び出します 最後にinvalidateで終了します 次はクーポンの作り方です ここにcreateCoupon機能があります TagReaderSessionの インスタンスを生成 警告メッセージを呼び出し beginで開始します デリゲート機能で MIFARE Ultralightタグを探し― タグが検出されれば接続し 書き込み操作をします タグに書き込むため クーポンコードを生成し sendMiFareCommandを 呼び出します 書き込みが完了したら― セッションを無効にします NDEFとネイティブタグを使い NFCタグを作成しました 次はFish Tag Readerです NFCTagReaderSessionには NDEF操作ができる― 便利なメソッドがあります ご覧のとおりです しかし info.plistファイルに― 7816AIDとType Fシステムコードの 追加が必要です ここにあります Scan View Controllerに― Scan Tag機能があります タグのReader Sessionを生成し 警告メッセージを設定 beginを呼び出し 読み取り機能を書き込みます NFCタグの検出後 デリゲートコールバックを実行します タグに接続して queryNDEFStatusを実行 読み取り可能なら readNDEFを呼び出します では― 最後にinvalidateで無効にします 次はクーポンタグの読み取りです これはScan Coupon機能です NFCTagReaderSessionの インスタンスを生成 警告メッセージを設定し beginで開始します 検出されたタグが MIFARE Ultralightタグか確認 そうなら― タグに接続 タグを読み取るには sendMiFareCommandを呼び― クーポンを有効にします 最後に invalidateでセッションを終了します クーポンが無効なら エラーメッセージを表示させます 以上で Core NFCフレームワークを使い アプリケーションが 作成できます 再びゴードンです (拍手) ありがとう タグ書き込みとネイティブアクセスで 新たな機能を― 追加できることを願ってます では本日のおさらいです まずReader Sessionの タイプを決めます NDEFか ネイティブアクセス または両方 デリゲートでタグを受け取ります そのタグオブジェクトで 読み書きを実行します 終わったら 適切な無効化の呼び出しで 成功かエラーかを表示します 以上です 今日のサンプルコードと その他の情報は オンラインで入手可能です iOS 13とXcode 11の 情報もあります ダウンロードして Core NFCをご利用ください 質問があれば このあと Core NFCラボが続きます お声がけください (歓声と拍手) 
-