ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Core NFCのエンハンスメント
このセッションでは、AppをNFCに対応させ、NDEFの書き込みや広く採用されているネイティブのタグプロトコルのサポートといった最新機能を活用する簡単な方法について紹介します。
リソース
関連ビデオ
WWDC20
Tech Talks
WWDC17
-
ダウンロード
(音楽)
(歓声と拍手) 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ラボが続きます
お声がけください (歓声と拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。