Android 6.0 (Marshmallow) では、アプリでユーザー データを適切に取り扱えるよう、いくつかの変更が加えられています。その目的は、デベロッパーが適切な動作をするアプリを簡単に作れるようにすることです。Marshmallow の普及は進みつつあるため、ぜひこの点に挑戦していただきたいと考えています。
本稿は、
実行時 パーミッションとハードウェアの識別子について、ユーザーの信頼を得るために考慮するべき事項を中心に説明しています。また、アプリの開発において目指すべき点を分かりやすく説明している
新しいベストプラクティス のドキュメントも紹介します。
パーミッションの変更
Marshmallow では、
パーミッションの許可を得るタイミングがインストール時から実行時に変更されています。 これは SDK 23 以降で強制的に適用される変更なので、Android 6.0 を対象とするすべてのアプリとすべてのデベロッパーに影響します。アプリはいずれ更新しなければなりませんが、更新は注意深く行う必要があります。
実行時パーミッションとは、アプリが実際に機密性の高い情報を使用するタイミングで、アクセスのパーミッションを要求することです。こうすることで、アプリがそのパーミッションをなぜ要求するのか、その場でユーザーに説明を提示することができるようになります。これまでのように、インストール前に要求する可能性のある情報を全部長々と提示する必要はなくなるので、ユーザーを不安にさせません。
またパーミッションはグループに分類することもできるようになったので、ユーザーは技術的な難しい専門用語を理解していなくても、内容を理解したうえでパーミッションを与えるかどうかの判断を下すことができます。決定権をユーザーにゆだねることで、ユーザーはパーミッションを与えないこともできますし、以前に付与したパーミッションを取り消すこともできます。したがって、アプリ側で特に注意が必要な点は、拒否される可能性のあるパーミッションが必要な API 呼び出しに注意することと、パーミッションが拒否されてもそれ以外のアプリの機能を使い続けることができるようにエラー処理を工夫することです。
識別子の変更点
ユーザーの信頼を得るにあたってもう 1 つ重要な点は、入力されたデータを適切に処理する必要があることです。Marshmallow では、アプリのデベロッパーに許可していたデータへのアクセスが一部無効になっています。これは、デベロッパーが直接データにアクセスすることを防ぐためです。
最もわかりやすいのは、
ローカルの WiFi や Bluetooth の MAC アドレスへのアクセスが禁止されたことです。 WifiInfo オブジェクトの
getMacAddress()
メソッドと、
BluetoothAdapter.getDefaultAdapter().getAddress()
メソッドは、今後どちらも
02:00:00:00:00:00
という値を返すことになります。
ただし、
Google Play サービスではインスタンス ID が提供されており、 デバイスで実行中のアプリケーションの各インスタンスは、この ID で区別します。インスタンス ID は、リセットできない端末固有のハードウェア ID に代わる信頼性の高い ID を提供します。インスタンス ID は、端末を出荷時の設定に戻すことでリセットできます。インスタンス ID のスコープは、アプリのインスタンスです。詳細については、Google Developers サイトの
インスタンス ID とは を参照してください。
次のトピック
ユーザーがあなたのアプリを信頼するかどうかは、アプリの外観とそれを見た印象によって大きく左右されます。パーミッションや識別子の処理を誤ると、開発者が望んでいない、または意図していないトラッキングが行われるリスクが高まるので、ユーザーはそのアプリに対して、ユーザーに対する配慮に欠けているという印象を持つ恐れがあります。そこで、適切に動作するアプリの開発をサポートするため、以下のドキュメントを新たに公開しました。このドキュメントを活用すると、ユーザーにとって適切な動作のアプリであるかどうかをデベロッパー自身が確認することができます。
それでは、引き続きアプリ開発をお楽しみください。ユーザーがあなたのアプリを気に入ってくれますように。またそれが、あなたのアプリのレビューの評価値に反映されますように。
Posted by
Yuichi Araki - Developer Relations Team
[この記事は デベロッパーアドボケート、Joanna Smith と Google Privacy Team、Giles Hogben による Android Developers Blog の記事 "Marshmallow and User Data " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
Android 6.0 (Marshmallow) では、アプリでユーザー データを適切に取り扱えるよう、いくつかの変更が加えられています。その目的は、デベロッパーが適切な動作をするアプリを簡単に作れるようにすることです。Marshmallow の普及は進みつつあるため、ぜひこの点に挑戦していただきたいと考えています。
本稿は、 実行時 パーミッションとハードウェアの識別子について、ユーザーの信頼を得るために考慮するべき事項を中心に説明しています。また、アプリの開発において目指すべき点を分かりやすく説明している 新しいベストプラクティス のドキュメントも紹介します。
パーミッションの変更
Marshmallow では、 パーミッションの許可を得るタイミングがインストール時から実行時に変更されています。 これは SDK 23 以降で強制的に適用される変更なので、Android 6.0 を対象とするすべてのアプリとすべてのデベロッパーに影響します。アプリはいずれ更新しなければなりませんが、更新は注意深く行う必要があります。
実行時パーミッションとは、アプリが実際に機密性の高い情報を使用するタイミングで、アクセスのパーミッションを要求することです。こうすることで、アプリがそのパーミッションをなぜ要求するのか、その場でユーザーに説明を提示することができるようになります。これまでのように、インストール前に要求する可能性のある情報を全部長々と提示する必要はなくなるので、ユーザーを不安にさせません。
またパーミッションはグループに分類することもできるようになったので、ユーザーは技術的な難しい専門用語を理解していなくても、内容を理解したうえでパーミッションを与えるかどうかの判断を下すことができます。決定権をユーザーにゆだねることで、ユーザーはパーミッションを与えないこともできますし、以前に付与したパーミッションを取り消すこともできます。したがって、アプリ側で特に注意が必要な点は、拒否される可能性のあるパーミッションが必要な API 呼び出しに注意することと、パーミッションが拒否されてもそれ以外のアプリの機能を使い続けることができるようにエラー処理を工夫することです。
識別子の変更点
ユーザーの信頼を得るにあたってもう 1 つ重要な点は、入力されたデータを適切に処理する必要があることです。Marshmallow では、アプリのデベロッパーに許可していたデータへのアクセスが一部無効になっています。これは、デベロッパーが直接データにアクセスすることを防ぐためです。
最もわかりやすいのは、 ローカルの WiFi や Bluetooth の MAC アドレスへのアクセスが禁止されたことです。 WifiInfo オブジェクトの getMacAddress()
メソッドと、BluetoothAdapter.getDefaultAdapter().getAddress()
メソッドは、今後どちらも 02:00:00:00:00:00
という値を返すことになります。
ただし、 Google Play サービスではインスタンス ID が提供されており、 デバイスで実行中のアプリケーションの各インスタンスは、この ID で区別します。インスタンス ID は、リセットできない端末固有のハードウェア ID に代わる信頼性の高い ID を提供します。インスタンス ID は、端末を出荷時の設定に戻すことでリセットできます。インスタンス ID のスコープは、アプリのインスタンスです。詳細については、Google Developers サイトのインスタンス ID とは を参照してください。
次のトピック
ユーザーがあなたのアプリを信頼するかどうかは、アプリの外観とそれを見た印象によって大きく左右されます。パーミッションや識別子の処理を誤ると、開発者が望んでいない、または意図していないトラッキングが行われるリスクが高まるので、ユーザーはそのアプリに対して、ユーザーに対する配慮に欠けているという印象を持つ恐れがあります。そこで、適切に動作するアプリの開発をサポートするため、以下のドキュメントを新たに公開しました。このドキュメントを活用すると、ユーザーにとって適切な動作のアプリであるかどうかをデベロッパー自身が確認することができます。
それでは、引き続きアプリ開発をお楽しみください。ユーザーがあなたのアプリを気に入ってくれますように。またそれが、あなたのアプリのレビューの評価値に反映されますように。
Posted by Yuichi Araki - Developer Relations Team