HarmonyOS 7 实战 10:三方库接入与上架审核避坑指南
开发一时爽上架火葬场写代码的时候为了赶进度三方库能装就装ohpm install敲得飞起。功能确实跑通了本地测试也没毛病。然后你满怀信心地提审应用市场结果第二天一看审核被拒。拒绝理由五花八门“隐私政策未弹窗”、“申请了不必要的权限”、“集成的三方 SDK 存在后台下载行为”……这时候你再去翻代码发现有些三方库是老版本有些 SDK 是别人打包进去的改起来牵一发而动全身。这篇就聊聊 HarmonyOS 的三方库接入最佳实践以及上架审核时那些让你一拒再拒的坑。都是血泪教训看完能帮你省下几次提审的机票钱。https://placeholder-01.jpg/一、ohpm 与三方库的正确姿势HarmonyOS 的包管理工具是ohpm。接入三方库的标准流程是配置oh-package.json5json{ dependencies: { ohos/axios: ^2.2.0, lib_common: file:../lib_common } }配置好后执行ohpm install。但这里有两个大坑第一.har包和源码依赖的混淆。很多三方库提供的是.har包编译后的二进制也有一些是源码。.har包升级方便但遇到问题不好调试源码方便改但容易引入编译问题。建议核心业务用自己的源码库非核心的工具类用.har包。第二cjs和ets的兼容性问题。HarmonyOS 7 主推.ets但很多第三方库还是.js或者.cjs。引入时可能会报找不到模块。这时候需要在build-profile.json5里做转换配置或者去找最新的兼容版本。一个常见报错Error: Cannot find module xxx or its corresponding type declarations.这通常是因为三方库的package.json里main字段指向了错误的文件或者没有声明types。你可以自己在项目根目录建一个types.d.ts手动声明typescriptdeclare module some-legacy-lib { export function doSomething(): void; }二、权限申请最小化原则是铁律上架审核被拒90% 的原因出在权限上。很多三方 SDK 在初始化时会索要一堆权限比如通讯录、位置、相机。如果你的应用核心功能用不到这些就别在module.json5里声明。一旦声明了审核员就会问“你要这个权限干嘛”正确的做法只在module.json5里声明应用实际需要的权限。比如你的应用只是个记事本只需要ohos.permission.INTERNET和ohos.permission.READ_MEDIA。别去碰LOCATION和CAMERA。另外动态权限的申请时机非常重要。千万别在应用一启动就弹出一连串权限请求用户会很反感审核也容易被卡。要遵循“用到时再申请”的原则。typescript// 错误做法onCreate 里申请一堆权限 async onCreate() { await requestPermissionsFromUser([ohos.permission.CAMERA, ohos.permission.LOCATION]); } // 正确做法在具体点击事件里申请 Button(扫一扫) .onClick(async () { const atManager abilityAccessCtrl.createAtManager(); const result await atManager.requestPermissionsFromUser(this.context, [ohos.permission.CAMERA]); if (result.authResults[0] 0) { // 打开相机 } })https://placeholder-02.png/三、隐私政策别搞“先斩后奏”这是上架审核中最大的雷区。很多应用一启动直接进入主页然后开始请求数据过了两秒才弹隐私政策弹窗。这种“先斩后奏”的做法在 HarmonyOS 应用市场是绝对会被拒绝的。正确流程应用启动 - 检查是否同意过隐私政策 - 如果没同意弹窗此时不加载任何网络数据、不读取任何本地敏感数据- 用户点击“同意” - 再执行初始化逻辑。具体实现时建议在 Ability 的onWindowStageCreate里加载一个专门的“隐私政策页面”或者展示一个弹窗把首屏的加载逻辑推迟到用户同意之后。typescriptexport default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage) { const isAgreed AppStorage.get(privacy_agreed); if (isAgreed) { windowStage.loadContent(pages/Index); } else { windowStage.loadContent(pages/PrivacyPage); // 专门的隐私政策页 } } }在PrivacyPage里typescriptButton(同意并继续) .onClick(() { AppStorage.setOrCreate(privacy_agreed, true); router.replaceUrl({ url: pages/Index }); })这是硬性规定没有商量的余地。别想着耍小聪明审核员见得太多了。四、三方 SDK 的“隐形炸弹”你用了三方推送 SDK用了三方统计 SDK用了三方地图 SDK……这些 SDK 在你的应用里可能会偷偷干一些事。常见问题后台静默下载有些 SDK 会偷偷下载文件审核发现后直接拒。过度收集信息比如统计 SDK 收集了设备型号之外的敏感信息。自启动/关联启动这也是审核严打的对象。解决方案在隐私政策里明确列出所有三方 SDK 的名称和收集信息的类型。少写一个都可能被拒。去 SDK 官方找“合规版本”。很多大厂 SDK 都提供了符合 HarmonyOS 上架规范的版本去官网找最新的。如果某些三方库实在没法合规考虑自己造轮子。比如一个简单的网络请求库自己封装一下比用一个不知名三方库安全得多。https://placeholder-03.png/五、打包与提审细节决定成败终于改完了打包提审。但别急还有几个细节要注意第一签名证书。必须在 AGCAppGallery Connect后台申请发布证书别用调试证书提审。第二应用版本号。每次提审versionCode必须比上一次大versionName也不能重复。不然系统会拒绝。第三测试账号。如果你的应用需要登录记得在 AGC 后台给审核员提供测试账号。如果审核员登不进去直接一票否决。第四应用截图和描述。别敷衍。截图要清晰描述要准确别写“最好的应用”这种违规词。第五隐私政策链接。必须是一个真实可访问的网页链接里面要有详细的隐私条款。https://placeholder-04.jpg/六、总结三方库接入和上架审核核心是“合规”两个字。记住三点权限能少则少需要哪个申请哪个别提前要。隐私政策必须先弹窗用户同意前别碰任何数据。三方 SDK 要严查隐私政策里必须列明有问题的赶紧替换。