個人でカフェの混雑度アプリを作ろうと思ったが諦めた話
SIerでSEをしている者です。
今回は初心者なりにiOS(言語はSwift)でカフェまで行かなくてもそのカフェの混雑具合が分かるアプリを作ろうとしたのですが自分の実力では無理だと察し諦めた話です。
間違っている点多々あると思います。ご指摘いただければ幸いです。
##カフェの混雑度アプリを作ろうとした背景
私はよく様々なカフェに行くことが好きでよくカフェで作業をする事もあるのですが、カフェは大体混んでおり、席が取れないといった経験を何度も繰り返してきました。
カフェまで行かないとその時その時間の混雑度が分からないのは不便だと感じておりカフェの混雑度が分かるアプリが欲しいと思い制作に取り掛かろうとしました。
##やってみた事
以下の手順で実装に向けての調査をしました。
①カフェの混雑度やそのカフェの場所が分かるAPIがないか
②BELで混雑度を取得できないか
###①カフェの混雑度やそのカフェの場所が分かるAPIがないか
結論から言うとカフェの混雑度が分かるAPIはありませんでした。
カフェの場所だけの場合はGoogleのAPIが該当すると思います。
###② BELで混雑度を取得できないか
BEL(Bluetooth Low Energy)とは、Bluetoothの規格の一部のことです。
低電力消費・低コスト化に特化した規格です。
この案についてはこちらの記事(https://qiita.com/Rabbit_Program/items/3c1aec6e30eb646d78a1 )を読んだ際に思いつきました。三蜜を計測することができるのであればどれだけ混雑しているのかの取得は可能だと思い、BELを用いて実装する方針にしましたが、ここで2つの問題に直面しました。
ⅰ「カフェ内であるかどうかの判定」ができない
ⅱBEL検索ではBluetoothがオンになっているデバイスを検出する事はできない
ⅲバックグラウンドでBEL検索ができない
####ⅰ「カフェ内であるかどうかの判定」ができない
ユーザの現在地がカフェ内であるかどうかの定義ができませんでした。
ユーザの現在地付近にあるカフェの位置を常に取得し続ける事はGoogle APIにユーザが移動する度にカフェ位置を取得させることになるだろうと思いました。こちらに関してはカフェを「スターバックス」に限定するなどして予めカフェ位置を登録しておく方針に変える事で実装の難易度を下げられると思いました。
####ⅱBEL検索ではBluetoothがオンになっているデバイスを検出する事はできない
BLEには「セントラル」と「ペリフェラル」があります。
こちらについての説明は割愛しますが、一例をあげますと、Bluetoothイヤホンがペリフェラル、接続するスマートフォンがセントラルとなります。
BLE検索はセントラルがペリフェラルを検出することを指します。
(ペリフェラルからセントラルを検出する事はできません。)
今回、Bluetoothがオンになっているデバイスがペリフェラルであれば、BLE検索で検出可能だと思ったのですが、Bluetoothがオンになっているデバイスはセントラルでした。
その為、BLE検索で周囲のデバイス数をカウントする事はできないという結論に達しました。
####ⅱiバックグラウンドでBELが動作しない
こちらはiOS独自の話となります。iOSはバックグラウンドで周囲にあるBELを検索することができません。フランス政府がApple側にバックグランドでのBEL検索をできるようにして欲しいとの要請をしているようですが進展なしとの事です。
バックエンドでBEL検索ができなければ周囲にどれだけ多くの人がいるかどうかの取得ができません。
##結論、諦めました
上記ii,iiiを突破できる方法を探す事ができず今回は諦める事にしました。
iiiの理由に関してはiOS独自なのでandroidであれば問題ない点のようです。
再チャレンジする際はandroidで挑もうと思います。