12

我试图用新的Android M权限更新我的应用,该权限使用了Google+登录,但是当我执行checkSelfPermission(Manifest.permission.GET_ACCOUNTS)时,弹出的对话框显示“允许MyApp访问您的联系人?与拒绝和允许按钮。GET_ACCOUNTS权限不正确的邮件

对于GET_ACCOUNTS权限,这看起来很奇怪。它不应该说与访问您的帐户相关的东西吗?这是一个错误?或者我应该做一些不同的事情?

+4

这是通过设计,但令人困惑的设计。联系人权限非常重要 - 通常保护数百人的私人数据。不得不向用户询问,为了使用GET_ACCOUNTS,没有任何意义 - 用户不应该接受这一点。 – Tom

回答

4

的GET_ACCOUNTS权限是android.permission-group.CONTACTS基团的一部分,随着

  • android.permission.READ_CONTACTS
  • android.permission.WRITE_CONTACTS
  • android.permission.GET_ACCOUNTS

这就是为什么你会收到联系人的消息。

因此,当你要求在一个组中有一个权限时,你将在该组中获得所有权限。 您可以在Android M中找到更多关于权限的信息M here

+2

嗯..多数民众赞成在很奇怪。所以如果我们要求GET_ACCOUNTS权限似乎误导用户说我们正在尝试阅读联系人。没有? –

+1

那么,这就是为什么Google做出了shouldShowRequestPermissionRationale方法,所以你可以向用户解释你为什么要求某个权限 – DDsix

+2

我确实有这个,但看起来它没有被调用,似乎Android确定它是否应该显示它。所以:( –

-1

我今天下午更新了客户端的应用程序,允许用户使用Google+登录。您可能不需要在运行时检查GET_ACCOUNTS权限。我更新了清单以使用android:maxSdkVersion="22"来限定GET_ACCOUNTS权限。

在运行棉花糖的Nexus 5上,我能够使用Google+成功登录而不显示运行时权限对话框。通讯录也不会出现在设置>应用程序> [我的客户的应用程序]>权限中。用于GET_ACCOUNTS反映棉花糖行为的变化

<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" android:maxSdkVersion="22"/> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" android:maxSdkVersion="22"/> 
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" android:maxSdkVersion="22"/> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" android:maxSdkVersion="22"/> 

文档中描述here

+0

是否有任何副作用来指定清单中的maxSdkVersion? –

+0

不要相信没有。在棉花糖上,如果您需要访问由具有与您自己不同的签名的应用程序创建的任何帐户,您应该在运行时提示GET_ACCOUNTS权限。 – fingertricks

+0

请勿使用maxSdkVersion 22.这意味着没有Marshmallow设备会在Play商店中看到您的应用。 –