連載
» 2015年06月23日 05時00分 公開

細か過ぎて伝わってないけど開発者が知っておきたいAndroid Mの新機能まとめAndroidで動く携帯Javaアプリ作成入門(58)(3/6 ページ)

[緒方聡,@IT]

決済機能Android Payなどで使う指紋認証機能

 Android Mでは、指紋認証がサポートされているデバイスを使うことで、スキャンした自分の指紋を使用してユーザー認証を行えます。決済機能「Android Pay」でも使われるようです。

決済画面で指紋認証を使う例(Google I/O 2015基調講演の動画(YouTube)より引用)

 新しいAPIでは、例えば「ユーザーがロック画面の解除を使用して認証されたか」などをチェックする機能などが提供されます。この機能はAndroidキーストアシステムと深く関連しています。

Androidキーストアの変更

 AndroidのキーストアシステムDSA(Degital Signature Algorithm)をサポートしなくなりました。ECDSA(Elliptic Curve Digital Signature Algorithm)は引き続きサポートされます。

 安静時(保存されている間)の暗号化を必要としないキーは、安全なロック画面が無効になっている場合、ユーザーやデバイス管理者によって削除、リセットされます。安静時の暗号化を必要とするキーはこれらのイベント時に削除されます。

指紋認証

 指紋でユーザー認証を行うには、android.hardware.fingerprint.FingerprintManagerのFingerprintManager.authenticate()で新しいインスタンスを取得します。もちろん、アプリは指紋センサーに対応したデバイスで動作している必要があります。

 開発者はアプリに指紋認証フローのためのUIを実装し、そのUIではAndroid標準の指紋アイコンを使用する必要があります。指紋アイコン(c_fp_40px.png)はサンプルアプリに含まれています。指紋認証を使用する複数のアプリを開発する場合、各アプリは独立してユーザーの指紋認証を行わなければならないことに注意してください。

 アプリで指紋認証を使用するには、マニフェストにUSE_FINGERPRINTを追加します。

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />

 指紋認証の実装は「Fingerprint Dialogサンプルアプリ」を参照してください。

指紋認証の実装例(「Fingerprint Dialogサンプルアプリ」より引用)

 もし指紋認証を試したい場合、以下のステップに従ってください。

  1. Android SDK Tools 24.3をインストール
  2. エミュレーターで[設定]→[セキュリティ]→[指紋認証]から新しい指紋認証を登録
  3. エミュレーター上で以下のコマンドを実行し、タッチイベントをエミュレートする。これはロック画面または開発中のアプリ上で行う
adb -e emu finger touch {finger_id}

 Windowsの場合、「telnet 127.0.0.1 {emulator-id}」コマンドと、それに続いて「finger touch {finger_id}」コマンドを実行する必要があります。

資格の確認

 アプリは、ユーザーが行った直近のロック解除に基づいてユーザー認証を行えます。この機能は、ユーザーをアプリ固有のパスワードを記憶することから解放し、アプリに独自の認証UIを実装する必要性を回避できます。アプリはユーザー認証のための公開鍵または秘密鍵と一緒にこの機能を使用する必要があります。

 KeyGeneratorまたはKeyPairGeneratorをセットアップする際、ユーザーが正常に認証された後に同一のキーを再利用できるためのタイムアウト時間を設定するには、新しいandroid.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()を呼び出します。

 過度な再認証ダイアログ表示は推奨されていません。アプリは暗号オブジェクトを使用する際、タイムアウトしていた場合にだけ、アプリ内でユーザーを再認証するcreateConfirmDeviceCredentialIntent()を使用するようにしてください。

 この機能のアプリ実装を確認するには、「Confirm Credentialサンプルアプリ」を参照してください。

資格の確認の実装例(「Confirm Credentialサンプルアプリ」より引用)

APK妥当性検証の厳密化

 Android Mではより厳密なAPKの妥当性検証を行うようになりました。マニフェストにファイルエントリが存在し、APK内に存在しない場合、APKが破損しているとみなされます。APK内のいずれかのファイルが削除された場合、再署名が必要になります。

アプリの自動バックアップ

 Androidでは、アプリのために自動的に全データのバックアップと復元を実行します。この動作はAndroid M対応アプリではデフォルトで有効になっており、開発者が任意のコードを追加する必要はありません。

 ユーザーが自分のGoogleアカウントを削除した場合、バックアップデータも削除されます。この機能がどのように動作し、どのようにファイルシステム上にバックアップするかを設定する方法に関しては「Auto Backup for Apps」を参照してください。

外部ストレージに関する変更点

 Android Mでは、ユーザーはSDカードなどの外部ストレージを利用できます。外部ストレージを利用する際、暗号化して内部ストレージと同様に動作するように記憶メディアをフォーマットします。この機能によりユーザーは、アプリのプライベートデータとアプリ自体を、内部ストレージと外部ストレージ間で移動できます。移動の際には、システムはアプリのマニフェストに記載されたandroid:installLocationを尊重します。

 アプリが内部ストレージと外部ストレージで移動された場合、以下のAPIが返す値は動的に変化することに注意する必要があります。ファイルパスを生成する場合、常にAPIを呼び出し、動的に生成することが推奨されます。ハードコードされたファイルパスや、以前用いたファイルパスのキャッシュを保持しないようにしましょう。

  • Contextメソッド:
    • getFilesDir()
    • getCacheDir()
    • getCodeCacheDir()
    • getDatabasePath()
    • getDir()
    • getNoBackupFilesDir()
    • getFileStreamPath()
    • getPackageCodePath()
    • getPackageResourcePath()
  • ApplicationInfoフィールド:
    • dataDir
    • sourceDir
    • nativeLibraryDir
    • publicSourceDir
    • splitSourceDirs
    • splitPublicSourceDirs

 Android Mでこの機能をデバッグしたい場合は、On-The-Go(OTG)USBケーブル経由でAndroidデバイスにUSBドライブを接続し、以下のコマンドを実行することで可能です。

$ adb shell sm set-force-adoptable true

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。