flutter如何获取设备唯一标识

在Flutter开发中,如何获取设备的唯一标识符?我尝试过使用device_info_plus插件,但获取到的Android ID和iOS的identifierForVendor在不同设备上可能会重复。有没有更可靠的方法来获取真正唯一的设备标识?另外,考虑到用户隐私和平台政策限制,这种方法是否会被App Store或Google Play拒绝?希望有经验的朋友能分享一下最佳实践。

2 回复

在Flutter中,获取设备唯一标识可使用device_info_plus插件。通过DeviceInfoPlugin获取设备信息,Android使用androidId,iOS使用identifierForVendor。注意不同平台标识可能不同,且权限和隐私政策需遵守。

更多关于flutter如何获取设备唯一标识的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,获取设备唯一标识可以使用device_info_plus插件。以下是具体实现步骤:

  1. 添加依赖pubspec.yaml文件中添加:

    dependencies:
      device_info_plus: ^9.0.0
    
  2. 权限配置

    • Android:在AndroidManifest.xml中添加:
      <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
      
    • iOS:在Info.plist中添加:
      <key>NSPrivacyAccessedAPITypes</key>
      <array>
        <dict>
          <key>NSPrivacyAccessedAPIType</key>
          <string>NSPrivacyAccessedAPICategoryDeviceIdentifier</string>
        </dict>
      </array>
      
  3. 代码实现

    import 'package:device_info_plus/device_info_plus.dart';
    
    Future<String?> getDeviceId() async {
      final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
      try {
        if (Platform.isAndroid) {
          AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
          return androidInfo.id; // 返回ANDROID_ID
        } else if (Platform.isIOS) {
          IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
          return iosInfo.identifierForVendor; // 返回IdentifierForVendor
        }
      } catch (e) {
        print('获取设备ID失败: $e');
      }
      return null;
    }
    

注意事项

  • AndroidANDROID_ID可能因设备或系统重置而变化,且模拟器返回固定值。
  • iOSidentifierForVendor在同一开发商应用间一致,卸载所有应用后重置。
  • 唯一标识存在平台差异和隐私限制,建议根据需求谨慎使用。

可通过getDeviceId()异步方法获取字符串形式的设备ID,需处理可能的异常和空值。

回到顶部