HarmonyOS 关于ifaa获取deviceid接口问题?

目前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?

阅读 473
1 个回答

1、IFAA提供的这个ID是基于userToken隔离的,不同userToken返回的是不一样的和应用无关,这个是由IFAA联盟要求的。

2、可以,符合规定,后续不同应用对应同一个userToken获取的设备ID可能会发生变化。

3、IFAA提供的这个ID是基于userToken隔离的,不同userToken返回的是不一样的和应用无关,这个是由IFAA联盟要求的,所以需要传入userToken作为参数。