9
0

refactor(device): 重构设备信息初始化逻辑以符合隐私政策要求

修改设备信息获取逻辑,移除自动初始化机制,改为手动调用initDeviceInfo()
移除不再需要的initUuid方法及相关代码
更新README添加初始化调用说明
This commit is contained in:
2025-10-10 10:54:55 +08:00
parent 8e740dd521
commit 1d2edfa557
3 changed files with 33 additions and 63 deletions

View File

@@ -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.

View File

@@ -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;
}

View File

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