過去の記事でEddystoneとNearby Messages APIについてそれぞれ触れてきました。今回はNearby Messages APIとEddystoneを連携して使うところに挑戦してみます。
【参考】
- Google発のBeacon用オープンフォーマットEddystoneをAndroidで触ってみた - Qiita
- Android - Nearby Messages APIでチャットみたいなのを作ってみる - Qiita
- chibatching/NearbySample
連携の流れ
EddystoneとNearby Messages APIを連携させるとき、Eddystoneから直接データを渡すのではなくAPIを介して連携を行います。
流れとしてはざっくりと下記のようになります。
- Proximity Beacon APIを有効にする
- Proximity Beacon APIにBeacon (Eddystone)を登録する
- Proximity Beacon APIでBeaconと情報を紐付ける
- Nearby Messages APIでEddystoneのUIDを受信する
- Nearby Messages APIがProximity Beacon APIで登録した情報を取得する
Proximity Beacon APIを有効にする
Nearby Messages APIの時のようにGoogle Developers Consoleから登録が必要です。
- Google Developers Consoleにアクセス
- 前回Nearby Messages APIを有効にしたプロジェクトを選択する
- サイドメニューの
APIと認証 > API
をクリック - 検索窓に
Google Proximity Beacon API
と入力して出てきたものを選択、APIを有効にする
ボタンをクリック - サイドメニューから
認証情報
をクリックして必要な認証情報を登録する。
認証情報の登録については次で説明します。
Beacon登録用アプリを設定する
Eddystoneとの連携にはProximity Beacon APIを使ってBeacon情報を登録する必要があります。今回はBeaconを登録するためにGoogleがサンプルとして用意しているAndroidアプリを使います。
Beacon登録用アプリの準備
GitHubからGoogleのサンプルアプリをクローンして使います。
AndroidとiOS両方ありますが今回はAndroidアプリを使います。
- GitHub: google/beacon-platform
Beacon登録用アプリの認証情報設定
登録APIを使うために認証情報を設定します。
必要な情報は「パッケージ名」と「証明書のフィンガープリント(SHA-1)」の2つです。
パッケージ名はサンプルアプリをそのまま使うのでcom.google.sample.beaconservice
です。
証明書のSHA-1はアプリの署名に使うkeystoreに対して下記のコマンドを実行して確認します。debug.keystoreでも構いません。
keytool -list -v -keystore mystore.keystore
確認したら早速登録します。
- サイドメニューから
認証情報
をクリック -
認証情報を追加 > APIキー
をクリック - 必要な情報を入力して
保存
をクリック -
認証情報を追加 > OAuth 2.0 クライアントID
をクリック - 必要な情報を入力して
作成
をクリック
これでサンプルアプリからBeaconの情報を登録できるようになるはずです。
Beaconを登録する
Beaconを登録する準備ができたので、実際の登録を行っていきます。
残念ながらEddystoneの実機を持っていないので以前の記事でも使用したGoogleのEddystoneサンプルアプリ(TxEddystone-UI)を使います。
- TxEddystone-UIをビルドして起動した状態でブロードキャストを開始
- Beacon登録アプリ(Beacon Service Demo App)を起動してAPIの認証情報を設定したアカウントを選択
- Beacon Service Demo Appの
SCAN
ボタンをクリック - 表示されたBeaconのUIDを選択、情報を編集して
REGISTER
をクリックして登録
しかし、TxEddystone-UIを起動した直後の状態ではNot Authorized
と表示されてしまいます。
これは、このUIDがすでに他の人によって登録されており、自分に情報の編集権限が無いということです。
したがって、実際の登録を行うにはRND
ボタンを適当にクリックして他の人がまだ登録していないUIDを見つける必要があります。
未登録UIDの場合、一覧には鍵が開いたアイコンで表示されます。選択するとまだ登録されていないため404となりますが問題ありません。
いろいろと情報を入力してREGISTER
をクリックして登録に成功するとStatusがACTIVEになります。
Nearby Messages APIでメッセージとして受け取れるデータはAttachmentとして登録された情報になります。
今回は前回の記事で作ったチャット風アプリでメッセージを受信するために、DataにチャットメッセージのJSONを入れておきます。
{
"id":"00000000-aaaa-bbbb-cccc-dddddddddddd",
"text":"Sample beacon is near you!",
"timestamp":0,
"type":"beacon-message"
}
長くなりましたがこれでBeacon(Eddystone)の準備が完了です。
Nearby Messages APIでEddystoneをハンドリング
基本的に前回の記事で作ったものそのまま、特別な処理を入れなくてもEddystoneに紐付けられたメッセージを受信することが出来てしまいます。
TxEddystone-UIでブロードキャストを開始、Eddystoneの信号を検知するとMessageListener#onFound
が呼ばれてメッセージが表示されるはずです。
D/MainActivity﹕ onFound: Message{namespace='nearby-sample', type='beacon-message', content=[119 bytes]}
まとめ
EddystoneとNearby Messages APIを連携するためには、Proximity Beacon APIを使用してBeacon情報を登録する必要があります。しかし、Eddystoneに紐付くメッセージの受信自体はNearby Messages APIのみで非常に簡単に行えるため汎用性は高そうです。
ただ、Beacon登録時に付与した位置情報などの情報は別途Proximity Beacon APIで取得する必要があるのでその辺りの情報が必要な場合は手間がかかります。