SlideShare a Scribd company logo
1 of 15
Download to read offline
Android/iOS端末間で
データを送る。BLEで
2018/08/23 日向強
自己紹介
• 日向強(tsuyoshi hyuga)
• @coffeegyunyu
• iPhone OS 2.2
• Android Donut
• Titanium
• 株式会社アールラーニングに
て主にiPhone、Androidの受
託開発を担当
BLEでデータ送信
• BLEでは大きなデータの送信はできないので、データを分
割して連続送信する必要がある
• データの分割数を増やすとその分送信リクエスト数が増え、
データを完全に送信するまで時間がかかる
• Maximum Transmission Unit(MTU)を調整すること
で、送信速度の最適化をはかる
基本的な流れ
• 端末同士の接続
• 一度に送れるデータの量を拡張する(Exchange MTU
Request)
• 接続した端末からデータ送信サービスを発見する
• データを適切なサイズに分割し、連続送信する
• あくまで端末間データ送信の一例です
Android(Central)→iOS(Peripheral)
Android(Central)→iOS(Peripheral)
• requestMtuで、MTU(一回の転送量)をPeripheralに要求することが可能
•BluetoothGatt.requestMtu(517)で要求するのが今の所最適値
• iOS側はこれをハンドリングする手段は無し
• Android側はBluetoothGattCallback.onMtuChanged()でMTU値が取得
できるので、(MTU値-5)でデータ分割して書き込みを繰り返す
iOS(Central)→Android(Peripheral)
iOS(Central)→Android(Peripheral)
• iOSは接続後、自動でMTU変更要求を行う(コントロールできない)
•MTU変更要求時の値は、iOSバージョンやデバイスで異なる
•Peripheral側はCentral側のMTUを把握しておくことが必要(あとで使
います)
• Androidの場合、BluetoothGattServerCallback.onMtuChanged()で
Central側のMTU値が取得可能
iOS(Central)→Android(Peripheral)
•iOS側は、Peripheral側にMTU値の読み込み要求を行う
• AndroidがPeripheralの場合、
BluetoothGattServerCallback.onMtuChanged()で取得したMTU値を
BluetoothGattServer.sendResponse()で送信する
• iOS(Central)→iOS(Peripheral)であれば、
CBPeripheralManagerDelegate.didReceiveRead()の時に
CBATTRequest.central.maximumUpdateValueLengthを返す
iOS(Central)→Android(Peripheral)
• データ分割は、
min(peripheral.maximumWriteValueLength,MTU値)-5で
分割して、送信を繰り返す

自分と相手のMTUを比較して、低い方でデータ送信を行う
Q&A(Android編)
• なぜMTUの値を517に指定するのか 

→おそらく端末ごとに最適なMTUは異なるが、現状、
APIでMTUの最適な値が取れないので517に決め打ち
Nexus5(2013)で動作するので問題ないんじゃないかと



端末の最適なMTUを取得する方法をお持ちの方は教えて
ください
Q&A(iOS編)
• なぜ、MTUをreadValue()で読み込みに行くのか

→自分自身のMTU値が現状のAPIでは取得できないため

自身がCentral時に、Peripheral側のMTUを取得すること

自身がPeripheral時に、Central側のMTUを取得すること
は可能





端末の最適なMTUを取得する方法をお持ちの方は教えて
ください
まとめ
•端末の最適なMTUを取得する方法を
お持ちの方は教えてください

More Related Content

What's hot

ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方akira6592
 
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法de:code 2017
 
Openv switchの使い方とか
Openv switchの使い方とかOpenv switchの使い方とか
Openv switchの使い方とかkotto_hihihi
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門Masayuki Kobayashi
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンスHidenori Ishii
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)J-Stream Inc.
 
大規模DCのネットワークデザイン
大規模DCのネットワークデザイン大規模DCのネットワークデザイン
大規模DCのネットワークデザインMasayuki Kobayashi
 
P2P Container Image Distribution on IPFS With containerd and nerdctl
P2P Container Image Distribution on IPFS With containerd and nerdctlP2P Container Image Distribution on IPFS With containerd and nerdctl
P2P Container Image Distribution on IPFS With containerd and nerdctlKohei Tokunaga
 
Kotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へKotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へTakaki Hoshikawa
 
リクルート式Hadoopの使い方
リクルート式Hadoopの使い方リクルート式Hadoopの使い方
リクルート式Hadoopの使い方Recruit Technologies
 
Integrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaIntegrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaDalton Valadares
 
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門Hideo Harada
 
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱Yuya Rin
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)VirtualTech Japan Inc.
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoTreasure Data, Inc.
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたakira6592
 
비디오 코덱
비디오 코덱비디오 코덱
비디오 코덱greenday96
 
IBGPのコンバージェンスの改善qunog3
IBGPのコンバージェンスの改善qunog3IBGPのコンバージェンスの改善qunog3
IBGPのコンバージェンスの改善qunog3Noriyuki Yamaguchi
 

What's hot (20)

ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方ネットワークコンフィグ分析ツール Batfish との付き合い方
ネットワークコンフィグ分析ツール Batfish との付き合い方
 
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
 
Openv switchの使い方とか
Openv switchの使い方とかOpenv switchの使い方とか
Openv switchの使い方とか
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
大規模DCのネットワークデザイン
大規模DCのネットワークデザイン大規模DCのネットワークデザイン
大規模DCのネットワークデザイン
 
P2P Container Image Distribution on IPFS With containerd and nerdctl
P2P Container Image Distribution on IPFS With containerd and nerdctlP2P Container Image Distribution on IPFS With containerd and nerdctl
P2P Container Image Distribution on IPFS With containerd and nerdctl
 
Kotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へKotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へ
 
リクルート式Hadoopの使い方
リクルート式Hadoopの使い方リクルート式Hadoopの使い方
リクルート式Hadoopの使い方
 
Integrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaIntegrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and Wilma
 
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
 
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
 
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 TokyoPrestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
 
비디오 코덱
비디오 코덱비디오 코덱
비디오 코덱
 
IBGPのコンバージェンスの改善qunog3
IBGPのコンバージェンスの改善qunog3IBGPのコンバージェンスの改善qunog3
IBGPのコンバージェンスの改善qunog3
 
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 

Android iOS BLE 20180823