使用唯一标识符在Flutter/Android中识别设备

6

我的使用情况是,我想要唯一地识别我的用户设备,因为我想要为他们提供订阅服务,并且不想使用任何类型的登录,而是使用可以保存在后端的唯一标识符。即使用户卸载或重新安装我的应用程序,仍然能够访问内容。我也尝试过使用AndroidId(SSAID),但它可能会在应用程序签入更改或设备重置时更改。

我正在使用Firebase作为后端,并在前端使用Flutter。

2个回答

2
您可以使用下面的库来查找设备的唯一ID:

设备ID库

此外,这是一个重复的问题,所以请在提问之前注意搜索答案。 :)
最后,我不完全确定您的项目范围,但如果您在Firebase上保存用户数据(无论是否敏感),使用设备UID登录可能会有问题,例如在用户丢失手机的情况下,他们将无法恢复其丢失的数据。就像我说的,我不确定您的项目范围,但这是需要考虑的事情。
如果您需要进一步帮助,请告诉我!

嘿,感谢您的快速回复,但正如我所提到的,我已经尝试使用这个设备信息(SSAID),但它在2-3个新版本中发生了变化,所以我不能再使用它了。其次,我没有使用用户的敏感信息,因此用户不需要担心。如果您有其他实现方法,请告诉我。 - Crate
请查看我在答案中提出的重复问题,因为还有其他几种方法和库可以实现它。我也很好奇,如果您不关心用户数据是否丢失,为什么要在云上拥有数据库?为什么不使用本地数据库呢? - MattTheXPat
似乎没有找到您的答案,您能否在此提及?我正在使用Firebase,因为当用户购买计划时,我会为其提供访问高级内容。计划金额、内容都从数据库中获取,同时我也将其用于推送通知。 - Crate
我在想,我三个月前构建的应用程序与昨天构建的应用程序给出了不同的结果,有趣的是,我甚至没有重置我的手机,而且尝试从朋友的设备上检查时得到了与我相同的结果(显示不同的ssaid)。 - Crate
1
我查看了我正在寻找的答案,似乎该库已经停用,因此您可以尝试使用这个,并查看dart packages。从我所看到的情况来看,如果在没有备份(如电子邮件和密码登录)的情况下使用设备UID可能存在风险,并且假设您直接将UID存储在数据库中,则黑客有可能窃取所有这些UID,除非进行了盐处理,并且可能会获取其他用户的设备ID。听着,按照您认为正确的方式去做,但这只是我的观点。 - MattTheXPat
是的,我已经将电子邮件附加到每个UUID上,但如果我推出新版本,UUID将不会与之前的相同,因为它应该是唯一的。因此,我必须要求用户提供他们的电子邮件以便给予他们访问权限。同时,也不能使用这个UUID,因为它会在新版本发布后更改。 - Crate

0

获取设备唯一标识的方法如下:

对于Android,使用unique_identifier库获取IMEI:

// Add this dependency to pubspec.yaml
dev_dependencies:
  unique_identifier: ^0.0.3

// code snippet to get the IMEI 
String  identifier = await UniqueIdentifier.serial;

对于IOS,苹果不再允许您检索IMEI,但您可以生成类似于IMEI的UDID:

import 'package:device_info/device_info.dart';

final DeviceInfoPlugin deviceInfoPlugin = new DeviceInfoPlugin();
   var data = await deviceInfoPlugin.iosInfo;
   identifier = data.identifierForVendor;

它是否会随时间或设备重置而改变?同时,它是否在生命周期内会发生改变?还是说它不会改变? - Crate
不,工厂重置后IMEI号码不会改变。由于IMEI号码是硬件的一部分,因此任何基于软件的重置都无法更改您手机的IMEI。 - Khalil LAABOUDI
2
请记得标记正确答案,以便未来查看。:) - MattTheXPat
好的,这似乎很公平。但是当我搜索关于双卡手机的信息时,我发现我会得到两个IMEI号码。 - Crate
我会在尝试这些解决方案后回到这篇帖子。很高兴你们能提供帮助!! - Crate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接