HarmonyOS鸿蒙Next中uni-app x(HBuilderX)项目调用Map Kit site.nearbySearch/reverseGeocode始终报1002600003 App authentication failed
HarmonyOS鸿蒙Next中uni-app x(HBuilderX)项目调用Map Kit site.nearbySearch/reverseGeocode始终报1002600003 App authentication failed
环境信息
- HBuilderX 版本:最新版
- HarmonyOS NEXT 5.0+(API 12)
- 设备:真机调试
- 开发框架:uni-app x(UTS 插件编译为 HAR 模块)
- 签名方式:手动签名(.p12 + .cer + .p7b)
问题描述
在 uni-app x 鸿蒙项目中,通过 UTS 插件调用 @kit.MapKit 的 Site Kit API(site.nearbySearch() 和 site.reverseGeocode()),始终返回错误码 1002600003 App authentication failed。
但同一个 UTS 插件中调用 sceneMap.chooseLocation() 则完全正常,可以成功打开原生选点页面并返回结果。
错误日志
[DIAG] testing site.reverseGeocode...
[DIAG] reverseGeocode FAILED: code=1002600003 msg=App authentication failed.
[DIAG] calling site.nearbySearch...
[DIAG] nearbySearch FAILED: code=1002600003 msg=App authentication failed.
系统日志中还会出现:
W C02D07/NapiProcessor: Parameter error. The configName parameter is invalid.
已验证正确的配置(逐项确认)
| 配置项 | 状态 | 值 |
|---|---|---|
| AGC 地图服务 | 已开通 | ✅ |
| 包名 | 正确 | - |
| module.json5 client_id | 正确 | - |
| SHA256 指纹(AGC 注册) | 匹配 | - |
| APP 运行时签名指纹 | 与 AGC 一致 | 通过 bundleManager.getBundleInfoForSelfSync 验证 |
| Profile(.p7b) | 包含 Map Kit | 提取 JSON 确认含 "com.huawei.service.mapkit": {} |
| Profile 内嵌证书指纹 | 与 APP 一致 | 从 .p7b 提取开发者证书 SHA256 与运行时指纹完全一致 |
| agconnect-services.json | 已放入 rawfile | entry 模块和 HAR 模块均已放置 |
| 权限 | 已声明 | INTERNET、LOCATION、APPROXIMATELY_LOCATION |
| 签名方式 | 手动签名 | .p12 + .cer + .p7b |
| Profile 生成时序 | 地图服务开通后生成 | ✅ |
关键对比
| API | 上下文方式 | 结果 |
|---|---|---|
sceneMap.chooseLocation(context, options) |
显式传入 UIAbilityContext | 成功 |
site.nearbySearch(params) |
SDK 隐式获取上下文 | 失败 |
site.reverseGeocode(params) |
SDK 隐式获取上下文 | 失败 |
两个 API 均在同一个 UTS 插件中调用。chooseLocation 接受显式 context 参数所以成功;Site API 不接受 context 参数,SDK 内部获取上下文时可能出错。
核心怀疑
uni-app x 的 UTS 插件编译为独立 HAR 模块。Site SDK 内部可能通过 getContext() 获取的是 HAR 模块的上下文,而非 entry 模块的上下文,导致 SDK 无法正确读取认证配置。
NapiProcessor: configName parameter is invalid 警告进一步支持这一判断——SDK 在读取某个配置时失败。
已尝试在 HAR 模块的 module.json5 中添加 client_id metadata,以及将 agconnect-services.json 放入 HAR 模块的 resources/rawfile/,均无效。
代码
import { site, sceneMap } from '@kit.MapKit'
import { BusinessError } from '@kit.BasicServicesKit'
import { common } from '@kit.AbilityKit'
// 此函数失败:1002600003
async function testSiteApi() {
let params: site.NearbySearchParams = {
query: '',
location: { latitude: 123, longitude: 456 },
radius: 200,
language: 'zh',
}
const result = await site.nearbySearch(params) // 抛出 1002600003
}
// 此函数成功
async function testChooseLocation() {
let options: sceneMap.LocationChoosingOptions = {
location: { latitude: 123, longitude: 456 },
language: 'zh_cn',
searchEnabled: true,
showNearbyPoi: true,
}
const context = UTSHarmony.getUIAbilityContext()! as common.UIAbilityContext
const data = await sceneMap.chooseLocation(context, options) // 成功
}
期望获取的帮助
- Site Kit 的
nearbySearch/reverseGeocode是否支持在 HAR 模块中调用?是否需要特殊的初始化步骤? NapiProcessor: configName parameter is invalid的具体含义是什么?需要配置什么?- 是否有办法为 Site Kit API 显式传入 context 或进行初始化(类似
sceneMap.chooseLocation接受 context 参数那样)? - 在非 DevEco Studio 环境(如 HBuilderX / uni-app x)中使用 Site Kit 是否有已知限制?
更多关于HarmonyOS鸿蒙Next中uni-app x(HBuilderX)项目调用Map Kit site.nearbySearch/reverseGeocode始终报1002600003 App authentication failed的实战教程也可以访问 https://www.itying.com/category-93-b0.html
从日志中看出来,报了1002600001、1002600002、1002600003这些错误码。提交工单,工程师验证了真机和模拟器,都没有问题。
只能怀疑我这台测试机有网络相关的问题。
最终把这台测试机恢复出厂设置了,问题解决。虽然很莫名其妙,但好在解决了。
这个问题问的人也不算多,估计加我这条帖子一共5个人问过1002600003的问题,几乎没找到有用的答案。希望我这个能给遇到类似问题的人一点启发。
更多关于HarmonyOS鸿蒙Next中uni-app x(HBuilderX)项目调用Map Kit site.nearbySearch/reverseGeocode始终报1002600003 App authentication failed的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
错误码1002600003表明应用鉴权失败,常见原因是API Key未正确配置或包名/签名证书指纹不匹配。请在HBuilderX的manifest.json中确认harmonyos模块下apiKeys已设置有效密钥,并保证开通了Map Kit服务。同时检查应用签名指纹(SHA256)是否在AGC上正确绑定。
该错误表示 Site Kit 在 HAR 模块中无法获取有效的应用上下文,导致认证配置读取失败。sceneMap.chooseLocation 因显式传入 context 而成功。
解决方案:在应用入口(EntryAbility 的 onCreate)中调用 MapKit.init(context) 传入全局上下文,让 SDK 提前完成认证初始化。之后在 HAR 插件中调用 site.nearbySearch 等 API 时即可正常鉴权。无需在 HAR 模块内重复放置 agconnect-services.json 或额外声明 client_id。


