feat(device): 添加延迟初始化设备UUID的功能
实现隐私合规要求,在用户同意隐私政策后通过initUuid方法初始化设备标识符。修改了iOS和Android原生代码,新增initUuid接口,并重构了JavaScript端的设备信息初始化逻辑。
This commit is contained in:
+36
-29
@@ -25,6 +25,8 @@ 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
|
||||
@@ -41,9 +43,36 @@ function Device () {
|
||||
this.manufacturer = null;
|
||||
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;
|
||||
me.manufacturer = info.manufacturer || 'unknown';
|
||||
me.serial = info.serial || 'unknown';
|
||||
channel.onCordovaInfoReady.fire();
|
||||
}, function (e) {
|
||||
me.available = false;
|
||||
console.error('[ERROR] Error initializing Cordova: ' + e);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Device.setUuid = function(uuid) {
|
||||
var instance = module.exports;
|
||||
instance.uuid = uuid;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get device info
|
||||
*
|
||||
@@ -56,35 +85,13 @@ Device.prototype.getInfo = function (successCallback, errorCallback) {
|
||||
};
|
||||
|
||||
/**
|
||||
* 安全合规不允许同意隐私政策前获取AndroidID和IDFV(ios),同意后需要手动调用
|
||||
* 需要在platform.ready()前调用
|
||||
* 安全合规不允许同意隐私政策前获取AndroidID和IDFV(ios)
|
||||
* 同意隐私政策后调用该方法初始化设备标识符
|
||||
*/
|
||||
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);
|
||||
Device.prototype.initUuid = function(errorCallback) {
|
||||
exec(function(uuid){
|
||||
Device.setUuid(uuid);
|
||||
}, errorCallback, 'Device', 'initUuid', []);
|
||||
};
|
||||
|
||||
module.exports = new Device();
|
||||
|
||||
Reference in New Issue
Block a user