Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Eight iOSアプリにおけるNFCを利用したタッチ入場機能の開発

技術本部Mobile Applicationグループの藤門です。
23卒としてSansan株式会社に入社し、iOS版のEightの開発に従事しています。

今回の記事の目次は以下の通りです。

本記事の概要

本記事では、Eight主催のBusiness IT & SaaS Expo2024(以下BIS 2024)において、Eightのタッチ入場受付機能に焦点を当て、その開発背景や実装方法および利用技術の使い所について紹介します。

BIS 2024について

BIS 2024は、名刺アプリ「Eight」のタッチ機能を活用して、受付から名刺交換までをスマートフォン一つで完結できる展示会です。
2024年1月11日から12日までの2日間にわたり開催され、商談やセミナー、来場者同士の交流会などが実施され、来場者の方からも高い評価をいただきました。

eight-event.8card.net

タッチ入場受付機能について

タッチ入場受付機能は、EightをインストールしたスマートフォンをNFCタグが組み込まれた受付用の看板に触れるだけで、受付が完了し、プリンターから入場証が印刷される機能です。

BISの受付(看板・プリンタ)

タッチ入場受付機能でNFCを利用した経緯

今回のタッチ入場受付機能の実装にあたり、スマートフォンのBluetooth機能とNFC機能のどちらを利用して実現するかを検討しました。
その理由として、Eightは以前にBluetoothを活用したタッチ名刺交換機能をリリースしており、その知見を活かして、タッチ入場受付機能も実現できるのではないかと考えたからです。

しかし、Bluetoothを用いる場合、来場者が並んで入場する際にスマートフォン同士が電波干渉を起こす可能性があり、安定性や実現性に懸念がありました。

そこで、今回はNFC機能を利用して実現することを決定しました。

※ タッチ名刺交換については以下のリンクを参照ください。
jp.corp-sansan.com

Background Tag Readingについて

iOSプログラミングでNFC機能を利用しようと考えた際、読者の皆さんが真っ先に思いつく方法としては、Appleが提供するフレームワークであるCore NFCを利用する方法だと思います。

しかし、今回は「Background Tag Reading」というiPhone XS以降の機種に標準で搭載されている機能を活用し、Core NFCを利用せずに実装しました。
「Background Tag Reading」は、iOSのシステムがNFCタグを読み取り、新しいタグを読み取るたびにポップアップ通知が表示され、その通知をユーザーがタップするとNFCタグのデータが適切なアプリに送られるという機能です。

Background Tag Readingについて、さらに詳しく知りたい場合は、Appleの以下の記事をご覧ください。
developer.apple.com

NFCタグを読み取ると、OSにより自動通知される

タッチ入場受付機能でBackground Tag Readingを採用した理由

今回のタッチ入場受付機能で「Background Tag Reading」を活用したのは、実装工数、Eightユーザーにおける「Background Tag Reading」に対応した機種の割合、およびUIデザインの3点を総合的に考慮した結果です。

まずはじめに、実装の工数についてです。タッチ入場受付に必要な「NFCタグからデータを読み取る機能」は、Core NFCを活用してプログラミングするよりも最速のリリースが実現できると判断したためです。

次に、Eightユーザーが利用している機種における「Background Tag Reading」対応の割合は、「Background Tag Reading」に対応したiPhoneXS以降の機種の割合が、9割を超えています。そのため、残りの1割未満のユーザーは、iPhoneの標準カメラアプリの機能であるQRコード読み取りで対応してもらおうと判断しました。

最後に、Core NFCを採用した場合、Apple標準のCore NFCのReaderのUIが表示され、タッチ名刺交換との体験が大幅に異なってしまうため「Background Tag Reading」を選択しています。

Core NFCを利用するとReaderのUIが表示されてしまう

ここで1点注意ですが、Background Tag Readingを利用することで、Core NFCのReaderのUI表示を防ぐことが可能ですが、NFCタグ読み込み時に出現するポップアップ通知は、カスタマイズできない点は許容する必要があります。

Background Tag Readingを利用した実装方法

まず、NFCタグにUniversal LinksのURLを書き込んでおきます。
また、URLにはクエリパラメータとして、イベントを識別するIDとプリンターを識別するIDを設定しておきます。
※「Background Tag Reading」の機能を利用して、NFCタグが読み取れないユーザーのために、Universal LinksのURLをQRコードに変換しておきました。

次に、NFCタグを読み込む処理ですが、「Background Tag Reading」のおかげで、実装する必要はありません。

最後に、読み込んだUniversal LinksのURLをAppDelegateのapplication(_:continue:restorationHandler:)でハンドリングします。
application(_:continue:restorationHandler:)では、Universal LinksのURLを解析し、イベントとプリンターのIDをServerに送信する処理や受付完了のダイアログを表示する処理を実装するだけです。

func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    // URLを取得
    let url = userActivity.webpageURL

    // URLを解析
    // クエリパラメータをServerに送信
    // ダイアログを表示

    return true
}

Background Tag Readingの使い所

タッチ入場受付機能でBackground Tag Readingを利用してみて、使い所としては、以下のようなケースに該当する場合であると感じました。

  • NFCの読み取り機能だけが必要
  • 実装コストをできるだけ削減したい
  • ユーザーの機種割合では、iPhoneXS以降が大部分を占めている
  • Core NFCのReaderのUIは利用したくない

上記のようなケースに該当する場合は、Core NFCを利用してプログラミングをするよりもコストをかけずに実装が行えるため、Background Tag Readingを利用する価値が十分あると思います。

おわりに

一緒にSansan / Eightのモバイルアプリ開発していく仲間を募集中です!
選考評価無しで現場のエンジニアのリアルな声が聞けるカジュアル面談もあるので、ご興味ありましたらぜひ面談だけでもお越しいただけたら幸いです!

open.talentio.com

open.talentio.com

© Sansan, Inc.