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