iOS 8.3 to iOS 9.0 API Differences CoreTelephony
まだWWDCのネットワーク系のビデオを見ていないので紹介されているか分からないけど、たぶんされていないであろう CoreTelephony の変更点について。
関連記事は以下
iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips
iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips
iOS 8.3 to iOS 9.0 API Differences ネットワークとWeb周り - ObjecTips
iOS 8.3 to iOS 9.0 API Differences CoreLocation - ObjecTips
iOS 8.3 to iOS 9.0 API Differences CoreTelephony - ObjecTips
CoreTelephony
CTCellularData
追加されたクラスは CTCellularData
のみで
メソッドは以下の2つ
@property (copy, nullable) CellularDataRestrictionDidUpdateNotifier cellularDataRestrictionDidUpdateNotifier __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_9_0); @property (nonatomic, readonly) CTCellularDataRestrictedState restrictedState __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_9_0);
現時点でドキュメント無いが、ヘッダに
cellular data allowed policy for the app
との記述があった。
アプリがセルラーデータ(モバイルデータ通信)の利用を許可されているかどうかについて調べられる事ができるクラスらしい。
コードを書いて試してみた。
CTCellularData
を作成した直後に restrictedState
を取得しようとした場合 kCTCellularDataRestrictedStateUnknown
が返される。
正しいステータスを取得するには cellularDataRestrictionDidUpdateNotifier
を用いてステータスの変更を受け取る。
変更通知後なら CTCellularData
のインスタンスからステータスを取得しても正しく値を取得できる。
変更通知のステータスは CTCellularDataRestrictedState
か kCTCellularDataNotRestricted
が取得できる。
まず初期状態として、アプリがモバイルデータでの通信をした事が無い場合には kCTCellularDataNotRestricted
が返されアプリはモバイルデータでの通信を許可されている状態になる。
次にアプリでのモバイルデータ通信の利用許可を切り替えてみる。
設定 > モバイルデータ通信
を開き「モバイルデータ通信を使用」の項目を探す。
画面は iOS 8 のもの
1度もモバイルデータ通信を行った事のないアプリはリストに出て来ないので、Wi-Fiをオフにしてアプリ内でWebビューを表示するなり NSURLSesison
を使うなりしてモバイルデータ通信を発生させる。
アプリがモバイルデータ通信を利用すると「モバイルデータ通信を使用」の一覧にアプリが表示されるのでスイッチをオフに切り替えてアプリに戻る。
アプリに戻ると上のコードで登録した通知に kCTCellularDataRestricted
が返ってくる。
iPod touch や iPad Wi-Fi モデルでこのAPIを使うとステータスはどうなるかが気になる。Unknown なのかデフォルトの NotRestricted なのか、、
まだ iPhone しか iOS 9 にしていないので試せていない。