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

Preview:

Citation preview

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

堤 修一 @shu223 2015.5.13 potatotips #17

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

• iOS専業フリーランス

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

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

自己紹介

制作実績(BLE関連)

制作実績(BLE関連)

制作実績(BLE関連)

制作実績(BLE関連)

Music for the Deaf

制作実績(BLE関連)

Music for the Deaf

制作実績(BLE関連)

Music for the Deaf

制作実績(BLE関連)

Music for the Deaf

今日話すこと

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

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

- 対応方法

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

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

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

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

Core Bluetooth の

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

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

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

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

基本的には何でもできる

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

- スキャン

- 接続

- Read、Write

- Notificationの受信

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

- スキャン

- 接続

- Read、Write

- Notificationの受信

• ペリフェラル

- アドバタイズ

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

- Notificationの送信

ただし

制約はある

制約はある• セントラル

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

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

制約はある• セントラル

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

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

• ペリフェラル

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

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

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

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

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

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

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

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

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

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

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

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

困る例:スマートロック

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

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

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

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

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

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

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

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

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

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

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

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

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

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

デモ

殺しても通知が届く

実装方法

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

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

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

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

が、

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

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

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

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

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

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

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

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

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

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

Recommended