Flutter - 获取唯一设备 ID

5

我正在制作一款基于令牌的应用程序。因此,用户可以购买代币并使用它们进行一些操作。每个用户在使用电子邮件和密码创建帐户后将获得10个免费代币(作为试用版)。

我希望防止用户通过每次获取新帐户来获得另外10个代币,并且我想知道是否有像Android和iOS设备的唯一设备ID这样的东西?

我可以使用这个来实现吗? https://pub.dartlang.org/packages/device_id#-example-tab-


在iOS上,存在设备检查API来实现此目的。 - Paulw11
你可以在这里参考:https://pub.dev/packages/device_info - Shagun Jain
这个回答解决了你的问题吗? 如何在Flutter中获取唯一设备ID? - reverie_ss
2个回答

27

使用device_info_plus插件。

在你的pubspec.yaml文件中添加以下内容

dependencies:
  device_info_plus: any
创建一个方法:
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
// ...

Future<String?> _getId() async {
  var deviceInfo = DeviceInfoPlugin();
  if (Platform.isIOS) { // import 'dart:io'
    var iosDeviceInfo = await deviceInfo.iosInfo;
    return iosDeviceInfo.identifierForVendor; // Unique ID on iOS
  } else {
    var androidDeviceInfo = await deviceInfo.androidInfo;
    return androidDeviceInfo.androidId; // Unique ID on Android
  }
}

使用方法如下:

String? deviceId = await _getId();
或者
_getId().then((id) {
  String? deviceId = id;
});

1
有时它被认为是空的,文档中标注为“在出厂重置时可能会更改”。使用时请自行承担风险,并且在已经获取 root 权限的手机上可以轻松更改。 - Kamlesh
它没有起作用。如果我重新安装应用程序,设备ID将会改变。 - Nicholas Jela
1
@NicholasJela 手机设备 ID 只能在重置手机后更改。 - CopsOnRoad
1
@CopsOnRoad 我的手机从未重置,但是我已经有了两个不同的设备ID。 - Nicholas Jela
@NicholasJela 或许你应该在 Github 页面上提交(或搜索)一个问题。 - CopsOnRoad
@CopsOnRoad 当我按照指示的方式调用它时,我会收到一个错误“await表达式只能在异步函数中使用”。 - MohitC

0

是的,那就是你需要的插件。如果你真的想要

我想防止用户通过每次创建新账户获得另外10个令牌

你也必须检查是否使用了根权限的手机(它可以更改ID)

你可能还想考虑使用这个获取IMEI


2
我认为苹果不再允许获取IMEI了。 - harunB10
在Android上,它会返回IMEI号码;在iOS上,它会返回设备ID。 - CodeforCore
如果我们使用这个插件,应用程序会要求授予电话访问权限,而用户通常不会授予。我有使用这个插件的经验。 - Kamlesh

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