- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
为了管理用户偏好,目前我正在获取谷歌用户名(实际上是他们在设备上注册的电子邮件地址)并使用(哈希)作为“用户 ID”来区分不同的用户。类似于所描述的内容here .
这一切都很好,但一些用户(可以理解)被任何似乎赋予该应用一些邪恶力量以浏览其帐户信息或联系人的权限吓跑了。
编辑:这个问题在 Google 现在实现 Permission Groups 的方式上更加严重。在 Android 6 runtime permission架构。他们已将 GET_ACCOUNTS
放入 CONTACTS
权限组。所以现在,为了生成一个唯一的匿名用户 ID,用户必须看到一个对话框,上面写着:
Allow this app to access your contacts? | Deny | Allow |
这有多大的误导性??我的应用不希望访问联系人,但要求用户授予应用访问联系人的权限!是的,有机会通过单独的对话框向用户解释,事实上,不需要访问联系人,但是他们仍然会得到库存系统对话框,要求他们授予访问联系人的权限......自然他们会想“如果不需要访问联系人,为什么要求我授予此权限?”和“我真的信任开发人员吗?他们说不需要访问联系人,但这真的是这样吗?”... 恕我直言,非常非常困惑和非常糟糕的用户体验(以及 others too 的意见)。
我宁愿避免所有这些麻烦和困惑,并在不需要特殊权限的情况下获得唯一的用户 ID。
那么 SDK 中是否有一个常用的函数或方法可以为用户返回一个唯一的用户 ID,而无需任何额外的权限?如果没有,我会感到有点惊讶,因为这似乎是一件很常见的事情……拥有一个用于管理应用用户的用户 ID。
两点:
(a) 我只需要一个匿名用户 ID...我实际上不需要用户的电子邮件地址,也不需要用户的电子邮件地址。所以我不明白为什么 google 不能提供一个返回唯一匿名 ID 的 getUserID()
方法,而无需授予应用程序特殊权限。
(b) 它必须是用户 ID,而不是设备 ID,这样它才能在注册到同一 Google 帐户的所有用户设备上工作。
谢谢。
最佳答案
如果您使用 Google Play 服务,则无需任何额外权限即可获取帐户类型和帐户名称。
首先,在build.gradle中添加如下依赖:
compile 'com.google.android.gms:play-services-auth:8.4.0'
接下来,启动帐户选择器 Intent :
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
}
最后,覆盖 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);
}
关于Android:在不需要可怕的(用户)权限的情况下获取用户 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033418/
我们在 session 中存储两个对象。不知何故,来自另一个用户的对象之一被加载到另一个用户的 session 中。用户应该无权访问此特定数据,一旦他们看到它,他们就知道出了什么问题。 我们有向他提供
我现在正在使用 Firefox 5 检查我的网站,我发现字体的呈现很糟糕。 这就是 Firefox (5) 和 Chrome 之间的区别:例如,看看文本 Jeffe 是如何呈现的... 默认字体系列是
我是一名优秀的程序员,十分优秀!