这一切都很好,但是有些用户(可以理解的)被任何许可吓倒,似乎给应用程序一些邪恶的力量通过他们的帐户信息或联系人拖网.
编辑:这个问题对于Google现在在AndroID 6 runtime permission架构中实现Permission Groups的方式更为尖锐.他们已将GET_ACCOUNTS放入CONTACTS权限组.所以现在,为了生成一个独特的匿名用户ID,用户必须显示一个对话框,说:
Allow this app to access your contacts? | Deny | Allow |
这个误会怎么样?我的应用程序不希望访问联系人,但是要求用户授予该应用访问联系人的权限!是的,有机会向用户解释一个单独的对话框,实际上访问联系人并不是必需的,但是他们仍然获得了库存系统对话框,要求他们授予访问联系人的权限.会想到“如果不需要访问联系人,为什么要被要求授予此权限?” “我真的相信开发人员吗?他们说接触联系不是必需的,但这是真的吗?”…非常混乱和非常糟糕的用户体验IMHO(和others too的意见).
我宁愿避免所有这些麻烦和混乱,并获得唯一的用户ID,而不需要特殊的权限.
SDK中有库存函数还是方法,将返回用户的唯一用户ID,而不需要任何其他权限?如果没有,我很惊讶,因为想要做…似乎有一个常见的事情是拥有管理应用程序用户的用户ID.
两点:
(a)我只需要匿名用户ID …我实际上并不需要用户的电子邮件地址,也不会想要用户的电子邮件地址.所以我不明白为什么谷歌不能提供一个getUserID()方法返回一个唯一的匿名ID,而不必授予应用程序的特殊权限.
(b)它必须是用户ID,而不是设备ID,以便它可以在注册到同一个Google帐户的所有用户的设备上工作.
谢谢.
解决方法 如果您使用Google Play服务,您可以获得帐户类型和帐户名称,而不需要任何额外的权限.首先,将以下依赖项添加到build.gradle中:
compile 'com.Google.androID.gms:play-services-auth:8.4.0'
接下来,启动帐户选择器意图:
Intent intent = AccountPicker.newChooseAccountIntent(null,null,new String[]{GoogleAuthUtil.Google_ACCOUNT_TYPE},false,null);try { startActivityForResult(intent,REQUEST_CODE_EMAIL);} catch (ActivityNotFoundException e) { // This device may not have Google Play Services installed. // Todo: do something else}
最后,覆盖onActivityResult
以获取帐户类型和帐户名称:
@OverrIDe protected voID onActivityResult(int requestCode,int resultCode,Intent data) { if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESulT_OK) { String accountname = data.getStringExtra(AccountManager.KEY_ACCOUNT_name); String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE); // Todo: do something with the accountname return; } super.onActivityResult(requestCode,resultCode,data);}
来源:https://stackoverflow.com/a/19444640/1048340
总结以上是内存溢出为你收集整理的Android:获取用户ID而不需要吓人(用户)权限?全部内容,希望文章能够帮你解决Android:获取用户ID而不需要吓人(用户)权限?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)