page.title=Permissions and User Data page.metaDescription=An overview of permissions on Android and how to manage them. page.tags="user data","permissions","identifiers" page.image=images/cards/card-user_2x.png page.article=true @jd:body <div id="tb-wrapper"> <div id="tb"> <h2>In this document</h2> <ol> <li><a href="#introduction">Introduction</a></li> <li><a href="#permission_groups">Permission Groups</a></li> <li><a href="#permission_requests_and_app_downloads">Permission Requests and App Downloads</a></li> <li><a href="#permission_requests_trend_downward">Permission Requests Trend Downward</a></li> </ol> <h2>You should also read</h2> <ol> <li><a href="{@docRoot}guide/topics/security/permissions.html">System Permissions</a></li> <li><a href="{@docRoot}training/permissions/index.html">Working with System Permissions</a></li> </ol> </div> </div> <p> Permissions protect sensitive information available from a device and should only be used when access to information is necessary for the functioning of your app. </p> <p> This document provides a high-level overview on how permissions work in Android so you can make better, more informed decisions about the permissions you're requesting. The information in this document is not use-case specific and avoids complex, low-level discussions of the underlying code. </p> <p> For specific recommendations on how to manage permissions, please see <a href="{@docRoot}training/articles/user-data-permissions.html">Best Practices for App Permissions</a>. For best practices on using unique identifiers on Android, please see <a href= "{@docRoot}training/articles/user-data-ids.html">Best Practices for Unique Identifiers</a>. For details on how to work with permissions in your code, see <a href="{@docRoot}training/permissions/index.html">Working with System Permissions</a>. </p> <h2 id="introduction">Introduction</h2> <p> Every Android application must have a <em>manifest file</em> that presents essential information about the app to the Android system. The Android system also requires apps to request permission when they want to access sensitive device or user information, and these requests must be documented in advance as a part of your app's manifest. Moreover, accessing sensitive information can affect user behavior, so it's important to make sure you are only making permission requests when that information is necessary for the functioning of your app. </p> <h2 id="permission_groups">Permission Groups</h2> <p> Permissions in Android are organized into <code><a href= "{@docRoot}guide/topics/security/permissions.html#perm-groups">permission groups</a></code> that organize, and group, permissions related to a device's capabilities or features. Under this system, permission requests are handled at the group level and a <em><strong>single permission group</strong></em> corresponds to <em><strong>several permission declarations</strong></em> in the app manifest; for example, the SMS group includes both the <code>READ_SMS</code> and the <code>RECEIVE_SMS</code> declarations. </p> <div class="wrap"> <img src="{@docRoot}images/training/articles/user-data-overview-permissions-flow01.jpg"> </div> <p> This arrangement is simpler and more informative for users; once an app is granted permission to access the group, it can use API calls within that group and users with auto-update enabled will not be asked for additional permissions because they have already granted access to the group. Grouping permissions in this way enables the user to make more meaningful and informed choices, without being overwhelmed by complex and technical permission requests. </p> <p> This also means that when you request access to a particular API call or query a content provider behind a permission, the user will be presented with a request to grant permission for the whole group rather than the specific API call. For example, if you request the <code>WRITE_CALL_LOG</code> permission, the user will be asked to grant access to the <em>PHONE</em> group (in API level 23 and higher), which is composed of the <code>READ_PHONE_STATE</code>, <code>CALL_PHONE</code>, <code>READ_CALL_LOG</code>, <code>WRITE_CALL_LOG</code>, <code>ADD_VOICEMAIL</code>, <code>USE_SIP</code>, and <code>PROCESS_OUTGOING_CALLS</code> permissions, and all their associated methods. </p> <div class="wrap"> <img src="{@docRoot}images/training/articles/user-data-overview-permissions-flow02.png"> </div> <p> One consequence of grouping permissions is that a single API call within your app can have a multiplying effect in terms of the number of permissions requested by your app. </p> <ol> <li>API Call →</li> <li stydle="margin-left:.5em;">Triggers a specific <em>Permission Group</em> access request →</li> <li stydle="margin-left:1em;">Successful request grants access to all permissions in group (if auto-update enabled) →</li> <li stydle="margin-left:1.5em;">Each permission grants access to all APIs under that permission</li> </ol> <p> As another example, let's assume your application uses one or more <a href= "{@docRoot}reference/android/telephony/TelephonyManager.html"><code>TelephonyManager</code></a> methods, such as: </p> <pre class="prettyprint"> TelephonyManager.getDeviceId() TelephonyManager.getSubscriberId() TelephonyManager.getSimSerialNumber() TelephonyManager.getLine1Number() TelephonyManager.getVoiceMailNumber() </pre> <p> To use these methods, the <code>READ_PHONE_STATE</code> permission must be declared in the app's manifest, and the associated permission group, <em>PHONE</em>, will be surfaced to the user. This is important, because it means the user will be asked to grant permission for the relevant group and all its associated permissions and API calls, rather than for the specific API call you're requesting. </p> <p>For a full mapping between permissions and their associated permission groups, please refer to the appropriate version-specific documentation below:</p> <ul> <!--<li> <a href="">pre-M Android OS versions</a>.</li> --> <li> <a href="{@docRoot}guide/topics/security/permissions.html#perm-groups">Permission groups, Android 6.0 Marshmallow (API level 23) and later</a>.</li> </ul> <h2 id="permission_requests_and_app_downloads">Permission Requests and App Downloads</h2> <div style="padding:.5em 2em;"> <div style="border-left:4px solid #999;padding:0 1em;font-style:italic;"> <p><em>I'm currently using the READ_PHONE_STATE permission in Android to pause my media player when there's a call, and to resume playback when the call is over. The permission seems to scare a lot of people</em>...<span style="font-size:.8em;color:#777"><sup><em><a href="#references" style="color:#777;padding-left:.1em;">1</a></em></sup></span></p> </div> </div> <p> Research shows that among apps that are otherwise identical (e.g., functionality, brand recognition), requesting fewer permissions leads to more downloads. Publicly available sources exist that assign grades to apps based on their permissions usage and allow users to compare related apps by score; such grades exist for many of the current Android apps and users pay close attention to the related rankings. </p> <p> One study<span style="font-size:.8em;color:#777"><sup><em><a href= "#references" style= "color:#777;padding-left:.1em;">2</a></em></sup></span>, in which users were shown two unbranded apps with similar ratings that had the same functionality but different sets of permission requests, showed that users were, on average, 3 times more likely to install the app with fewer permissions requests. And a similar study <span style= "font-size:.8em;color:#777"><sup><em><a href="#references" style= "color:#777;padding-left:.1em;">3</a></em></sup></span> showed that users are 1.7 times more likely, on average, to select the application with fewer permission requests. </p> <p> Finally, permissions usage is not evenly distributed across apps within a similar category of Play apps. For example, 39.3% of arcade game apps in the Play store request no permissions that are surfaced to the user while only 1.5% of arcade games request the Phone permission group (see Figure 1). </p> <div class="wrap"> <div class="cols"> <div class="col-16of16"> <img src="{@docRoot}images/training/articles/user-data-overview-permissions-groups.png"> <p class="figure-caption"><strong>Figure 1.</strong> Distribution of permission groups use across Arcade Games category.</p> </div> </div> </div> <p> Users comparing your app to other similar apps may determine that it is making unusual permission requests for that category - in this case, Arcade Games apps accessing the <em>Phone</em> permission group. As a result, they may install a similar app in that category that avoids those requests.<span style="font-size:.8em;color:#777"><sup><em><a href= "#references" style="color:#777;padding-left:.1em;">4</a></em></sup></span> </p> <h2 id="permission_requests_trend_downward">Permission Requests Trend Downward</h2> <p> A recent analysis of Play store apps over time indicated that many developers trim permissions after first publishing their apps, suggesting that they may be employing more caution around which permission groups they declare. </p> <div class="wrap"> <div class="cols"> <div class="col-16of16"> <img src="{@docRoot}images/training/articles/user-data-overview-permissions-usage.jpg"> <p class="figure-caption"><strong>Figure 2.</strong> Developer usage of popular permissions has decreased over time.</p> </div> </div> </div> <p> The graph in <em>Figure 2</em> illustrates this trend. There has been a steady decrease in the average percentage of developers' apps requesting at least one of the three most popular permissions in the Play store (<code>READ_PHONE_STATE</code>, <code>ACCESS_FINE_LOCATION</code>, and <code>ACCESS_COARSE_LOCATION</code>). These results indicate that developers are reducing the permissions their apps request in response to user behavior. </p> <p> The bottom line is that providing the same functionality to the user with minimal access to sensitive information means more downloads for your app. For specific recommendations on how to achieve this, please see <a href= "{@docRoot}training/articles/user-data-permissions.html">Best Practices for Application Permissions</a>. </p> <h2 id="references">References</h2> <p>[1] Developer quote on StackOverflow. <em>(<a href="http://stackoverflow.com/questions/24374701/alternative-to-read-phone-state-permission-for-getting-notified-of-call">source</a>)</em></p> <p>[2] <em>Using Personal Examples to Improve Risk Communication for Security and Privacy Decisions</em>, by M. Harbach, M. Hettig, S. Weber, and M. Smith. In Proceedings of ACM CHI 2014.</p> <p>[3] <em>Modeling Users’ Mobile App Privacy Preferences: Restoring Usability in a Sea of Permission Settings</em>, by J. Lin B. Liu, N. Sadeh and J. Hong. In Proceedings of SOUPS 2014.</p> <p>[4] <em>Teens and Mobile Apps Privacy. (<a href="http://www.pewinternet.org/files/old-media/Files/Reports/2013/PIP_Teens%20and%20Mobile%20Apps%20Privacy.pdf">source</a>)</em></p>