BLEビーコン技術を使ったソーシャルディスタンス啓発アプリ
こんにちは。イーアールアイの守屋です。
昨今の新型コロナウイルス感染症の流⾏に伴う緊急事態宣⾔の発令により、弊社でもリモートワークを推進し社内の人口密度を下げる取り組みをしております。
国内でも3密を避けることが推奨されており、距離を保ってお店の列に並ぶ、いわゆる「ソーシャルディスタンス」の取り組みを多く目にするようになりました。
ソーシャルディスタンスを啓発するアプリを作ってみました
このソーシャルディスタンスの取り組みに対して、弊社が得意とするBLEビーコン技術を活用し、密接した状態に対して注意喚起するソーシャルディスタンス啓発アプリを作ってみました!
iOS版は残念ながらRejectされてしまいました。詳細は後述します。
アプリ概要
本アプリはソーシャルディスタンスを保ちたい相手にもインストールしてもらう必要があります。
本アプリを起動するとスマホからビーコン電波が発信されます。 このビーコン電波を相手のスマホが受信すると、電波の強さからおおよその距離感が計算されます。
お互いの距離が近いようであれば、バイブレーションを鳴らし、警告画面を表示します。
警告画面が表示されない距離を保つことで、ソーシャルディスタンスを維持することに繋がります。
※BLE電波の特性上、距離の精度はかなり曖昧ですので、あくまで目安としてお使いください。 また、動作端末や建物の環境によってはうまく動作しないこともあります。
※本アプリは、いらすとやさんが公開されているイラストを使用しています。
システムの仕組みと開発談
距離推定
他端末との距離感の推定は、iBeaconのRanging機能で実現させています。
iOS版では純正のCore Locationフレームワーク、Android版ではAltBeacon / android-beacon-ibrary を使用しました。
ビーコンものをよく開発しているのである程度覚悟していたことではありますが、距離推定を様々な機種で安定させるための、ビーコン側のMeasuredPower発信値の調整・Android側のRSSIフィルタの調整にはとても苦労させられました。
Android版はBLEフレームワークの作りの都合上、iOS版より遅めの反応で仕上げるしかありませんでした。AndroidのBLEはアドバタイズスキャンチャンネルの切り替え周期が遅いため、定点で受信し続けても平均RSSIが10dBmほどブレることがあり、この影響を抑え込むためのフィルタ設計が難しくなっています。
また、現在弊社でもリモートワークを推進しているため、開発中のアプリを試す電波環境が開発者間で統一できなかった苦労もありました。
アプリ開発者の自宅でうまく動いていたものが、テスト協力者がいる社内環境では酷い有様になったりと、トライ&エラーを何度も重ねる必要がありました。
このあたりはSlack/Trelloでコミュニケーションを取りつつ、アプリのテスト配信に Firebase App Distribution を使って対応していました。このようなツールが使える環境にあって大助かりでした。
ビーコン発信アニメーション
人からビーコンが出ているようなアニメーションも付けました。
iOS版ではCore Animationを使いましたが、ネット上にまとまった情報が少なく苦労しました。
なお、ピンポイントに使えそうなOSSライブラリにshu223 / Pulsatorがありましたが、こちらは正円状の描画のみの対応だったので、今回は見送らせていただきました。ビーコンを使ったアプリはよく開発しているので、また機会があればこちらを使用して分かりやすく表示してみたいと思います。
Android版ではObjectAnimatorを使いました。iOSのCore Animationのコードよりもこちらの方が直感的に記述でき、アプリ開発者としては好印象だったそうです。
ただ、パルスの数だけViewを生成してそれぞれにアニメーションさせているので、Core Animationを使ったiOSの方がアニメーション描画のパフォーマンスは良いのでしょう。
課題点
インストール率向上
そもそもですが、このアプリを使用するには自分と相手がアプリをインストールしている必要があります。
ふと、行列にならんでも、前に並んでる人がこのアプリをインストールしている保証はありません。
社内からも「インストールしないとダメなんだよね…?」という声が多々ありました。
もし仮に、LINE、Facebook、Twitterなど主要プラットフォーマーのアプリに本機能が追加されるか、もしくは、iOS/AndroidなどのOS自体に組み込まれれば、稼働台数が上がり見知らぬ他人とのソーシャルディスタンスにもアラートを出すことも出来たと思います。
加えて、常にビーコン送信とスキャン機能を動作させるとスマホの消費電流が上昇してしまう為、不要なユーザーには受け入れられない機能となりそうです。
測距機能精度
開発談にもありますが、Androidの測距精度を一定にすることは困難です。
Android搭載の端末は数多あり端末ごとに送信性能・受信性能が異なる為に、全端末で同様の測距性能を発揮することは難しいです。
iOSは自社でHWも設計している為か、iPhoneのバージョンが異なっても測距機能はAndroid端末に比べると安定していました。
iOS版アプリ審査Reject
Appleから以下のような声明が出ており、iOS版のアプリ審査はRejectという結果となってしまいました。
「データソースが信頼できるものであるか、また政府組織、健康に特化した民間公益団体、健康問題に関して資格や実績のある会社組織などの社会に認められた組織によって提供されているAppであるかを注意深く評価します。COVID-19に関するAppは、これらの組織からのみ提出が可能です。COVID-19をテーマとしたエンターテイメントやゲームといったAppは許可されません。」
残念ながら、国内でおおよそ半数を占めるiOSユーザーにインストールしてもらうことが出来なくなりました。
類似アプリ
ちなみになんと国連から、今回我々が開発したアプリと同様の機能を持つ
アプリ がリリース されていました。
こちらは周囲の全Bluetoothデバイスからのアドバタイズに対して測距を行う、非常に思い切った測距モードが搭載されているようです。 これなら不特定多数のユーザーとの距離を図れる可能性がありますが、昨今の住宅・施設内にはBluetoothデバイスが無数に溢れているので、上手く動かない場面の方が多いかもしれません。
国連でもソーシャルディタンスの啓発のためにビーコン技術を活用したことは、弊社としても励みになりました!
終わりに
ぜひ、今回開発したアプリを使ってソーシャルディスタンスの距離感の確認、および、BLEでの測距性能について体感してみてください!
弊社も3密を避け、状況の変化に臨機応変に対応しながら業務を推進しております。
最後に、このコロナ禍が⼀刻も早く終息し、⽇常が戻ることを願っております。