From da88a3bcbfbb6c7eaf83df266b4683397a831e90 Mon Sep 17 00:00:00 2001 From: Mohanned Binmiskeen Date: Wed, 28 Dec 2022 14:07:31 +0200 Subject: [PATCH 1/7] Update gradle and kotlin plugin --- platform_device_id/android/build.gradle | 12 ++++++------ .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/platform_device_id/android/build.gradle b/platform_device_id/android/build.gradle index 1ab78e3..7baceca 100644 --- a/platform_device_id/android/build.gradle +++ b/platform_device_id/android/build.gradle @@ -2,14 +2,14 @@ group 'com.di1shuai.platform_device_id' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.5.20' repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:7.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -17,7 +17,7 @@ buildscript { rootProject.allprojects { repositories { google() - jcenter() + mavenCentral() } } @@ -25,13 +25,13 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 28 + compileSdkVersion 33 sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { - minSdkVersion 16 + minSdkVersion 24 } lintOptions { disable 'InvalidPackage' diff --git a/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties b/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties index 01a286e..cb24abd 100644 --- a/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties +++ b/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip From f66263173705eaca23ad9d53c7d0fc3dee61b672 Mon Sep 17 00:00:00 2001 From: Mohanned Binmiskeen Date: Wed, 28 Dec 2022 14:15:08 +0200 Subject: [PATCH 2/7] Update gradle and kotlin plugin --- platform_device_id/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform_device_id/android/build.gradle b/platform_device_id/android/build.gradle index 7baceca..e7736fa 100644 --- a/platform_device_id/android/build.gradle +++ b/platform_device_id/android/build.gradle @@ -31,7 +31,7 @@ android { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { - minSdkVersion 24 + minSdkVersion 23 } lintOptions { disable 'InvalidPackage' From b7270c9e8cd52f78f3bff41653d9652a94e19816 Mon Sep 17 00:00:00 2001 From: Mohammad Wahid Date: Sat, 11 May 2024 12:21:59 +0200 Subject: [PATCH 3/7] replace device_info with device_info_plus --- platform_device_id/android/build.gradle | 2 +- .../example/linux/flutter/generated_plugins.cmake | 8 ++++++++ .../example/windows/flutter/generated_plugin_registrant.h | 2 ++ .../example/windows/flutter/generated_plugins.cmake | 8 ++++++++ platform_device_id/lib/platform_device_id.dart | 4 ++-- platform_device_id/pubspec.yaml | 2 +- 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/platform_device_id/android/build.gradle b/platform_device_id/android/build.gradle index e7736fa..553fc75 100644 --- a/platform_device_id/android/build.gradle +++ b/platform_device_id/android/build.gradle @@ -25,7 +25,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 33 + compileSdkVersion 34 sourceSets { main.java.srcDirs += 'src/main/kotlin' diff --git a/platform_device_id/example/linux/flutter/generated_plugins.cmake b/platform_device_id/example/linux/flutter/generated_plugins.cmake index 4c3abd8..50ddc85 100644 --- a/platform_device_id/example/linux/flutter/generated_plugins.cmake +++ b/platform_device_id/example/linux/flutter/generated_plugins.cmake @@ -6,6 +6,9 @@ list(APPEND FLUTTER_PLUGIN_LIST platform_device_id_linux ) +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + set(PLUGIN_BUNDLED_LIBRARIES) foreach(plugin ${FLUTTER_PLUGIN_LIST}) @@ -14,3 +17,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST}) list(APPEND PLUGIN_BUNDLED_LIBRARIES $) list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/platform_device_id/example/windows/flutter/generated_plugin_registrant.h b/platform_device_id/example/windows/flutter/generated_plugin_registrant.h index 9846246..dc139d8 100644 --- a/platform_device_id/example/windows/flutter/generated_plugin_registrant.h +++ b/platform_device_id/example/windows/flutter/generated_plugin_registrant.h @@ -2,6 +2,8 @@ // Generated file. Do not edit. // +// clang-format off + #ifndef GENERATED_PLUGIN_REGISTRANT_ #define GENERATED_PLUGIN_REGISTRANT_ diff --git a/platform_device_id/example/windows/flutter/generated_plugins.cmake b/platform_device_id/example/windows/flutter/generated_plugins.cmake index 7a26568..839b431 100644 --- a/platform_device_id/example/windows/flutter/generated_plugins.cmake +++ b/platform_device_id/example/windows/flutter/generated_plugins.cmake @@ -6,6 +6,9 @@ list(APPEND FLUTTER_PLUGIN_LIST platform_device_id_windows ) +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + set(PLUGIN_BUNDLED_LIBRARIES) foreach(plugin ${FLUTTER_PLUGIN_LIST}) @@ -14,3 +17,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST}) list(APPEND PLUGIN_BUNDLED_LIBRARIES $) list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/platform_device_id/lib/platform_device_id.dart b/platform_device_id/lib/platform_device_id.dart index b650093..0d40739 100644 --- a/platform_device_id/lib/platform_device_id.dart +++ b/platform_device_id/lib/platform_device_id.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:io'; +import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/services.dart'; -import 'package:device_info/device_info.dart'; import 'package:platform_device_id_platform_interface/platform_device_id_platform_interface.dart'; import 'package:flutter/foundation.dart' show kIsWeb; @@ -18,7 +18,7 @@ class PlatformDeviceId { deviceId = await PlatformDeviceIdPlatform.instance.getDeviceId(); } else if (Platform.isAndroid) { AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; - deviceId = androidInfo.androidId; + deviceId = androidInfo.id; } else if (Platform.isIOS) { IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; deviceId = iosInfo.identifierForVendor; diff --git a/platform_device_id/pubspec.yaml b/platform_device_id/pubspec.yaml index 02a55af..5a4b38f 100644 --- a/platform_device_id/pubspec.yaml +++ b/platform_device_id/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: platform_device_id_linux: ^1.0.0 platform_device_id_web: ^1.0.0 platform_device_id_windows: ^1.0.0 - device_info: ^2.0.0 + device_info_plus: ^10.1.0 dev_dependencies: flutter_test: From 9cee4a2f5017febe9545f4bf186be837df808b8e Mon Sep 17 00:00:00 2001 From: Mohammad Wahid Date: Sat, 11 May 2024 12:48:01 +0200 Subject: [PATCH 4/7] update gradle --- platform_device_id/android/build.gradle | 7 ++++--- .../android/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/platform_device_id/android/build.gradle b/platform_device_id/android/build.gradle index 553fc75..23e8c7c 100644 --- a/platform_device_id/android/build.gradle +++ b/platform_device_id/android/build.gradle @@ -2,14 +2,14 @@ group 'com.di1shuai.platform_device_id' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.5.20' + ext.kotlin_version = '1.9.20' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.1' + classpath 'com.android.tools.build:gradle:8.4.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -25,7 +25,8 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 34 + namespace "com.di1shuai.platform_device_id" + compileSdk 34 sourceSets { main.java.srcDirs += 'src/main/kotlin' diff --git a/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties b/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties index cb24abd..5d6560a 100644 --- a/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties +++ b/platform_device_id/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip From 641132a30e2b69a0a2916157df7c94cbd68ed361 Mon Sep 17 00:00:00 2001 From: Mohammad Wahid Date: Tue, 5 Nov 2024 10:11:53 +0200 Subject: [PATCH 5/7] update gradle --- platform_device_id/android/build.gradle | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/platform_device_id/android/build.gradle b/platform_device_id/android/build.gradle index 23e8c7c..8b03a40 100644 --- a/platform_device_id/android/build.gradle +++ b/platform_device_id/android/build.gradle @@ -25,6 +25,15 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + namespace "com.di1shuai.platform_device_id" compileSdk 34 From 33b6072d5fe7f3bd27f07a17437ae98e5a3ef4da Mon Sep 17 00:00:00 2001 From: Mohammad Wahid Date: Mon, 20 Jan 2025 09:10:51 +0200 Subject: [PATCH 6/7] update gradle --- platform_device_id/android/build.gradle | 11 +++++++---- platform_device_id/android/gradle.properties | 1 - 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/platform_device_id/android/build.gradle b/platform_device_id/android/build.gradle index 8b03a40..1935340 100644 --- a/platform_device_id/android/build.gradle +++ b/platform_device_id/android/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + group 'com.di1shuai.platform_device_id' version '1.0-SNAPSHOT' @@ -27,11 +29,11 @@ apply plugin: 'kotlin-android' android { compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = "17" + jvmTarget = '1.8' } namespace "com.di1shuai.platform_device_id" @@ -41,7 +43,7 @@ android { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { - minSdkVersion 23 + minSdkVersion 24 } lintOptions { disable 'InvalidPackage' @@ -50,4 +52,5 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2' } diff --git a/platform_device_id/android/gradle.properties b/platform_device_id/android/gradle.properties index 38c8d45..94adc3a 100644 --- a/platform_device_id/android/gradle.properties +++ b/platform_device_id/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M -android.enableR8=true android.useAndroidX=true android.enableJetifier=true From 2e856dc7edd9515de69ef6345958c79858e4ba76 Mon Sep 17 00:00:00 2001 From: Mohanned Binmiskeen Date: Wed, 28 May 2025 18:56:45 +0200 Subject: [PATCH 7/7] feat: improve device ID generation with fallback mechanisms - Add flutter_udid and shared_preferences dependencies for more reliable ID generation - Implement multi-tier fallback logic: first try platform-specific methods, then flutter_udid, then SharedPreferences - Store generated IDs in SharedPreferences for persistence across app launches - Handle edge cases where platform methods fail or return empty values --- .../lib/platform_device_id.dart | 73 ++++++++++++++++++- platform_device_id/pubspec.yaml | 2 + 2 files changed, 71 insertions(+), 4 deletions(-) diff --git a/platform_device_id/lib/platform_device_id.dart b/platform_device_id/lib/platform_device_id.dart index 0d40739..2eed1c6 100644 --- a/platform_device_id/lib/platform_device_id.dart +++ b/platform_device_id/lib/platform_device_id.dart @@ -4,30 +4,95 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/services.dart'; import 'package:platform_device_id_platform_interface/platform_device_id_platform_interface.dart'; import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter_udid/flutter_udid.dart'; +import 'package:shared_preferences/shared_preferences.dart'; /// Provides device id information. class PlatformDeviceId { /// Provides device and operating system information. static final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); + + /// Key for storing the generated device ID in SharedPreferences + static const String _deviceIdKey = 'platform_device_id_key'; - /// Information derived from `android`-`androidId` or `ios`-`identifierForVendor` + /// Information derived from `android`-`flutter_udid` or `ios`-`identifierForVendor` + /// Falls back to SharedPreferences for persistence static Future get getDeviceId async { String? deviceId; try { if (kIsWeb) { deviceId = await PlatformDeviceIdPlatform.instance.getDeviceId(); } else if (Platform.isAndroid) { - AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo; - deviceId = androidInfo.id; + // Use flutter_udid directly for Android instead of androidInfo.id + try { + deviceId = await FlutterUdid.udid; + } catch (e) { + print('Error getting Android UDID: $e'); + deviceId = null; // Will trigger the fallback logic below + } } else if (Platform.isIOS) { IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo; deviceId = iosInfo.identifierForVendor; } else { deviceId = await PlatformDeviceIdPlatform.instance.getDeviceId(); } + + // If deviceId is null, empty, or consists only of whitespace, use fallback mechanisms + if (deviceId == null || deviceId.trim().isEmpty) { + // For non-Android platforms, try flutter_udid as first fallback + if (!Platform.isAndroid) { + try { + deviceId = await FlutterUdid.udid; + } catch (e) { + print('Error getting UDID: $e'); + } + } + + // If still empty, check SharedPreferences for a previously stored ID + if (deviceId == null || deviceId.trim().isEmpty) { + final prefs = await SharedPreferences.getInstance(); + deviceId = prefs.getString(_deviceIdKey); + + // If no ID in SharedPreferences, generate one using flutter_udid's consistentUdid + // and store it for future use + if (deviceId == null || deviceId.trim().isEmpty) { + try { + deviceId = await FlutterUdid.consistentUdid; + // Store the generated ID for future use + await prefs.setString(_deviceIdKey, deviceId ?? ''); + } catch (e) { + print('Error getting consistent UDID: $e'); + // If all else fails, return an empty string + deviceId = ''; + } + } + } else { + // Store the flutter_udid value in SharedPreferences for future use + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_deviceIdKey, deviceId); + } + } } on PlatformException { - deviceId = ''; + // Try flutter_udid as fallback for platform exception + try { + deviceId = await FlutterUdid.udid; + } catch (e) { + // If flutter_udid also fails, try to get from SharedPreferences + final prefs = await SharedPreferences.getInstance(); + deviceId = prefs.getString(_deviceIdKey); + + // If still no ID, generate one + if (deviceId == null || deviceId.trim().isEmpty) { + try { + deviceId = await FlutterUdid.consistentUdid; + await prefs.setString(_deviceIdKey, deviceId ?? ''); + } catch (e) { + deviceId = ''; + } + } + } } + return deviceId; } } diff --git a/platform_device_id/pubspec.yaml b/platform_device_id/pubspec.yaml index 5a4b38f..eae9e77 100644 --- a/platform_device_id/pubspec.yaml +++ b/platform_device_id/pubspec.yaml @@ -16,6 +16,8 @@ dependencies: platform_device_id_web: ^1.0.0 platform_device_id_windows: ^1.0.0 device_info_plus: ^10.1.0 + flutter_udid: ^2.0.1 + shared_preferences: ^2.2.2 dev_dependencies: flutter_test: