feat(core): 设备号改用系统标识,重装不再变成新游客

- Android 读 SSAID、iOS 读 IDFV,均免权限,由原生通道提供,不引插件
- 取不到时回退本地 UUIDv4,替代原来 32 位随机 + 时间戳的拼接
This commit is contained in:
Vicky authored and trae-solo-agent committed 2026-10-27 14:15:50 +08:00
1 parent 935de13343
commit 1b19513efb
5 files changed
+165 -12

No files matched your search

+16
View File
@@ -63,6 +63,7 @@ final class RunnerFlutterViewController: FlutterViewController {
func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) {
GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry)
registerWirelessDataChannel(engineBridge)
registerDeviceIdChannel(engineBridge)
let channel = FlutterMethodChannel(
name: "com.stormg.lumadrama/share",
binaryMessenger: engineBridge.applicationRegistrar.messenger()
@@ -144,6 +145,21 @@ final class RunnerFlutterViewController: FlutterViewController {
}
}
/// 设备标识:IDFV 免权限,卸载本 App 不变,避免客户端自生成的 id 每次重装都变。
private func registerDeviceIdChannel(_ engineBridge: FlutterImplicitEngineBridge) {
let channel = FlutterMethodChannel(
name: "com.stormg.lumadrama/device",
binaryMessenger: engineBridge.applicationRegistrar.messenger()
)
channel.setMethodCallHandler { call, result in
guard call.method == "idfv" else {
result(FlutterMethodNotImplemented)
return
}
result(UIDevice.current.identifierForVendor?.uuidString)
}
}
private func registerWirelessDataChannel(_ engineBridge: FlutterImplicitEngineBridge) {
let channel = FlutterMethodChannel(
name: WirelessDataPrompt.channelName,