Unity 团结引擎 OpenHarmony 平台中 获取的OAID_团结引擎+openharmon
核心设计:为实现 Unity 团结引擎导出的鸿蒙 HarmonyOS 应用获取 OAID,我们采用“原生获取 + 本地存储 + Unity 读取”的跨平台协作方案。该方案的核心在于:由鸿蒙原生侧负责调用系统接口获取 OAID 并持久化存储;Unity 运行时则通过读取该存储文件来获取 OAID 值。
具体实现步骤:
-
鸿蒙原生侧实现 (Java/ArkTS):
-
OAID 获取:在导出的鸿蒙工程原生代码模块(通常是
entry
模块)中,利用 HarmonyOS 提供的DeviceId
相关接口(例如@ohos.device.deviceId
能力)获取设备的 OAID。 -
数据存储:将成功获取到的 OAID 字符串,立即写入到应用沙盒内的一个特定文件中。推荐存储路径为应用内部存储目录(如
context.filesDir
)下的一个文件(例如oaid_cache.txt
)。存储格式建议为纯文本。 -
生命周期与触发:OAID 的获取与存储操作,必须在 Unity Player 启动之前完成。最佳实践是在鸿蒙应用的
Ability
生命周期(如onCreate
或onWindowStageCreate
)的早期阶段,或在启动 Unity 的入口Activity
的onCreate
方法中执行此操作。确保文件在 Unity 需要读取时已存在且包含最新数据。
-
-
Unity 侧实现 (C#):
-
文件读取:在 Unity C# 脚本中,使用
System.IO
命名空间下的类(如File.ReadAllText
或StreamReader
)读取由鸿蒙原生侧生成并存储的 OAID 文件(oaid_cache.txt
)。 -
路径定位:Unity 需要知道该文件的确切存储路径。鸿蒙应用沙盒的内部存储目录路径可以通过 Unity 的
Application.persistentDataPath
属性获得(在 HarmonyOS 环境下,此路径通常映射到/data/data//files
或类似位置)。因此,Unity 读取的完整文件路径应为:Path.Combine(Application.persistentDataPath, \"oaid_cache.txt\")
。 -
数据解析与使用:读取文件内容(即 OAID 字符串),去除可能的空白字符,即可在 Unity 逻辑中使用该标识符(例如用于广告归因、数据分析等)。
-
错误处理:实现健壮的错误处理机制(
try-catch
),应对文件不存在、读取失败、内容为空或格式不正确等情况。
-
方案优势:
-
职责清晰:充分利用鸿蒙原生能力获取敏感设备标识,符合平台规范。
-
跨平台解耦:Unity 代码无需直接调用鸿蒙 SDK,保持平台无关性,只需依赖文件 IO 操作。
-
实现简单:技术栈成熟(文件读写),开发和调试相对直观。
-
性能开销小:文件读写操作在应用启动时仅发生一次,性能影响可忽略。
关键注意事项:
-
时机保证:必须确保鸿蒙原生侧在 Unity 场景加载并尝试读取文件之前完成 OAID 的获取和文件写入。
-
文件路