はじめに
EAWiFiUnconfiguredAccessoryBrowser(名前が長い)とは何か
EAWiFiUnconfiguredAccessoryBrowserで検索した人はわかると思いますが一応説明しますと、WiFiスピーカーなどのWi-Fiを利用したアクセサリーを、Wi-Fiに接続させる設定をすることができます。
主な機能としては下記
・接続したいと言っているWi-Fiアクセサリーを検索する。見つけた、見失った。
(接続したいとは、WPSボタン押した状態といえばわかりやすいと思います)
・見つけたアクセサリーの接続設定画面を呼び出す。
・設定の成功/失敗/キャンセルイベントの受け取り。
ちなみにiOS8から利用できます。
実装
ではさっそく実装・・・と言いたい所ですが、プロジェクトの設定で一つ事前にやることが有ります。
プロジェクトの設定でCapabilitiesを選び、下記画像の様に「Wireless Accessory Configuration」というものが出てくるのでこれをまずONにします。
この設定が有効にならないとEAWiFiUnconfiguredAccessoryBrowserはまったく動作しません。エラーにもならないから全然使えないじゃないかと最初思いました。
ただし、これをONにしただけでは有効になってません、結構手間ですがApple Developer Programで、「Wireless Accessory Configurationにチェック」を入れた、App IDを作り(下記画像)
それを元にProvisioning Profileを作って、それをプロジェクトで利用しないと有効になりません。
※Wildcard App IDではなく、Explicit App IDで作って下さい。
ここまで出来たら、ExternalAccessory.frameworkをプロジェクトにインポートして下さい。(先にやってもいいです)
ようやく実装です。今回は検索と設定を行うクラスを一つ作りました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
import ExternalAccessory class WiFiAccessoryManager : NSObject , EAWiFiUnconfiguredAccessoryBrowserDelegate { var browser : EAWiFiUnconfiguredAccessoryBrowser = EAWiFiUnconfiguredAccessoryBrowser.init() func startScan() { browser.delegate = self; // 検索開始 browser.startSearchingForUnconfiguredAccessoriesMatchingPredicate(nil) } func stopScan() { // 検索停止 browser.stopSearchingForUnconfiguredAccessories() } func startSettingWithAccessory(unconfigAccessory : EAWiFiUnconfiguredAccessory, viewController : UIViewController) { // 設定画面の表示 browser.configureAccessory(unconfigAccessory, withConfigurationUIOnViewController: viewController) } // MARK: - EAWiFiUnconfiguredAccessoryBrowserDelegate // 検索状態が変わったら通知が来ます func accessoryBrowser(browser: EAWiFiUnconfiguredAccessoryBrowser, didUpdateState state: EAWiFiUnconfiguredAccessoryBrowserState) { NSLog("%s", __FUNCTION__) switch state { case EAWiFiUnconfiguredAccessoryBrowserState.WiFiUnavailable: // Wi-FiがそもそもONになってない NSLog("WiFiUnavailable") break case EAWiFiUnconfiguredAccessoryBrowserState.Stopped: // 検索停止 NSLog("Stopped") break case EAWiFiUnconfiguredAccessoryBrowserState.Searching: // 検索開始 NSLog("Searching") break case EAWiFiUnconfiguredAccessoryBrowserState.Configuring: // 設定開始 NSLog("Configuring") break } } // 設定完了時のステータス通知 func accessoryBrowser(browser: EAWiFiUnconfiguredAccessoryBrowser, didFinishConfiguringAccessory accessory: EAWiFiUnconfiguredAccessory, withStatus status: EAWiFiUnconfiguredAccessoryConfigurationStatus) { NSLog("%s", __FUNCTION__) switch status { case EAWiFiUnconfiguredAccessoryConfigurationStatus.Success: // 成功 NSLog("Success") browser.stopSearchingForUnconfiguredAccessories() break case EAWiFiUnconfiguredAccessoryConfigurationStatus.UserCancelledConfiguration: // キャンセル NSLog("UserCancelledConfiguration") break case EAWiFiUnconfiguredAccessoryConfigurationStatus.Failed: // 失敗 NSLog("Failed") break } } // 発見通知 func accessoryBrowser(browser: EAWiFiUnconfiguredAccessoryBrowser, didFindUnconfiguredAccessories accessories: Set<EAWiFiUnconfiguredAccessory>) { NSLog("%s", __FUNCTION__) let accessoryArray : Array<EAWiFiUnconfiguredAccessory> = Array(accessories) // TODO: 表示など } // 見失った通知 func accessoryBrowser(browser: EAWiFiUnconfiguredAccessoryBrowser, didRemoveUnconfiguredAccessories accessories: Set<EAWiFiUnconfiguredAccessory>) { NSLog("%s", __FUNCTION__) let accessoryArray : Array<EAWiFiUnconfiguredAccessory> = Array(accessories) // TODO: 表示など } } |
使い方としてはstartScanで検索を開始し、見つかったらstartSettingWithAccessoryで設定を開始することができます。
設定画面を呼び出すとモーダルで設定が開きますが、ここのUIは変更できないので注意して下さい。
最後に
このAPIが必要になった時、全く日本語の記事が無くて少し大変でした。