feat(device): 添加延迟初始化设备UUID的功能
实现隐私合规要求,在用户同意隐私政策后通过initUuid方法初始化设备标识符。修改了iOS和Android原生代码,新增initUuid接口,并重构了JavaScript端的设备信息初始化逻辑。
This commit is contained in:
@@ -46,6 +46,17 @@ public class Device extends CordovaPlugin {
|
|||||||
public Device() {
|
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.
|
* Executes the request and returns PluginResult.
|
||||||
*
|
*
|
||||||
@@ -56,9 +67,6 @@ public class Device extends CordovaPlugin {
|
|||||||
*/
|
*/
|
||||||
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
|
||||||
if ("getDeviceInfo".equals(action)) {
|
if ("getDeviceInfo".equals(action)) {
|
||||||
if(Device.uuid == null) {
|
|
||||||
Device.uuid = this.getUuid();
|
|
||||||
}
|
|
||||||
JSONObject r = new JSONObject();
|
JSONObject r = new JSONObject();
|
||||||
r.put("uuid", Device.uuid);
|
r.put("uuid", Device.uuid);
|
||||||
r.put("version", this.getOSVersion());
|
r.put("version", this.getOSVersion());
|
||||||
@@ -70,6 +78,9 @@ public class Device extends CordovaPlugin {
|
|||||||
r.put("sdkVersion", this.getSDKVersion());
|
r.put("sdkVersion", this.getSDKVersion());
|
||||||
callbackContext.success(r);
|
callbackContext.success(r);
|
||||||
}
|
}
|
||||||
|
else if("initUuid".equals(action)) {
|
||||||
|
callbackContext.success(getUuid());
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,15 @@
|
|||||||
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
|
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)initUuid:(CDVInvokedUrlCommand*)command
|
||||||
|
{
|
||||||
|
UIDevice* device = [UIDevice currentDevice];
|
||||||
|
NSString* uuid = [self uniqueAppInstanceIdentifier:device];
|
||||||
|
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:uuid];
|
||||||
|
|
||||||
|
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSDictionary*)deviceProperties
|
- (NSDictionary*)deviceProperties
|
||||||
{
|
{
|
||||||
UIDevice* device = [UIDevice currentDevice];
|
UIDevice* device = [UIDevice currentDevice];
|
||||||
@@ -92,7 +101,7 @@
|
|||||||
@"model": [device modelVersion],
|
@"model": [device modelVersion],
|
||||||
@"platform": @"iOS",
|
@"platform": @"iOS",
|
||||||
@"version": [device systemVersion],
|
@"version": [device systemVersion],
|
||||||
@"uuid": [self uniqueAppInstanceIdentifier:device],
|
@"uuid": @"",
|
||||||
@"cordova": [[self class] cordovaVersion],
|
@"cordova": [[self class] cordovaVersion],
|
||||||
@"isVirtual": @([self isVirtual]),
|
@"isVirtual": @([self isVirtual]),
|
||||||
@"isiOSAppOnMac": @([self isiOSAppOnMac])
|
@"isiOSAppOnMac": @([self isiOSAppOnMac])
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ var exec = require('cordova/exec');
|
|||||||
var cordova = require('cordova');
|
var cordova = require('cordova');
|
||||||
|
|
||||||
channel.createSticky('onCordovaInfoReady');
|
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
|
* 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.manufacturer = null;
|
||||||
this.isVirtual = null;
|
this.isVirtual = null;
|
||||||
this.serial = 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
|
* Get device info
|
||||||
*
|
*
|
||||||
@@ -56,35 +85,13 @@ Device.prototype.getInfo = function (successCallback, errorCallback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 安全合规不允许同意隐私政策前获取AndroidID和IDFV(ios),同意后需要手动调用
|
* 安全合规不允许同意隐私政策前获取AndroidID和IDFV(ios)
|
||||||
* 需要在platform.ready()前调用
|
* 同意隐私政策后调用该方法初始化设备标识符
|
||||||
*/
|
*/
|
||||||
Device.prototype.initDeviceInfo = function (errorCallback) {
|
Device.prototype.initUuid = function(errorCallback) {
|
||||||
var me = module.exports;
|
exec(function(uuid){
|
||||||
me.getInfo(function (info) {
|
Device.setUuid(uuid);
|
||||||
// ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js
|
}, errorCallback, 'Device', 'initUuid', []);
|
||||||
// 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();
|
module.exports = new Device();
|
||||||
|
|||||||
Reference in New Issue
Block a user