Android:获取用户ID而不需要吓人(用户)权限?

前端之家收集整理的这篇文章主要介绍了Android:获取用户ID而不需要吓人(用户)权限?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为了管理用户偏好,目前我正在抓住谷歌的用户名(有效地注册到设备的电子邮件地址),并使用(作为一个哈希)作为“用户ID”来区分不同的用户.一些沿着所描述的内容 here.

这一切都很好,但是有些用户(可以理解的)被任何许可吓倒,似乎给应用程序一些邪恶的力量通过他们的帐户信息或联系人拖网.

编辑:这个问题对于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相关文章