ビーコンを使用して通知をキャッチします

こんにちは。IlyaGarakhです 。私は自分のスタジオを持っており、モバイルおよびWeb開発を率いていると同時に、いくつかのスタートアップの開発とプロモーションを行っています。 Appleの別のプレゼンテーションから初めてBluetoothビーコンについて聞いたとき、そのアイデア全体が疑わしく混乱しているように思われました。 その後、同僚と私はビーコンのトピックに戻りました。動きに対するインタラクティブな反応と部屋の高い位置決め精度は非常に魅力的でした。









Google Lab Labコンテストの一部としてのIlya Garakhによる記事



しかし、喜びの襲撃はデバイスの制限によって影が薄くなりました。その時点で新しいiPhoneとAndroidデバイスの最新バージョンのみがBLE(低消費電力のBluetooth)で動作することができたため、このソリューションは幅広い聴衆のために動作するように促進するのが困難でした。 時間が経つにつれて、BLEをサポートするデバイスの割合が大幅に増加したため、2016年の初めにテスト用にibeaconビーコンを購入しました。 これはすべてこれから始まりました。



あなたが知らない場合、ibeaconはAppleによって発明されたBLE相互作用のためのプロトコル(フォーマット)です。 この形式でデータを送信する多くのビーコンメーカーが市場に出回っています。 私の手に落ちた最初の灯台は、iBecomのibeacon灯台でした。









彼は何の指示もなく(実際、他のビーコンのように)郵便封筒に入れられて配達され、私は次に何をすべきか想像できませんでした。 長い通信は「iBecom」の技術サポートから始まりました。その間、ビーコンはiPhonneのアプリケーションを介してのみ設定でき、同時に内部ポータルに登録要求を送信する必要があり、Androidデバイスの所有者は「プレイマーケット」からビーコンを管理するためのアプリケーション。 iPhoneでクエストをやりたかった。 Androidアプリケーションはビーコンを認識しましたが、そのいずれも構成を許可していませんでした。「どのようにすべきですか?」という質問は未解決のままでした。



ちなみに、すべてのアプリケーションは、灯台までの距離が異なることを示しました。1から10メートルです。ただし、灯台は電話から数センチ離れています。 とても感動的で、実際の実装に関するレビューを探し始めました。 テストルームではポジショニングが正常に機能し、実際の条件では、信号強度はバッテリーと距離だけでなく、壁、パーティション、一般的には部屋のすべてに依存することが判明しました。 したがって、多くのビーコンが詰まっていて、それらの座標がわかっていても、電話の位置を呼び出して正確に特定することはできません。 この問題は、マイクロロケーションの「信号マップ」を作成することで解決されます。ビーコンを配置し、デバイスを取り、地形を歩き、各小さなゾーンでビーコンをスキャンし、信号の強度を読み取り、何らかの方法で全体をハッシュし、受信したハッシュはマイクロゾーンを識別します。



余談

ネイティブのモバイル開発は行いませんが、Cordovaを使用します。 Cordovaには長所があり、多くの短所と制限があり、あなたもそれを調理できる必要がありますが、場合によってはより多くの長所があります(私たちにとって)。 したがって、以下では、コルドバについてのみ話します。


したがって、Cordovaにはibeaconを操作するための既製のプラグインが用意されています 。 インストールは簡単で、最初のテストアプリケーションをすばやく構築できました。 電話は非常に着実にビーコンに近づき、「可視性」ゾーンを離れました。 iBecom灯台の正確な特性は覚えていませんが、通常、灯台は10メートル(さらには50メートル以上)でキャッチされます。 私の電話は、ある部屋のビーコンが約4メートル離れたときに「失われました」。

別の興味深い機能は、ビーコンをキャッチするために、そのUUIDを指定する必要があることです(BLEおよびビーコンを操作するための任意のアプリケーションを使用してUUIDを見つけることができます。また、UUIDを変更することもできますが、メーカーのソフトウェアが必要です)



var beaconRegion = new cordova.plugins.locationManager.BeaconRegion('someMyld', '00000000-0000-0000-0000-000000000000'); cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion); beaconRegion = new cordova.plugins.locationManager.BeaconRegion ( 'someMyId2' , '00000000-0000-0000-0000-000000000123'); cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion);
      
      





ループ内など。 ビーコン通知はコールバックに戻ります。 したがって、すべてのビーコンのUUIDを事前に知る必要があり、ブロードキャスト検索を行うことはできません(少し先を見て-たとえ1つの場所を経由してもブロードキャストは可能です)。



ibeaconで遊んだことで、一般に追加の「機能」として使用でき、灯台に近づいたとき、例えばテーブルに座ったり製品に近づいたりするときに「クライアント」を捕まえることができることに気付きました。 敷地内での位置決めに灯台を使用することは技術的に実行可能であるように思われましたが、面倒でした。 もちろん、「クライアント」がアプリケーションをインストールする必要があります。



その結果、実際のアプリケーションでこのプラグインをテストモードで実装し、すべてがスムーズに進み、何も壊れず、競合しませんでした(Cordovaに慣れていない場合、曲線と競合するプラグインの問題は常に時間を費やす必要があるものです)開発では、この問題を「Cordova Plugin Hell」と呼んでいます。 すべてが機能していることを確認した後、私はibeconをチェックし、明確な良心をもって将来のために灯台を先送りにしました。



エディストーン



ごく最近、私はibeaconに加えて、ビーコンの操作のための他のプロトコルがあることを学びました。 もちろん、Googleを発明したEddystoneと、コミュニティを発明したAltbeaconについて話している。 これは灯台とその能力についての考えに戻り、Eddystone灯台をテストする機会に関するHabréの投稿を見たとき、私は通り抜けることができず、参加を申請しました。 そして、数週間後、私の机の上に、メーカーのAccent Systemのエディストーンビーコンを置きました。









知らない場合、Eddystone形式にはiBeaconよりも多くのデータが含まれ、実際には16バイトのUUIDと2つの数値(メジャー値とマイナー値)のみを送信し、このデータをアプリケーションでのみキャッチできます。 Eddystoneを使用すると、灯台はさまざまなモードで動作できます。iBeaconがUUIDを渡すように(eddystoneではUIDと呼ばれます)、URLを送信し(灯台に直接縫い付けて構成できます)、テレメトリ(灯台のメタデータ、熱)、また、EUID伝送モードとその周期的な変更。



主な特徴は、BLEをサポートするAndroidスマートフォンがEddystone c URLを自動的にキャッチできることです。追加のアプリケーションをインストールする必要はありません。 Bluetoothをオンにして灯台に行き、電話がリンクを見つけたという通知をキャッチします。



松葉杖のないiPhoneは他の人の技術を理解したくないが、Google ChromeがインストールされていればURLをキャッチできる。



もちろん、私はすぐにこの機能をチェックしたかったです。 メーカーのウェブサイトで、ビーコンの設定に使用できるPlayマーケットのアプリケーションへのリンクを見つけました。 灯台が見つかりましたが、問題なく設定モードにしました(バッテリーを取り外して再挿入する必要があり、30秒以内に灯台が開発モードになります)。 私はURLを登録し、すべてを保存して、次に何が起こるかを待ち始めました。 そして、何も起こりませんでした。



もちろん、すばらしいGoogleが助けになります。 Googleビーコンダッシュボード(これはクラウドベースのビーコンコントロールパネルです)、Google Proximity APIおよびNearBy APIについて読み始めました。 特別なモバイルアプリケーション(Googleビーコンツール)を使用して、ベーコンをキャッチし、クラウドに登録する必要があります。その後、Webインターフェイス(添付ファイル、マップバインディングなど)を介してURLおよびその他の多くのパラメーターを構成できます。 ) これはすべて良い頭脳を吹き飛ばし、完全に混乱したが、マニュアルを約半日勉強した後、私は何が起こっているのか理解し始めた。



だから:





Google Beacon DashboardとNearBy APIの主な目標は、このためのバックエンドを開発することなく、Webを介してビーコンを実装し、そのパラメーターを管理することです。 また、プロジェクトにビーコン管理を実装する必要がある場合は、Google Proximity APIが使用されます。



問題は、私の電話が頑固にURLでビーコンをキャッチしたくないということでした。 AndroidデバイスのGoogle設定で削除できるパブリックリンクの検索が禁止されていることが判明しました(つまり、システムではなくGoogle設定です。まだクロールしていない場合は、多くの興味深いものが見つかります)。









この問題を見つけました。 興味のために、私はすべての最も近い同僚や知人の電話をチェックしました。誰もそのようなゴミを持っていなかったので、Bluetoothをオンにした後、すべてのデバイスがすぐにリンクをキャッチしました。 彼らは私のデバイスの設定の奇妙さに関するすべてを書き留めました。



その後、GoogleクラウドにEddystoneビーコンを登録しようとしましたが、Google Beacon Toolは頑固にEddystoneを見つけませんでしたが、iBeacon(「iBecom」から)がすぐに見つかり、問題はありませんでした。 たくさんの無駄な試みの後、私はアクセントシステムのメーカーにサポートを書きました(ところで、これらのビーコンを豊富に導入することを計画している場合、誰もロシア語を話さないことに注意してください)。 3〜4営業日以内にAccent Systemsから回答がありましたが、謙虚な意見ではまったく速くありません。



それに応えて、彼らは私にDropboxへのリンクを送ってくれました。そこで、新しいバージョンのビーコン構成アプリケーションと新しいドキュメントをダウンロードできました。 新しいアプリケーションはビーコンを作り直し、Beacon Toolがついに見つけました。 あいまいなリンクを介してアプリケーションをダウンロードするというストーリー全体が、深刻なデバイスメーカー(そして、ちなみにGoogleパートナー)にとっては少なくとも疑わしいことに注意する価値があります。



Accent Systemsの新しいドキュメントによると、彼らのエディストーンビーコンは、4つの通常のエディストーンと2つのイベアコンとして同時にブロードキャストできます。









実際には、最初のスロットを除いて、スロットを機能させることができませんでした。 ちなみに、最初に3番目のスロットを設定し、長い間何も機能しないのか理解できなかったため、この事実の実現には多くの時間がかかりました。



したがって、私のEddystoneビーコンは、(任意のモードで)ibeaconとeddystoneの両方をブロードキャストできます。 宣言された4 + 2の同時スロットの代わりに1 + 1。



テストアプリケーションのプログラミング



Eddystone灯台で安定した作業を確立できた後、テストアプリケーションを開発する時が来ました。 前に書いたように、コルドバですべてを行います。



Cordovaのeddystoneで動作し、すぐにこのプラグインが見つかるプラグインを探しています。 これは、 Evothingsのプラグインで、BLEデバイス用のさまざまなソリューションを開発および提供します。



テストアプリケーションの最終バージョンはgithubアップロードしました。









内部キッチンの詳細に立ち入ることなく、この例は、F7フレームワークとRequireJSで実行される内部アプリケーションフレームワークに基づいて作成されています。 すべてのメインコードはこちらです。



プラグイン (cordova-plugin-eddystone)を追加し、その例をコピーし、アプリケーションをクラッシュさせて、電話で起動しました。



Cordovaを使用したい人のための小さな余談。 アプリケーションをローカルでビルドするのではなく、代わりにビルドサーバーがDigital Oceanに展開されます。 これらはすべて、CIソリューションまたは間に合わせのスクリプトと統合できます。 その結果、プッシュ時にビルドサーバーに通知され、プルイットが変更されてビルドが起動します。 Slackのボットは、プロセス全体を(コミットのテキストとともに)慎重にコメントしているため、誰もがビルド中のものとインストールの準備ができていることを常に認識しています。 一般に、フィードバックを設定し、ADBを介して携帯電話にアプリケーションを自動的にインストールするのは簡単です。



本質的にアプリケーションは通常のWebサイトであるため、ブラウザーでCordovaアプリケーションのメインロジックをテストできます。 環境、Javaのバージョン、Cordova、Androidターゲットがインストールされていること、ビルドサーバーがスナップショットから1分で上昇することを心配する必要がないため、このアプローチが非常に便利であることがわかりました。 もちろん、これはAndroidに関する話であり、iosの適応、ビルド、および制作は異なります。



この方法を選択する場合は、削除を追加し、ビルドにプラットフォームを追加することをお勧めします。これにより、プラグインに関する多くの問題を回避できます。



そのため、サンプルのビルド後、すぐにデバッガーを接続し(chrome:// inspectを使用)、サンプルがエラーなしで動作しても、ベーコンが見つからないことを確認しました。 そして、これはCordovaにとって絶対に普通のことです-プラグインはしばしば、期待どおりに機能しません。 cordova-plugin-eddystoneプラグインの調査を開始し、 BLEスキャンを実行するコードを見つけました。



 // The device object given in this callback is reused by easyble. // Therefore we can store data in it and expect to have the data still be there // on the next callback with the same device. evothings.easyble.startScan( // Scan for Eddystone Service UUID. // This enables background scanning on iOS (and Android). ['0000FEAA-0000-1000-8000-00805F9B34FB'], function(device) { // A device might be an Eddystone if it has advertisementData... var ad = device.advertisementData; if(lad) return; // With serviceData... var sd = ad.kCBAdvDataServiceData; if(lsd) return; // And the 0xFEAA service.
      
      





マジックナンバー0000FEAA-0000-1000-8000-00805F9B34FBはEddystoneビーコンの識別子です。 プラグインの他のメソッドに渡され、最終的にJavaプラグインに送られます。 evothings.easyble.startScanメソッドのソースコードを調査し、識別子を渡す必要がないことを理解します。 削除して何が起こるかを確認します-プラグインは必要なビーコンをキャッチします!



さらに、プラグインは非ビーコンを含むすべてのBLEデバイスをキャッチします。 たとえそれがキャッチされても、これは素晴らしいことであり、このデータをどう処理するかを何らかの方法で決定します。



Cordovaを使用したい人のための小さな余談。 スマートフォンをUSB経由で接続し、デバッグを有効にし、Chromeを開きます:// Google Chromeで検査し、アプリケーションを選択します。 通常のサイトのようにデバッグしたり、JSコードをその場で直接変更したりできます。



OK、 プラグインフォークして、変更を開始します。



まず、行['0000FEAA-0000-1000-8000-00805F9B34FB']



削除します。



プラグインもibeaconをキャッチしますが、さらなる検証のためにそれを一掃します。 ibeaconおよびeddystoneフォーマットのドキュメントを読みました。 すべてのビーコンは、すべてのデータを含むスキャンレコードを送信します。 base64では、次のようになります。



 AgEGGv9MAAIVoHxcqFnrTqiZVjC3duD+3AAEAAS7DBbw/1/r3V649LuVAQAAAAAAAAAAAAAAAAAAAAAAAAA=
      
      







16進システムに変換します。







そして、ibeacon形式のスキャンレコードの説明を読みます。







6〜8バイト(x4c000215)は定数であり、その後にibeaconのUUIDが続くことがわかります。 Parsimスキャンレコード、これらの4バイトを見つけ、次の16バイトをカウントします。 次に、すべてを型の形式の文字列に変換します。



a07c5ca8-59eb-4ea8-9956-30b776e0fedc

https://github.com/garakh/cordova-eddystone/blob/master/js/eddystone-plugin.js#L534以降のコード)。



私は他のささいなことや検証を終えて、実行し、チェックします。プラグインがキャッチするeddystoneとibeaconを除き、すべてが正常に機能します。 この場合、プラグインがすべてをキャッチするため、UUID ibeaconを事前に設定する必要はありません。



プラグインをプッシュして、実際のアプリケーションでEddystoneの実装を開始します。



生産



私が積極的に参加しているスタートアップの1つを紹介します。

Loya-サービスとしての忠誠心。 Loyaは、ダッシュボードに分析、API、およびその他のツールを提供することにより、企業にロイヤリティプログラムを迅速かつ簡単に実装する機能を提供します。



秘Oneの1つは、ビジネスでモバイルアプリケーションを注文し、顧客がポイントを貯めてギフトを受け取ることができることです。 また、ビジネスを迅速に開始したい場合は、顧客に一般的なソリューションを提供できます。それは、他のすべての企業を含むLoyaクライアントアプリケーションです。



Eddystoneのサポートを追加するのは彼の中です。 複雑にならないように、ビーコンを操作するための簡単なアルゴリズムを設計します。



  1. アプリケーションはビーコンをキャッチし、そのデータを収集します:MACアドレス、URL、UUID、NID + BID(これはeddystoneのEUdです);

  2. サーバーにデータを送信します。

  3. サーバーは、そのようなベーコンを持っている会社があるかどうかを確認します。

  4. ベーコンがある場合は、画面に表示されるメッセージのテキストと、PUSHヘルメットが返されます。電話はポケットに入っています。

  5. アプリケーションがEddstone URLをキャッチした場合、ビーコンのMACアドレスがサーバー上で検証され、すべてが問題なければ、このURLでページが開きます。

    ところで、クライアントにアプリケーションがインストールされていない場合、Eddstoneがルールを設定しているため、クライアントにはURLが表示されたままになります。



会社のアルゴリズム:



  1. 灯台を購入します。
  2. 任意のユーティリティを使用して、そのデータ(UUID、MACなど)を見つけます。
  3. Webダッシュボードで広告メッセージを示すか、Eddystone URLモードでビーコンを構成します。
  4. 灯台を店に置きます。
  5. アプリケーションがインストールされている場合、近くの顧客にはURLまたはプッシュ通知が表示されます。


それでは、ダッシュボードにビーコン管理を追加してください。









ところで、私たちのフロントエンドは、Angular 1.x、RequierJS、Bower、Gulpで動作します。 バックエンド:PHP Phalcon、MongoDB。 多くのプロジェクトでテストされたすばらしい束。 サーバーAPIを追加し、モバイルアプリケーションのプログラミングに進みます。 なぜなら すべてがすでにテストされているので、分岐したプラグインを追加し、ベーコンをキャッチします。



最終ビデオとリリース



つまり すべてのデバイスがBLEをサポートしているわけではなく、いくつかのバージョンが市場に出回っています。 ベーコンをサポートするバージョン0.1.0(Android 5以降で動作します)およびサポートなしの0.0.8(Androidの4つのバージョンで動作します)。



おわりに



調査とテストに約30人時、戦闘アプリケーションへの統合、バックエンドの開発とリリースに5時間を費やしました。 ネットワーク上のビーコンの操作はまだ不十分であり、混乱しています。 ビーコンメーカーのサポートと連絡を取り合う必要がありますが、その回答から、これはメーカー自体にはあまり効果がないことがわかります。



私の意見では、ビーコンを屋内ナビゲーションに使用することは可能ですが、これまでのところかなり疑わしく、多大な人件費で導入されています。 Accent Systemsのビーコンはすべてのスロットで機能しませんでした。



iBecomの灯台のバッテリーは6か月後にどこかで死亡しました(灯台はテーブルの上に置かれたばかりです)。



Eddystone URL-私の意見では非常に有望なものであり、特別なアプリケーションを必要とせず、シャーマニズムなしで箱から出して動作する唯一のものです。

比較すると、EddystoneとiBeacon-eddystoneが確実に勝ちます。 同じもので、同じように曲がって機能するibeaconビーコンを購入する理由はないと思います。機能面では、数年遅れています。



All Articles