Flutter 获取设备唯一码


Flutter 获取设备唯一码  比较好用的是 device_info_plus 、platform_device_id 这两个插件。
首先来说下 device_info_plus 这个插件在获取安卓的id不能获取的不是androidId,而是 Build.ID 这个id 没办法保证唯一性所以是个大缺陷,再说iOS 获取的是UUID,而且当用户卸载重装后UUID会变,也不能保证设备的唯一性,在做一下数据统计的时候不能保证数据的准确性。
再来说说platform_device_id,这个插件在安卓的问题上可以获取androidid,但是部分手机不能获取,而且有些红米手机当用户卸载重装后也会出现androidId变化的问题,iOS的情况跟device_info_plus这个插件的情况是一样的。并不能满足需要。最关键的是platform_device_id这个插件已经不怎么更新了,在安卓的grade版本适配会很麻烦。

针对这个问题,以及需求的满足,我clone了device_info_plus这个插件,并对该插件进行了改造,是的满足我获取设备的唯一id,并且用户卸载重新安装后设备唯一码不变。

安卓部分手机无法获取androidId的情况下会生成一个uuid,为了防止用户卸载后重新安装设备码变化的问题,我采用了SharedPreferences 把获得值保存在本地,优先获取SharedPreferences这里面的值。

IOS获取的UUID 变化的问题采用的是keychain把获取的值保存到独立沙盒外的地方,每次优先获取keychain中的uuid。这样保证设备的唯一码不变。

使用方法
添加 device_info_plus

device_info_plus:

    git: https://gitee.com/breakfly/device_info_plus.git


使用

final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();

  // 这个处理设备号信息

  Future<void> initDeviceState() async {

    if (Platform.isIOS) {

      deviceInfoPlugin.iosInfo.then((value) {

        SpUtils.setString(AppOptions.deviceModelKey, value.model);

        SpUtils.setString(

            AppOptions.deviceMacKey, value.identifierForVendor ?? '');

      });

    } else if (Platform.isAndroid) {

      SpUtils.setString(AppOptions.devicePlatformKey, "Android");

      deviceInfoPlugin.androidInfo.then((value) {

        SpUtils.setString(AppOptions.deviceModelKey, value.model);

        SpUtils.setString(AppOptions.deviceMacKey, value.androidId);

      });

    }

  }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容