Android 6.0 Marshmallow変更点ピックアップ
先月Android APIの新たなメジャーアップデートである
Android 6.0 Marshmallowがリリースされましたね。
新機能「Now On Tap」や「すべてのアプリ」画面の変更といったUIまわりは
ユーザー的には気になるところですが、一般のニュースサイトで取り上げているところも多いので
本記事ではMarshmallowにおける変更点のうち(どちらかというと)
エンジニアとして気になる点をいくつかピックアップしたいと思います。
アプリの権限モデルの変更
アプリのアクセスの権限許可をユーザが行うタイミングが変更されました。
従来はアプリのインストール(or更新)時にアプリの求める権限許可(
カメラへのアクセス、位置情報の取得、インターネット接続等々)を
一括で求められユーザが選択できるのはインストールするかしないかでした。
Marshmallowからは機能が要求されたときに初めてユーザに対して権限許可を求めるようになり
ユーザがアクセスごとに個別に許可を行えるようになりました。
カメラを使うときになって初めてカメラへのアクセス権限が求められユーザが許可/拒否がだせるといった具合に。
targetSdkVersionが23未満でも設定画面から権限設定を変更できるため
既存のアプリも人事ではありません。
開発者は許可の取得タイミング、権限の有無による挙動制御、6.0未満の端末の対応etc
色々気にしなければならなさそうです。(まだ勉強不足。。。)
Doze and App Standby
大雑把にいってしまえば省電力機能です。
端末が一定時間触れられていないとき端末が突入するモードが「Doze」モードです。
アプリが一定時間使われていないときアプリが突入するモードが「Standby」モードです。
たとえばDozeモードではネットワークアクセスが遮断される等機能が制限されるため
それぞれのモードに入った後復帰した際にアプリが正しく動作しているかチェックする必要があるようです。
Apache HTTP Clientの削除
Android 6.0よりSDKからApache HTTP Clientのサポートが削除されます。
org.apache.httpパッケージのクラスとandroid.net.http.AndroidHttpClientパッケージのクラスは
Android 5.1より非推奨でしたが、6.0でとうとう廃止です。
ネットワーク通信機能の実装にHttpClientを使っているアプリはそれなりにあるんじゃないかなー
と思いますが、Android 2.3(API Level9)以上をターゲットにするならば
今後はHttpURLConnectionクラスを用いろとのことです。
指紋認証対応
OS標準での指紋認証に対応しました。当然ハードウェアが対応している必要がありますが。
デバイスのロックの解除、アプリの認証、Google Playストアでのアプリの購入時の認証、
AndroidPay(日本では未対応)などで利用可能です。
標準APIで利用できるようになったので、これから指紋認証の利用場面は増えていくのではないでしょうか。
パスワード代替としてアプリのログインに指紋認証が使えるというのは便利な使い方ができそうです。
Auto Backup機能の追加
アプリ本体のバックアップは従来からできていましたが、
6.0以降はアプリのデータもクラウドに自動でバックアップされます。
ユーザがデバイスを新しくしたり、アプリを再インストールしたときクラウドからリストアされます。
ちなみに最大バックアップ容量は25MBまで。
このシステムを動作させるのに別途コードを追加する必要はありません。
なんと便利なのでしょう。しかし!実は注意点があります。
アプリデータもリストアされるということは、
SharedPreferenceなんかに保存しているデータのうちデバイス固有でもつべき
データもリストア時に上書きされてしまうということです。
具体的な例でいうと、GoogleCloudMessagingのregistrationIdです。
registrationIdは新しいデバイスにアプリをインストールしたときに新しく発行されるはずなので
それがリストアで古いトークンに上書きされてしまうと、プッシュ通知が送れない事態になってしまいます。
このような事態を避けるために開発者はbacked-up filesから
registrationIdをexclude(除外)する対応が必要になります。
認証情報など同様に上書きされると問題があるデータがないか確認する必要があります。
アプリでAuto Backupを使わないとするのであれば、AndroidManifestに明示的に追加しましょう。
今回は影響範囲の大きそうなあたりを取り上げてみました。
他にもAPIから削除されたり仕様変更があった点も多々あるので
公式のドキュメントはしっかり確認したほうがよさそうです。
権限モデルの変更のあたりは別の機会にでもより深くまとめたいところです。