From 1d2edfa557fa6de898279d25c2fafdf7d6b5ad76 Mon Sep 17 00:00:00 2001 From: liangyc Date: Fri, 10 Oct 2025 10:54:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(device):=20=E9=87=8D=E6=9E=84=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=A1=E6=81=AF=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BB=A5=E7=AC=A6=E5=90=88=E9=9A=90=E7=A7=81=E6=94=BF?= =?UTF-8?q?=E7=AD=96=E8=A6=81=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改设备信息获取逻辑,移除自动初始化机制,改为手动调用initDeviceInfo() 移除不再需要的initUuid方法及相关代码 更新README添加初始化调用说明 --- README.md | 2 ++ src/android/Device.java | 17 ++------- www/device.js | 77 +++++++++++++++-------------------------- 3 files changed, 33 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index ac8cacf..b16d1e6 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,8 @@ description: Get device information. # cordova-plugin-device +** 需要在app.component.ts文件中,同意隐私政策后 且 platform.ready()前调用initDeviceInfo() ** + [![Android Testsuite](https://github.com/apache/cordova-plugin-device/actions/workflows/android.yml/badge.svg)](https://github.com/apache/cordova-plugin-device/actions/workflows/android.yml) [![Chrome Testsuite](https://github.com/apache/cordova-plugin-device/actions/workflows/chrome.yml/badge.svg)](https://github.com/apache/cordova-plugin-device/actions/workflows/chrome.yml) [![iOS Testsuite](https://github.com/apache/cordova-plugin-device/actions/workflows/ios.yml/badge.svg)](https://github.com/apache/cordova-plugin-device/actions/workflows/ios.yml) [![Lint Test](https://github.com/apache/cordova-plugin-device/actions/workflows/lint.yml/badge.svg)](https://github.com/apache/cordova-plugin-device/actions/workflows/lint.yml) This plugin defines a global `device` object, which describes the device's hardware and software. diff --git a/src/android/Device.java b/src/android/Device.java index 87f7430..5f80bf6 100644 --- a/src/android/Device.java +++ b/src/android/Device.java @@ -46,17 +46,6 @@ public class Device extends CordovaPlugin { public Device() { } - /** - * Sets the context of the Command. This can then be used to do things like - * get file paths associated with the Activity. - * - * @param cordova The context of the main Activity. - * @param webView The CordovaWebView Cordova is running in. - */ - public void initialize(CordovaInterface cordova, CordovaWebView webView) { - super.initialize(cordova, webView); - } - /** * Executes the request and returns PluginResult. * @@ -67,6 +56,9 @@ public class Device extends CordovaPlugin { */ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if ("getDeviceInfo".equals(action)) { + if(Device.uuid == null) { + Device.uuid = this.getUuid(); + } JSONObject r = new JSONObject(); r.put("uuid", Device.uuid); r.put("version", this.getOSVersion()); @@ -78,9 +70,6 @@ public class Device extends CordovaPlugin { r.put("sdkVersion", this.getSDKVersion()); callbackContext.success(r); } - else if("initUuid".equals(action)) { - callbackContext.success(getUuid()); - } else { return false; } diff --git a/www/device.js b/www/device.js index af22027..1706c93 100644 --- a/www/device.js +++ b/www/device.js @@ -25,8 +25,6 @@ var exec = require('cordova/exec'); var cordova = require('cordova'); channel.createSticky('onCordovaInfoReady'); -// Tell cordova channel to wait on the CordovaInfoReady event -channel.waitForInitialization('onCordovaInfoReady'); /** * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the @@ -44,49 +42,8 @@ function Device () { this.isVirtual = null; this.serial = null; this.isiOSAppOnMac = null; - - var me = this; - - channel.onCordovaReady.subscribe(function () { - me.getInfo( - function (info) { - // ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js - // TODO: CB-5105 native implementations should not return info.cordova - var buildLabel = cordova.version; - me.available = true; - me.platform = info.platform; - me.version = info.version; - me.uuid = info.uuid; - me.cordova = buildLabel; - me.model = info.model; - me.isVirtual = info.isVirtual; - // isiOSAppOnMac is iOS specific. If defined, it will be appended. - if (info.isiOSAppOnMac !== undefined) { - me.isiOSAppOnMac = info.isiOSAppOnMac; - } - me.manufacturer = info.manufacturer || 'unknown'; - me.serial = info.serial || 'unknown'; - - // SDK Version is Android specific. If defined, it will be appended. - if (info.sdkVersion !== undefined) { - me.sdkVersion = info.sdkVersion; - } - - channel.onCordovaInfoReady.fire(); - }, - function (e) { - me.available = false; - console.error('[ERROR] Error initializing cordova-plugin-device: ' + e); - } - ); - }); } -Device.setUuid = function(uuid) { - var instance = module.exports; - instance.uuid = uuid; -}; - /** * Get device info * @@ -99,13 +56,35 @@ Device.prototype.getInfo = function (successCallback, errorCallback) { }; /** - * android only. 安全合规不允许同意隐私政策前获取AndroidID - * 同意隐私政策后调用该方法初始化AndroidID + * 安全合规不允许同意隐私政策前获取AndroidID和IDFV(ios),同意后需要手动调用 + * 需要在platform.ready()前调用 */ -Device.prototype.initUuid = function (errorCallback) { - exec(function(uuid) { - Device.setUuid(uuid); - }, errorCallback, 'Device', 'initUuid', []); +Device.prototype.initDeviceInfo = function (errorCallback) { + var me = module.exports; + me.getInfo(function (info) { + // ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js + // TODO: CB-5105 native implementations should not return info.cordova + var buildLabel = cordova.version; + me.available = true; + me.platform = info.platform; + me.version = info.version; + me.uuid = info.uuid; + me.cordova = buildLabel; + me.model = info.model; + me.isVirtual = info.isVirtual; + // isiOSAppOnMac is iOS specific. If defined, it will be appended. + if (info.isiOSAppOnMac !== undefined) { + me.isiOSAppOnMac = info.isiOSAppOnMac; + } + me.manufacturer = info.manufacturer || 'unknown'; + me.serial = info.serial || 'unknown'; + + // SDK Version is Android specific. If defined, it will be appended. + if (info.sdkVersion !== undefined) { + me.sdkVersion = info.sdkVersion; + } + channel.onCordovaInfoReady.fire(); + }, errorCallback); }; module.exports = new Device();