有没有HarmonyOS鸿蒙Next三方应用调用一直不变的设备标识符(卸载重装应用还是不变)

有没有HarmonyOS鸿蒙Next三方应用调用一直不变的设备标识符(卸载重装应用还是不变) 有没有三方应用调用一直不变的设备标识符(卸载重装应用还是不变), 且不需要去设置打开开关

9 回复

一、现有设备标识符的限制

  • UDID
    • 特性:设备唯一标识符,不随应用卸载或设备重置变化。
    • 限制:仅限系统应用及企业定制应用申请权限(ohos.permission.sec.ACCESS_UDID),三方应用无法获取。
  • OAID
    • 特性:设备级标识符,同一设备上不同应用获取的OAID相同。
    • 限制:
      • 需要用户授权 ohos.permission.APP_TRACKING_CONSENT 权限。
      • 若用户关闭“跨应用关联访问权限”,OAID会变为全0。
      • 重置场景:恢复出厂设置、用户手动重置OAID(系统设置中操作)。
  • ODID
    • 特性:开发者级标识符,同一设备上同一开发者的应用共享相同ODID。
    • 限制:
      • 当设备恢复出厂设置,或同一开发者的所有应用被卸载后重装时,ODID会重新生成。
      • 无需用户授权,但无法保证卸载所有应用后仍不变。
  • AAID
    • 特性:应用级标识符,每个应用独立。
    • 限制:应用卸载后标识符会被清除,重装时生成新的AAID。

二、推荐方案

若必须满足 无需用户操作 且 卸载后不变,可考虑以下组合方式:

  • 使用 ODID
    • 适用场景:同一设备上安装同一开发者的多个应用,且用户不会卸载所有该开发者的应用。
    • 代码示例:
import { deviceInfo } from '@kit.BasicServicesKit';

let odid = deviceInfo.odid; // 获取ODID
  • 本地持久化存储
    • 在首次安装时生成唯一ID(如UUID),存储到应用沙箱外目录(需申请 ohos.permission.STORE_PERSISTENT_DATA 权限)。
    • 限制:用户清除应用数据或恢复出厂设置时,数据会被删除。

三、注意事项

  • 隐私合规:设备标识符的使用需严格遵守隐私政策,避免收集敏感信息。
  • 替代方案:通过账号体系(如用户登录)绑定设备信息,实现长期唯一性(需用户主动操作)。

更多关于有没有HarmonyOS鸿蒙Next三方应用调用一直不变的设备标识符(卸载重装应用还是不变)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


oaid获取方式,前提得申请 ohos.permission.APP_TRACKING_CONSENT 这个权限

import deviceInfo from '@kit.DeviceInfoKit';
// 获取 OAID
deviceInfo.getOAID((error, oaid) => {
  if (error) {
    console.error('获取 OAID 失败');
    return;
  }
  console.log('OAID: ' + oaid); // 例如: "12345678-1234-1234-1234-123456789012"
});

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

标识类型 获取权限 唯一性范围 持久性特征
OAID 需用户授权跟踪权限 设备级 应用卸载不变化,恢复出厂重置会变化
ODID 无需特殊权限 开发者级(同设备同开发者) 应用卸载不变化,恢复出厂重置会变化
UDID 仅系统/企业应用可用 设备级 永久不变(三方应用无法获取)

获取OAID前,请确保App已经集成了ads-identifier SDK。

创建子线程,并调用静态的AdvertisingIdClient.getAdvertisingIdInfo(Context context)方法获取OAID信息,代码示例如下:

// 在非主线程获取设备标识信息
private Thread getIdentifierThread = new Thread() {
    @Override
    public void run() {
        try {
            AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
            if (null != info) {
                Log.i("TAG", "info id=" + info.getId() +
                        ", isLimitAdTrackingEnabled=" + info.isLimitAdTrackingEnabled());
            }
        } catch (IOException e) {
            Log.i("TAG", "getAdvertisingIdInfo Exception: " + e.toString());
        }
    }
};

参考地址

https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/oaid-0000001050783198

HarmonyOS的流畅动画和过渡效果让操作更加顺畅,体验极佳。

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

OAID是设备级标识符,同一台设备上不同的App获取到的OAID值一样。

OAID的获取受应用跟踪开关影响。开关开启时,应用可获取有效OAID;开关关闭时,应用获取全0的OAID。

同一台设备上首个应用开启应用跟踪开关时,会首次生成OAID。

AAID是应用匿名标识符,标识应用实例,只存在于安装期,长度32位。AAID具有更好的隐私属性。

匿名化、无隐私风险:AAID和已有的任何标识符都不关联,并且每个应用只能访问自己的AAID。

同一个设备上,同一个开发者的多个应用,AAID取值不同。

同一个设备上,不同开发者的应用,AAID取值不同。

不同设备上,同一个开发者的应用,AAID取值不同。

不同设备上,不同开发者的应用,AAID取值不同

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

同一设备上运行的同一个开发者的应用,ODID相同。

同一个设备上不同开发者的应用,ODID不同。

不同设备上同一个开发者的应用,ODID不同。

不同设备上不同开发者的应用,ODID不同。

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

  • OAID是设备级标识符,同一台设备上不同的App获取到的OAID值一样。
  • OAID的获取受应用跟踪开关影响。开关开启时,应用可获取有效OAID;开关关闭时,应用获取全0的OAID。
  • 同一台设备上首个应用开启应用跟踪开关时,会首次生成OAID。

AAID是应用匿名标识符,标识应用实例,只存在于安装期,长度32位。AAID具有更好的隐私属性。

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

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

  • 同一设备上运行的同一个开发者的应用,ODID相同。
  • 同一个设备上不同开发者的应用,ODID不同。
  • 不同设备上同一个开发者的应用,ODID不同。
  • 不同设备上不同开发者的应用,ODID不同。

ODID值会在以下场景重新生成

手机恢复出厂设置。

同一设备上同一个开发者(developerId相同)的应用全部卸载后重新安装时。

ODID生成规则

根据签名信息里developerId解析出的groupId生成,developerId规则为groupId.developerId,若无groupId则取整个developerId作为groupId。

同一设备上运行的同一个开发者(developerId相同)的应用,ODID相同。

同一个设备上不同开发者(developerId不同)的应用,ODID不同。

不同设备上同一个开发者(developerId相同)的应用,ODID不同。

不同设备上不同开发者(developerId不同)的应用,ODID不同。

说明:数据长度为37字节。

示例:1234a567-XXXX-XXXX-XXXX-XXXXXXXXXXXX

如果需要获取设备的唯一标识符,可以使用AAID,获取方法请参阅相关链接;在广告业务场景下,建议使用OAID;对于应用分析,开发者可以使用ODID。

参考链接

获取AAID开放匿名设备标识服务设备信息

HarmonyOS Next中,三方应用可通过deviceId作为设备标识符。该标识符在设备生命周期内保持不变,即使应用卸载重装也不会改变。获取方式为调用系统提供的API接口,具体为getDeviceId方法。此标识符由系统统一管理,确保唯一性和持久性。

在HarmonyOS Next中,应用获取持久化设备标识符的方式已发生重要变化,旨在更好地保护用户隐私。

目前,对于三方应用,没有一个在应用卸载重装后保持不变、且无需用户主动授权(打开开关)的“设备”级标识符。传统的、不受用户控制的持久性设备ID(如某些系统的Android ID旧版行为)在HarmonyOS Next的隐私设计框架下不被允许。

HarmonyOS Next提供了以下主要标识符,但其行为均不符合“卸载重装不变且无需授权”的要求:

  1. OpenHarmony ID (OHID)

    • 这是系统级账户标识。但它的获取需要用户明确授权(属于“用户数据”权限范畴)。如果用户拒绝授权,应用将无法获取。
    • 对于同一系统用户,在应用卸载重装后,如果用户再次授权,应用可以获取到相同的OHID。但这依赖用户的授权操作,并非“无需开关”。
  2. 应用级标识符

    • 开发者可以在应用首次安装时,自行在应用沙箱内生成一个唯一标识符(如UUID),并利用HarmonyOS提供的持久化存储能力(如Preferences或数据库)进行保存。
    • 这个标识符在应用不卸载的情况下会一直存在。但是,当应用被卸载时,其沙箱数据(包括此标识符)会被系统彻底清除。重装后,应用会生成一个全新的标识符。

结论与核心原则: HarmonyOS Next的设计遵循“最小必要”和“用户可知可控”的隐私原则。任何可能用于跨应用、跨会话追踪用户的持久性标识符,其获取都必须经过用户的清晰感知和主动同意。因此,提供一个既持久(跨越卸载)又无需用户交互的设备标识符,与当前系统的隐私安全目标相悖。

对于有合法业务场景需要稳定标识的用户(例如,在设备恢复出厂设置前,识别匿名设备进行次数限制),建议的设计方案是:

  • 在用户同意的前提下,使用OHID
  • 或引导用户登录账户,使用账户体系作为更稳定、用户友好的标识。

因此,直接回答您的问题:在HarmonyOS Next上,不存在同时满足“三方应用调用”、“卸载重装不变”和“无需打开开关”这三个条件的设备标识符。应用必须设计适应“授权后获取”或“应用生命周期内有效”的标识策略。

回到顶部