客户端唯一id的获取?
来源:2-4 iOS开发者如何快速上手Flutter开发(一)

安晚n_n
2024-05-30
因一些app不需要用户登陆,但是又要在服务端标识用户设备的唯一性。
之前大部分是用imei,androidid,oaid这些数据来标识
但是很多机型和版本不允许获取,或者系统重装后不一致。
请教下现在业内用flutter有什么通用靠谱的方法能标识安卓和苹果两个平台下的唯一设备id吗?
或者有什么插件直接支持了可以屏蔽版本和机型的差异,能获取到靠谱的唯一设备id。
写回答
1回答
-
CrazyCodeBoy
2024-05-30
在Flutter开发中,由于隐私政策和设备权限的限制,获取设备的硬件标识符(如IMEI、Android ID等)变得更加困难,特别是在Android Q及以上版本和iOS上。因此,开发者通常会寻求其他方法来标识设备的唯一性。
### 设备唯一标识符的替代方案
1. **使用`device_info_plus`插件**:
这个Flutter插件可以提供一些设备信息,虽然不直接提供IMEI或Android ID,但可以获取设备的模型、品牌、操作系统版本等信息,可以用来生成一个“设备指纹”。
```yaml
dependencies:
device_info_plus: ^4.0.0
```
使用示例:
```dart
import 'package:device_info_plus/device_info_plus.dart';
Future<String> getDeviceIdentifier() async {
var deviceInfo = DeviceInfoPlugin();
String deviceIdentifier;
if (Platform.isAndroid) {
var androidInfo = await deviceInfo.androidInfo;
deviceIdentifier = androidInfo.androidId; // Android ID(在不重置设备的情况下通常是持久的)
} else if (Platform.isIOS) {
var iosInfo = await deviceInfo.iosInfo;
deviceIdentifier = iosInfo.identifierForVendor; // iOS的Vendor标识符
}
return deviceIdentifier;
}
```
2. **使用`flutter_secure_storage`插件**:
由于设备标识符可以更改或在设备恢复出厂设置后无法保留,一种方法是生成一个UUID并将其存储在设备的安全存储中。
```yaml
dependencies:
uuid: ^3.0.4
flutter_secure_storage: ^5.0.2
```
使用示例:
```dart
import 'package:uuid/uuid.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class DeviceIdentifier {
static final _storage = FlutterSecureStorage();
static const _key = 'device_id';
static Future<String> getDeviceId() async {
var deviceId = await _storage.read(key: _key);
if (deviceId == null) {
var uuid = Uuid();
deviceId = uuid.v4();
await _storage.write(key: _key, value: deviceId);
}
return deviceId;
}
}
```
### 注意事项
- **隐私政策**:使用设备相关信息(尤其是生成设备指纹)时,应遵守相应地区的隐私政策和法规。
- **数据安全**:存储设备ID时,使用安全的方法,例如加密存储。
- **用户透明度**:向用户明确通知您如何使用其设备信息,包括是否有追踪目的。
通过这些方法,你可以在不依赖特定硬件ID的情况下为Flutter应用生成和维护设备的唯一标识符。这些方法也有助于减少对设备权限的依赖,从而简化应用的权限管理,并提高用户的接受度。00
相似问题
获取用户ID
回答 1