元服务如何获取设备ID
===========

#### 问题现象

HarmonyOS应用里可以通过获取OAID和ODID获取设备标识，元服务不支持。元服务如何获取设备ID呢？

#### 背景知识

AAID是应用匿名标识符，标识应用实例，只存在于安装期，长度36位。AAID具有更好的隐私属性。AAID具有以下特性：

*   匿名化、无隐私风险：AAID和已有的任何标识符都不关联，并且每个应用只能访问自己的AAID。
*   同一个设备上，同一个开发者的多个应用，AAID取值不同。
*   同一个设备上，不同开发者的应用，AAID取值不同。
*   不同设备上，同一个开发者的应用，AAID取值不同。
*   不同设备上，不同开发者的应用，AAID取值不同。

OAID是开放匿名设备标识符，非永久性。OAID保护用户隐私，提供个性化广告，支持广告转化分析。

ODID：开发者匿名设备标识符，它主要用于开放给开发者的设备标识，同一设备上运行的同一个开发者的应用，ODID相同。帮助开发者更好地理解用户在不同应用间的行为，从而提供更个性化的服务和推荐。

#### 解决方案

HarmonyOS出于对用户隐私的保护不开放OAID、ODID等，开发者可以获取AAID，不过每次重新安装都会变化，具体可以参考[获取AAID](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/push-get-aaid)。

#### 常见FAQ

Q：开发者需要对比从元服务和应用处获取到的设备唯一标识符来区分不同设备的会话，AAID可以吗？

A：同一个设备上，同一个开发者的多个应用，AAID取值不同。该ID无法实现同设备会话绑定，AAID无法满足需求。

Q：应用和元服务如何在端侧做相关的数据分享？

A：应用和元服务对于OS来说，属于两个载体，不建议在端侧做相关的数据共享。如果确实需要，建议基于云端能力做数据拉通，账号有OpenID和UnionID，可以快速关联用户，具体可以参考[华为账号统一认证服务](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/account-api-authentication)。

Q：ODID是否会通过工具被修改？

A：ODID由系统底层自动生成，普通工具无法直接修改。其生成规则依赖设备硬件和开发者证书信息，未开放修改接口，第三方应用无法通过常规手段篡改。

Q：AAID是否固定是36位，是否会变化？

A：AAID长度是固定的，值不是。