Flutter 獲取設(shè)備唯一碼


Flutter 獲取設(shè)備唯一碼? 比較好用的是?device_info_plus 、platform_device_id 這兩個插件。
首先來說下 device_info_plus 這個插件在獲取安卓的id不能獲取的不是androidId,而是 Build.ID 這個id 沒辦法保證唯一性所以是個大缺陷,再說iOS 獲取的是UUID,而且當(dāng)用戶卸載重裝后UUID會變,也不能保證設(shè)備的唯一性,在做一下數(shù)據(jù)統(tǒng)計的時候不能保證數(shù)據(jù)的準(zhǔn)確性。
再來說說platform_device_id,這個插件在安卓的問題上可以獲取androidid,但是部分手機不能獲取,而且有些紅米手機當(dāng)用戶卸載重裝后也會出現(xiàn)androidId變化的問題,iOS的情況跟device_info_plus這個插件的情況是一樣的。并不能滿足需要。最關(guān)鍵的是platform_device_id這個插件已經(jīng)不怎么更新了,在安卓的grade版本適配會很麻煩。

針對這個問題,以及需求的滿足,我clone了device_info_plus這個插件,并對該插件進行了改造,是的滿足我獲取設(shè)備的唯一id,并且用戶卸載重新安裝后設(shè)備唯一碼不變。

安卓部分手機無法獲取androidId的情況下會生成一個uuid,為了防止用戶卸載后重新安裝設(shè)備碼變化的問題,我采用了SharedPreferences 把獲得值保存在本地,優(yōu)先獲取SharedPreferences這里面的值。

IOS獲取的UUID 變化的問題采用的是keychain把獲取的值保存到獨立沙盒外的地方,每次優(yōu)先獲取keychain中的uuid。這樣保證設(shè)備的唯一碼不變。

使用方法
添加 device_info_plus

device_info_plus:

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


使用

final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();

? // 這個處理設(shè)備號信息

? 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);

? ? ? });

? ? }

? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容