客户端唯一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应用生成和维护设备的唯一标识符。这些方法也有助于减少对设备权限的依赖,从而简化应用的权限管理,并提高用户的接受度。
0
0

慕课甄选-Flutter零基础极速入门到进阶实战

全新Flutter从入门到进阶,实战仿携程网App

709 学习 · 334 问题

查看课程