Android:获取用户ID而不需要可怕的(用户)权限?

drm*_*wer 16 android android-permissions

为了管理用户偏好,目前我正在抓取谷歌用户名(实际上是他们已经注册到设备的电子邮件地址)并使用(散列)作为"用户ID"来区分不同的用户.与此处描述的内容类似.

这一切都运行正常,但有些用户(可以理解)被任何许可吓到了,似乎给应用程序一些邪恶的力量来浏览他们的帐户信息或联系人.

编辑:谷歌现在在Android 6 运行时权限模式中实现权限组的方式更加严重.他们已经进入了许可组.现在,为了生成唯一的匿名用户ID,必须向用户显示一个对话框,其中显示:GET_ACCOUNTSCONTACTS

允许此应用访问您的联系人?| 拒绝| 允许|

这有多误导?我的应用程序不希望访问联系人,但要求用户授予该应用程序访问联系人的权限!是的,有机会向用户解释一个单独的对话框,事实上,不需要访问联系人,但是他们仍然得到股票系统对话框,要求他们授予访问联系人的权限......自然他们会想"如果不需要访问联系人,为什么我被要求授予此权限?" 并且"我真的相信开发者吗?他们说不需要访问联系人,但这是真的吗?"......非常混乱,用户体验非常糟糕恕我直言(以及其他人的意见).

我宁愿避免所有这些麻烦和混乱,并获得唯一的用户ID,而无需特殊权限.

那么SDK中是否有一个库存函数或方法,它将为用户返回唯一的用户ID,而不需要任何其他权限?如果没有,我会感到很惊讶,因为想要做的事情似乎很常见......拥有用于管理应用用户的用户ID.

两点:

(a)我只需要一个匿名用户ID ......我实际上并不需要用户的电子邮件地址,也不需要用户的电子邮件地址.因此,我无法getUserID()理解为什么谷歌无法提供返回唯一匿名ID的方法,而无需向应用授予特殊权限.

(b)它必须是用户ID,而不是设备ID,以便它可以在注册到同一个Google帐户的所有用户设备上运行.

谢谢.

Jar*_*ler 8

如果您使用Google Play服务,则无需任何额外权限即可获取帐户类型和帐户名称.

首先,将以下依赖项添加到build.gradle:

compile 'com.google.android.gms:play-services-auth:8.4.0'
Run Code Online (Sandbox Code Playgroud)

接下来,启动帐户选择器意图:

Intent intent = AccountPicker.newChooseAccountIntent(null, null,
    new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE},
    false, null, null, null, null);

try {
  startActivityForResult(intent, REQUEST_CODE_EMAIL);
} catch (ActivityNotFoundException e) {
  // This device may not have Google Play Services installed.
  // TODO: do something else
}
Run Code Online (Sandbox Code Playgroud)

最后,覆盖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);
}
Run Code Online (Sandbox Code Playgroud)

来源:https://stackoverflow.com/a/19444640/1048340


归档时间:

查看次数:

6131 次

最近记录:

9 年,11 月 前