50
殺しても死なないアプリ Core Bluetooth の「状態の保存と復元」機能~ 修一 @shu223 2015.5.13 potatotips #17

殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

Embed Size (px)

Citation preview

Page 1: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

殺しても死なないアプリ ~Core Bluetooth の「状態の保存と復元」機能~

堤 修一 @shu223 2015.5.13 potatotips #17

Page 2: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

• 堤 修一(つつみ しゅういち)

• iOS専業フリーランス

• ブログ『Over&Out その後』

• 著書『iOS×BLE Core Bluetoothプログラミング』『iOSアプリ開発 達人のレシピ100』

自己紹介

Page 3: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Page 4: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Page 5: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Page 6: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Music for the Deaf

Page 7: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Music for the Deaf

Page 8: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Music for the Deaf

Page 9: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制作実績(BLE関連)

Music for the Deaf

Page 10: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

今日話すこと

Page 11: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

今日話すことCore Bluetooth のバックグラウンド実行モードについて

Page 12: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

今日話すことCore Bluetooth のバックグラウンド実行モードについて

- 対応方法

Page 13: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

今日話すことCore Bluetooth のバックグラウンド実行モードについて

- 対応方法- できること、できないこと

Page 14: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

今日話すことCore Bluetooth のバックグラウンド実行モードについて

- 対応方法- できること、できないこと- 「状態の保存と復元」機能

Page 15: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

Core Bluetooth の

バックグラウンド実行モード対応方法

Page 16: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜
Page 17: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

チェックマーク入れるだけ

Page 18: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

チェックマーク入れるだけこれだけでバックグラウンドでBLEによる通信が可能に

Page 19: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

バックグラウンドで何ができるのか?

Page 20: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

基本的には何でもできる

Page 21: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

基本的には何でもできる• セントラル

- スキャン

- 接続

- Read、Write

- Notificationの受信

Page 22: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

基本的には何でもできる• セントラル

- スキャン

- 接続

- Read、Write

- Notificationの受信

• ペリフェラル

- アドバタイズ

- Read / Writeリクエストへの応答

- Notificationの送信

Page 23: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

ただし

Page 24: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制約はある

Page 25: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制約はある• セントラル

- スキャン間隔が長くなる

- スキャン開始時のサービス指定が必須

Page 26: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

制約はある• セントラル

- スキャン間隔が長くなる

- スキャン開始時のサービス指定が必須

• ペリフェラル

- アドバタイズ間隔が長くなる

- ローカル名がアドバタイズされなくなる

- サービスUUIDがオーバーフロー領域に入る

Page 27: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

バックグラウンドでのアプリの停止

Page 28: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

バックグラウンドでアプリが停止(終了)すると

Page 29: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

バックグラウンドでアプリが停止(終了)すると

→ バックグラウンドタスクも停止する

Page 30: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

バックグラウンドでアプリが停止(終了)すると

→ バックグラウンドタスクも停止する

バックグラウンドでアプリが停止するケース

• (メモリ消費量等の理由で)システムによって停止

• ユーザーによって明示的に停止

Page 31: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

困る例:スマートロック

Page 32: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

困る例:スマートロック• ユーザーが家を出れば自動的にドアをロックし、帰ってくればロックを解除する

Page 33: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

困る例:スマートロック• ユーザーが家を出れば自動的にドアをロックし、帰ってくればロックを解除する- BLEの接続が切れることにより施錠され、次に家に帰ってきたときに自動的に再接続して解錠できるよう、バックグラウンドで接続要求を動作させておく

Page 34: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

困る例:スマートロック• ユーザーが家を出れば自動的にドアをロックし、帰ってくればロックを解除する- BLEの接続が切れることにより施錠され、次に家に帰ってきたときに自動的に再接続して解錠できるよう、バックグラウンドで接続要求を動作させておく

• 外出が数日間にわたり、その間にアプリが停止→ 自動的にロック解除されず、家に入れない!

Page 35: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

状態の保存と復元(State Preservation and Restoration)

Page 36: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

• アプリケーションが停止していても、代わりにBLE

関係のタスクを実行するよう、システムに要求するための機能

Page 37: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

• アプリケーションが停止していても、代わりにBLE

関係のタスクを実行するよう、システムに要求するための機能

• システムはアプリケーションを停止してメモリを解放する際、状態の復元で必要になるオブジェクトの情報を保存する

Page 38: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

• アプリケーションが停止していても、代わりにBLE

関係のタスクを実行するよう、システムに要求するための機能

• システムはアプリケーションを停止してメモリを解放する際、状態の復元で必要になるオブジェクトの情報を保存する

→ アプリを殺しても生き続ける!

Page 39: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

デモ

Page 40: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜
Page 41: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

殺しても通知が届く

Page 42: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

実装方法

Page 43: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

実装方法• バックグラウンド実行モードを有効にする

Page 44: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

実装方法• バックグラウンド実行モードを有効にする

• セントラルマネージャ 及び ペリフェラルマネージャ初期化時にオプションを与える

Page 45: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

基本的にはこれだけです。

Page 46: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

が、

Page 47: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

「アプリの状態すべて」が復元されるわけではない

Page 48: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

「アプリの状態すべて」が復元されるわけではない

• あくまでシステムがやってくれるのは、BLEの処理を引き継いで、イベント発生のタイミングでアプリをバックグラウンドで起こして当該デリゲートメソッドを呼ぶところまで

Page 49: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

「アプリの状態すべて」が復元されるわけではない

• あくまでシステムがやってくれるのは、BLEの処理を引き継いで、イベント発生のタイミングでアプリをバックグラウンドで起こして当該デリゲートメソッドを呼ぶところまで

• その他の諸々は自分で復元してやる必要がある

Page 50: 殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜

続きは書籍で!• konashi開発者 松村礼央さんとの共著

• BLEについては知識ゼロからでOK!

• BLEの仕様についても詳細な解説があるので、既に案件でバリバリやってる方もオススメ

• konashi等のデバイスがなくても、iPhone同士でも試せます