没有设备ID和Nougat的设备识别

时间:2016-09-20 17:44:38

标签: java android

我对如何用其他方式识别用户感兴趣:

  • 我不想使用设备ID,因为它需要权限并询问用户,它会破坏我的应用

  • 我不能使用MAC地址,因为Nugat不允许使用MAC地址

  • 其他身份验证事项不是唯一的

我需要一些独特的设备标识符,我无法将数据库中的用户分配给他的设备。

4 个答案:

答案 0 :(得分:1)

推荐的方法是为您的应用生成唯一ID,并将其存储在应用的本地数据中。这样,您的应用就可以记住它在安装时是否是同一台设备,但不能安装在同一台设备上。

如,

SharedPrefs prefs = ...;
String id = prefs.getString("my.id");
if (TextUtils.isEmpty(id)) {
  prefs.edit.putString("my.id", UUID.randomUUID()).apply();
}

请注意,无法获取持久性设备标识符是设计使然。你不应该跟踪这样的用户。如果用户卸载了您的应用,您应该忘记"关于他们完全。

答案 1 :(得分:1)

这正是InstanceID的用途,它会生成一个唯一的ID,然后您可以使用该ID将数据与之关联。这是一个比UUID更好的方法的原因是,无论何时你需要获取令牌,你大部分时间都会得到相同的令牌,如果它发生了变化,你会收到通知,那时你会用新ID更新你的后端

UUID总会给你一些新的东西

https://developers.google.com/instance-id/

答案 2 :(得分:0)

设备ID和MAC地址是到处使用的唯一ID。但是naugat不允许访问MAC地址。

您可以使用手机的注册ID。这是谷歌服务器为我们生成的唯一ID。此ID用于基于GCM的通知。我已经实现了基于GCM的通知,这就是为什么将这个id用作唯一ID的想法。

您可以在android中搜索基于GCM的推送通知。您将找到如何生成此Reg。 ID。它需要gcm库和互联网权限。

捕获卸载程序 Reg Ids非常长4096字节,因此不希望在db中作为唯一ID进行sotred。 Solutioon可以, 当您收到NotRegistered错误或卸载了应用程序时,您确实应该从数据库中删除该注册ID(或者至少将其标记为表示它处于非活动状态,并停止向其发送消息)。但是,如果应用程序将重新安装在先前卸载它的设备上,那么当应用程序再次注册到GCM时,应用程序可能会获得相同的注册ID,因此您的服务器应该允许注册ID在某一时刻使NotRegistered变为活动状态试。

如果您在Google的回复中获得规范的注册ID,则应更新旧的注册ID。

答案 3 :(得分:0)

我希望这不需要任何许可

import android.provider.Settings.Secure;

private String androidId = Secure.getString(getContext().getContentResolver(),
                                                    Secure.ANDROID_ID);