SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Android BLEのつらみ
を予防するTips
Twitter : @OE_uia / GitHub: taisukeoe
自己紹介
麻植泰輔 / OE TAISUKE
- Twitter: @OE_uia
- GitHub: taisukeoe
- ScalaMatsuri co-chair
- deeplearning4j/nd4s author
- Android Developer
最近のお仕事
- BONX
- Scala研修
などなど
今日話すこと
● Bluetooth Low Energyとは?
● Android BLEのサポート状況
● Android BLE Central機能のつらみ
● つらみを予防するためのTips
● Bluetooth 4.0
● 2つの役割
○ Central: 見つける、接続する
○ Peripheral: 見つけられる、接続される
● IoTの文脈でしばしば用いられるため、BLEデバイスをiOS,
Android両方から触ることも少なくない
● iOS, Androidともに対応しているが、iOSの方が基本的に安
定動作している
● というより、Android BLEが不安定
Bluetooth Low Energy
BLEにおける2つの役割:
CentralとPeripheral
Scan
見つける側
(Central)
見つけられる側
(Peripheral)
BLE Advertise
Connect
AndroidのBLEのサポート状況
● OS
Central: 4.3以上〜
Peripheral: 5.0以上~
● チップセット
Central: 全てのチップが対応している(ハズだが、安定性の端末
差が激しい・・・)
Peripheral: Advertiseするには、BroadcomのHCIコマンド
`multiple advertisement`に対応している必要がある(そして、公
開されている端末仕様からはわからない)
詳しくは「BONXを支える技術: Bluetooth編 」
Android BLE Centralが不安定?
● Scanはおおよそ安定的に動作する
○ Advertise Packet
○ RSSI強度
○ MACアドレス
● Connectは端末差が大きいが、基本的に不安定。主な失敗
ポイント:
○ Peripheralに接続要求をしても、成功しない
○ 接続できても、目的の Service/Characteristicが見つからない
○ 目的のService/Characteristicが見つかっても、値の読み込み /書き
込みができない
※「成功しない」にも2パターン:「エラーが発生」or「返事が
返ってこない」
Android BLEつらい
● コード上で完全に克服するのは難しい
● 仕様で克服しよう
Android BLEのつらみを乗り超える仕様
● BLEを極力使わない
● Androidの動作対象端末を限定する
● BLE接続の頻度を下げる
● UUID指定のスキャンを前提にしない
Android BLEを極力使わない
● そもそも使わなければ問題が生じない
● それってBLE以外の技術、例えばClassic BT (SPP)で出来な
いのか?
● 実際、BONXではAndroid BLEの一部機能を、SPP経由で
IoTデバイスに肩代わりさせています。
Androidの動作対象端末を絞る
● ここ2年に発売されたフラッグシップ級の端末なら「比較的」
安定動作するものが多い。
● できるだけAndroid 4.3以下のサポートをしない。
● 可能なら、Android 4.4もサポート対象外とし、Android 5.0
以上のみ対応とする(BLE APIが4系と5系で異なるため)。
● さらに可能なら、発売当時Android 4.xだった端末もサポー
トしない。その当時のチップはAdvertiseに対応していないこ
とが多いなど、問題の元になることがある。
BLE接続の頻度を下げる
● Android BLEは接続のたびに、失敗するリスクがある
● 接続せずに、スキャンだけで済むならそれが良い
● 接続する必要があっても、接続回数および接続相手の数を
減らす
● 短時間の間にいろんな相手と接続/切断を繰り返すアプリが
一番大変
UUID指定のスキャンを前提にしない
● BLEスキャンのAPIには、Advertise Packetに含まれる
UUIDを指定したスキャンが用意されている。これにより接
続対象候補の端末を絞ることができる。
● しかし、iOSのAdvertisePacketは、データ領域が足りなく
なった場合などに`overflow領域`と呼ばれる特別な領域に
格納されるという仕様がある。`overflow領域`に格納された
UUIDは、iOSからのスキャンでは利用できるが、Android
のUUID指定スキャンでは利用できない
● iOSがAdvertiseする仕様において、AndroidはUUID指定
スキャンは実質使用することが難しい。
● BLEは節度を守って使う限りにおいて、とても便利な規格。
Android BLEに関してAPIが用意されているからと言って、
全面的に信頼したりしない。
● Android BLEを使用した機能の仕様を決める前に、以下の
ポイントはチェックしておくとつらみが減る(かもしれない)
○ BLEがベストな選択肢なのか?
○ サポート対象端末は?
○ 接続頻度は?
○ BLEスキャンの対象は?
● こんな方法でつらさを回避してるよ!って話があったらぜひ
教えてください
まとめ

Mais conteúdo relacionado

Mais procurados

FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするchigichan24
 
やはりお前らのAndroidのBLEが不安定だという認識は間違っている
やはりお前らのAndroidのBLEが不安定だという認識は間違っているやはりお前らのAndroidのBLEが不安定だという認識は間違っている
やはりお前らのAndroidのBLEが不安定だという認識は間違っているyouten (ようてん)
 
GNU AGPLv3について(On GNU AGPLv3)
GNU AGPLv3について(On GNU AGPLv3)GNU AGPLv3について(On GNU AGPLv3)
GNU AGPLv3について(On GNU AGPLv3)真行 八田
 
Hubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話しますHubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話しますhironroinakae
 
レガシーコード改善のススメ
レガシーコード改善のススメレガシーコード改善のススメ
レガシーコード改善のススメAkira Hirasawa
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話Yoshio Hanawa
 
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...CODE BLUE
 
Hubsカスタマイズ 行動ログ取得やバックエンドの話
Hubsカスタマイズ 行動ログ取得やバックエンドの話Hubsカスタマイズ 行動ログ取得やバックエンドの話
Hubsカスタマイズ 行動ログ取得やバックエンドの話hironroinakae
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する日本マイクロソフト株式会社
 
犬でもわかる公開鍵暗号
犬でもわかる公開鍵暗号犬でもわかる公開鍵暗号
犬でもわかる公開鍵暗号akakou
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜Masaru Kurahayashi
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
Node RED で実現する製造業の DX
Node RED で実現する製造業の DXNode RED で実現する製造業の DX
Node RED で実現する製造業の DX雅治 新澤
 
新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向FIDO Alliance
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてHiroyuki Wada
 

Mais procurados (20)

FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにする
 
やはりお前らのAndroidのBLEが不安定だという認識は間違っている
やはりお前らのAndroidのBLEが不安定だという認識は間違っているやはりお前らのAndroidのBLEが不安定だという認識は間違っている
やはりお前らのAndroidのBLEが不安定だという認識は間違っている
 
GNU AGPLv3について(On GNU AGPLv3)
GNU AGPLv3について(On GNU AGPLv3)GNU AGPLv3について(On GNU AGPLv3)
GNU AGPLv3について(On GNU AGPLv3)
 
Hubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話しますHubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話します
 
レガシーコード改善のススメ
レガシーコード改善のススメレガシーコード改善のススメ
レガシーコード改善のススメ
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
[CB16] スマートフォン制御のIoTデバイスにおけるBLE認証設計の課題:Gogoroスマートスクターの分析を通じて by Chen-yu Dai [...
 
Hubsカスタマイズ 行動ログ取得やバックエンドの話
Hubsカスタマイズ 行動ログ取得やバックエンドの話Hubsカスタマイズ 行動ログ取得やバックエンドの話
Hubsカスタマイズ 行動ログ取得やバックエンドの話
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
 
犬でもわかる公開鍵暗号
犬でもわかる公開鍵暗号犬でもわかる公開鍵暗号
犬でもわかる公開鍵暗号
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
レガシーコードに向き合ってみた話
レガシーコードに向き合ってみた話レガシーコードに向き合ってみた話
レガシーコードに向き合ってみた話
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Node RED で実現する製造業の DX
Node RED で実現する製造業の DXNode RED で実現する製造業の DX
Node RED で実現する製造業の DX
 
新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向新しい認証技術FIDOの最新動向
新しい認証技術FIDOの最新動向
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
 

Semelhante a Android BLEのつらみを予防するTips

BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~Taisuke Oe
 
Android端末のroot化について
Android端末のroot化についてAndroid端末のroot化について
Android端末のroot化についてShuichi Takaya
 
Node-REDについて
Node-REDについてNode-REDについて
Node-REDについてAtsushi Kojo
 
Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!
Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!
Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!Jingun Jung
 
CoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスCoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスShin Ise
 
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50NorioIkedo
 
ADKでロボット with NFC
ADKでロボット with NFCADKでロボット with NFC
ADKでロボット with NFCTakao Sumitomo
 
ふぃじかるこんぴゅ〜てぃんぐしてみた
ふぃじかるこんぴゅ〜てぃんぐしてみたふぃじかるこんぴゅ〜てぃんぐしてみた
ふぃじかるこんぴゅ〜てぃんぐしてみたTakao Sumitomo
 
ABC2012 Spring: Android Design for Dummies
ABC2012 Spring: Android Design for DummiesABC2012 Spring: Android Design for Dummies
ABC2012 Spring: Android Design for DummiesNobuya Sato
 
[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介Kenichi Kambara
 
イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料Kenichi Yoshida
 
とある小型の青歯規格(ブルートゥース)
とある小型の青歯規格(ブルートゥース)とある小型の青歯規格(ブルートゥース)
とある小型の青歯規格(ブルートゥース)iPride Co., Ltd.
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介l_b__
 
BlocklyDuino Editorの紹介
BlocklyDuino Editorの紹介BlocklyDuino Editorの紹介
BlocklyDuino Editorの紹介岡田 裕行
 
iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめHiramatsu Ryosuke
 

Semelhante a Android BLEのつらみを予防するTips (20)

BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
 
Wio lte iot_hub
Wio lte iot_hubWio lte iot_hub
Wio lte iot_hub
 
Android端末のroot化について
Android端末のroot化についてAndroid端末のroot化について
Android端末のroot化について
 
Winストアアプリでble接続
Winストアアプリでble接続Winストアアプリでble接続
Winストアアプリでble接続
 
Node-REDについて
Node-REDについてNode-REDについて
Node-REDについて
 
Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!
Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!
Azure IoT Edge for Linux on Windows (EFLOW)を学ぶ!
 
CoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスCoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low Energyデバイス
 
試してGOTTEN READY! Azure Sphere
試してGOTTEN READY! Azure Sphere試してGOTTEN READY! Azure Sphere
試してGOTTEN READY! Azure Sphere
 
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
 
IoT LT 大阪 20160406
IoT LT 大阪 20160406IoT LT 大阪 20160406
IoT LT 大阪 20160406
 
Embedded Master2
Embedded Master2Embedded Master2
Embedded Master2
 
ADKでロボット with NFC
ADKでロボット with NFCADKでロボット with NFC
ADKでロボット with NFC
 
ふぃじかるこんぴゅ〜てぃんぐしてみた
ふぃじかるこんぴゅ〜てぃんぐしてみたふぃじかるこんぴゅ〜てぃんぐしてみた
ふぃじかるこんぴゅ〜てぃんぐしてみた
 
ABC2012 Spring: Android Design for Dummies
ABC2012 Spring: Android Design for DummiesABC2012 Spring: Android Design for Dummies
ABC2012 Spring: Android Design for Dummies
 
[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介
 
イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料
 
とある小型の青歯規格(ブルートゥース)
とある小型の青歯規格(ブルートゥース)とある小型の青歯規格(ブルートゥース)
とある小型の青歯規格(ブルートゥース)
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
BlocklyDuino Editorの紹介
BlocklyDuino Editorの紹介BlocklyDuino Editorの紹介
BlocklyDuino Editorの紹介
 
iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
 

Mais de Taisuke Oe

プレScalaMatsuri2019「スピーカー入門」
プレScalaMatsuri2019「スピーカー入門」プレScalaMatsuri2019「スピーカー入門」
プレScalaMatsuri2019「スピーカー入門」Taisuke Oe
 
How to start functional programming (in Scala): Day1
How to start functional programming (in Scala): Day1How to start functional programming (in Scala): Day1
How to start functional programming (in Scala): Day1Taisuke Oe
 
Monix Taskが便利だという話
Monix Taskが便利だという話Monix Taskが便利だという話
Monix Taskが便利だという話Taisuke Oe
 
How to get along with implicits
How to get along with implicits How to get along with implicits
How to get along with implicits Taisuke Oe
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットTaisuke Oe
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Taisuke Oe
 
AuxパターンをDottyで解決する
AuxパターンをDottyで解決するAuxパターンをDottyで解決する
AuxパターンをDottyで解決するTaisuke Oe
 
Real World Android Akka
Real World Android AkkaReal World Android Akka
Real World Android AkkaTaisuke Oe
 
Real world android akka
Real world android akkaReal world android akka
Real world android akkaTaisuke Oe
 
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターンTaisuke Oe
 

Mais de Taisuke Oe (10)

プレScalaMatsuri2019「スピーカー入門」
プレScalaMatsuri2019「スピーカー入門」プレScalaMatsuri2019「スピーカー入門」
プレScalaMatsuri2019「スピーカー入門」
 
How to start functional programming (in Scala): Day1
How to start functional programming (in Scala): Day1How to start functional programming (in Scala): Day1
How to start functional programming (in Scala): Day1
 
Monix Taskが便利だという話
Monix Taskが便利だという話Monix Taskが便利だという話
Monix Taskが便利だという話
 
How to get along with implicits
How to get along with implicits How to get along with implicits
How to get along with implicits
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
 
AuxパターンをDottyで解決する
AuxパターンをDottyで解決するAuxパターンをDottyで解決する
AuxパターンをDottyで解決する
 
Real World Android Akka
Real World Android AkkaReal World Android Akka
Real World Android Akka
 
Real world android akka
Real world android akkaReal world android akka
Real world android akka
 
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
 

Android BLEのつらみを予防するTips