NearbyでiOSとAndroidで相互通信をする方法

のえる のえる
2019.05.29

iOSとAndroidでデバイス間通信をしようとすると、真っ先にBluetoothやWi-Fiなどが上げられると思います。

 

しかし、実際に作成しようとすると、それぞれのレシーバーの作成や連携に苦戦することになります。

 

そうした面倒なやり取りを1つのライブラリで解決できるとすればどうでしょうか?

 

今回はそんな便利なライブラリ Nearby を使ってiOSとAndroidで通信をする方法をご紹介します。

そもそもNearbyって何?

Nearby とは、Googleが開発した近距離通信用のプラットフォーム/ライブラリです。

 

この Nearby を使用することで、インターネットを使用しなくてもデバイス間通信が可能になります。

 

また、Android同士だけの場合に限りますが、近距離接続ができるようになるため、マルチプレイヤーゲームやコンテンツの共有なども可能になります。
(Nearby Connections API というものです)

 

今回ご紹介するのは Nearby の中の機能の1つである Nearby Messaging API です。

 

これは、AndroidとiOSの両プラットフォームでのメッセージ通信を可能にするだけでなく、BLEビーコンとの通信も両立してくれる優れものです。

 

なお、Nearby ではBluetooth、BLE、Wi-Fi、超音波(非可聴音)の組み合わせでデバイス間通信を実現しているそうです。

環境

今回の環境はこんな感じです。

開発環境
Xcode 10.2.1
Android Studio 3.4.1
CocoaPods 1.7.0

なお、記事作成時点での Nearby の利用制限は下記のとおりです。

利用制限
Android Android 2.3以上
Google Playサービス 7.8.0以上
iOS 7.0以上

開発

APIキーを取得する

Nearby を使うため、APIキーを取得しましょう。

 

Google Cloud Console から Nearby のAPIを有効にします。





Nearby のAPIが有効になったら、アプリで利用可能にするため、APIキーを控えておきましょう。

iOSでNearbyを使う

ライブラリをインストール

 

まずは CocoaPods で Nearby をインストールしましょう。

※Cocoapods のインストール方法や使い方については割愛します。

 

Bridging Headerを作る (Swiftのみ)

 

プロジェクト内に BridgingHeader.h を作成し、下記の内容を記載して保存します。



プロジェクトの TARGETS 内にある 「Objective-C Bridging Header」 に先ほど作成したファイルまでのパスをしています。



 

info.plistにプライバシー設定を追加

 

NearbyではBluetoothやマイクなど、プライバシーに関する機能で通信を行います。

 

そのため info.plist にプライバシー設定を追加する必要があります。

 

レイアウトを設定してプログラムを書く

 

ではレイアウトの作成をし、プログラムを作っていきます。

 

まずは storyboard に下記のようにパラメータを設定します。



続いて ViewController.swift にプログラムを書いていきます。

これで Nearby Messaging API によるテキストの送受信ができるようになりました。

 

※ここではプライバシーを意識した確認メッセージ等はすべて省略しています。
※このままコピペをしてもAppleの審査は通りませんので、Nearbyの公式ドキュメントをご確認ください。
※バックグラウンドでも受信をしたい場合 Capabilities の Background Modes を設定する必要があります。

AndroidでNearbyを使う

ライブラリのインストール

 

GradleでNearbyのライブラリをインストールします。

 

APIキーを設定

 

AndroidManifest.xml に APIキーを設定します。

 

レイアウトを設定してプログラムを書く

 

続いて画面のレイアウトとプログラムを書いていきましょう。

 

※ここではプライバシーを意識した権限のチェックや確認等はすべて省略しています。
※このままコピペをしてもGoogleの審査によりリジェクトされる可能性があります。

通信してみる

ここまでできれば相互通信ができます。

 

両端末ともBluetoothをONにして、テキストを打ってみましょう。

 

両方のデバイスを持ってないという方のために、下記に相互通信したときの結果を貼り付けておきます。



ただ、実際には経路や権限などの細かい設定をする必要がありますが、これでiPhoneとAndroidでの通信が可能になったのは大きなことだと思います。

 

また EddyStone や iBeacon との連携も細かく設定する必要がありますが、通信が可能となります。

実際に近距離通信を使って検証してみた

弊社では実際に近距離通信を利用したサービスを実装し、現実世界での実地検証を行いました。

 

その結果、ビーコンの通信範囲を100mに設定しても、人物や建物などに反射して複数回取得したり、逆に遮断されて届かなかったりと、様々な記事に記載されている内容通りには到達しませんでした。

 

また、10mなどのかなり近距離に設定しても、周辺の電波と干渉してしまい、到達までの時間が長くなってしまうなどの問題もありました。

 

BluetoothとGPSの両立で不安定さを解消しようと試みましたが、今度はバッテリー消費がとてつもないことになってしまうというジレンマに・・・。

 

さらに、デバイスのBluetoothチップによって、送受信の感度が異なることから、届いたり届かなかったりと不安定な結果となってしまいました。

さいごに

今回は作成方法だけではなく、実際に検証した結果も記載してみました。

 

こういう生きた記事を書いていきたいものです。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer