目前HarmonyOS系统ifaa获取设备id方法测试代码如下:
async aboutToAppear() {
let tokenstr = "123";
let getAnonIdResult: Uint8Array = ifaa.getAnonymousIdSync(StringUtil.stringToUint8Array(tokenstr));
let deviceIdBase64 = this.encodeBase64ToString(getAnonIdResult);
let context = getContext() as common.UIAbilityContext;
let bundleName = context.abilityInfo.bundleName;
hilog.info(0xFF00, "[Logger]", `%{public}s, %{public}s`, "deviceId","deviceIdBase64:"+deviceIdBase64+", bundleName:"+bundleName+", token:"+tokenstr);
}
encodeBase64ToString(input: Uint8Array): string {
let base64Helper = new util.Base64Helper();
let encodeStr = base64Helper.encodeToStringSync(input);
return encodeStr;
}
代码在下面场景测试后结果如下:
1、相同应用第一次获取
deviceIdBase64:JOoLX+L1QYtL+e8o42iOExxxySq4rfSm+fpxoOmA==,
bundleName:com.***.facedemo,
token:123
2、卸载后获取
deviceIdBase64:JOoLX+L1QYtL+e8o42iOExxx7S8Jy3ySq4rfSm+fpxoOmA==,
bundleName:com.***.facedemo,
token:123
3、不同应用
deviceIdBase64:JOoLX+L1QYtL+e8o42iOEDVpTTxxxJy3ySq4rfSm+fpxoOmA==,
bundleName:com.***.facedemo111,
token:123
问题如下:
1、在同一设备上,只要传入的token没有被IFAA注销,是否设备ID会保持不变?
2、是否可以使用一个不会被实际使用的token作为入参,以保证设备ID的唯一性,这种使用方式是否合法,未来API是否会对该逻辑进行调整?
3、可否解释为何getAnonymousIdSync(userToken: Uint8Array): Uint8Array方法需要传入userToken作为参数,而不是直接返回设备ID?
1、IFAA提供的这个ID是基于userToken隔离的,不同userToken返回的是不一样的和应用无关,这个是由IFAA联盟要求的。
2、可以,符合规定,后续不同应用对应同一个userToken获取的设备ID可能会发生变化。
3、IFAA提供的这个ID是基于userToken隔离的,不同userToken返回的是不一样的和应用无关,这个是由IFAA联盟要求的,所以需要传入userToken作为参数。