地点联想:改用鸿蒙自带 Map Kit,不再走高德 laoyang/FamilyBook#33

用户指示「端侧不用高德,用鸿蒙自带的接口」。

改用 @kit.MapKit 的 site.queryAutoComplete(),顺带解决原方案两个问题:
  ① 高德 Web 服务 key 是服务端密钥,本不该出现在客户端;
  ② 线上那个 key 实际是 JS API 类型、调 Web 服务接口一直失败(见 #33 排查记录)。
现在端上不需要任何外部 key,也不需要我们自己的服务端接口与配额。

改动:
- FbGeoRepo:site.queryAutoComplete({query}) -> sites[]
  取 name + formatAddress + location。
  formatAddress 的 SDK 注释原文是 "Formatted detailed address of a place",
  正是用户要的「作为参考的详细地址」。
  formatAddress 缺失时用 locality + streetName + streetNumber 兜底。
- FbAddrInput:去掉 token 参数(MapKit 鉴权走 AGC 应用认证,与 API 令牌无关)。
- FbEventEditSheet / FbTripNodeSheet:两处调用同步去掉 token。

错误码全部降级为空结果、不打扰用户(声明文件列明的):
  - 1002600003 App authentication failed
  - 1002600004 The Map permission is not enabled
  - 1002603001 Zero result(查不到,属正常业务结果,不刷错误日志)
  - 1002600002 Failed to connect to the Map Kit server
联想挂掉 => 退化成普通文本框,手敲照常保存。

字段名一律以声明文件 @hms.core.map.site.d.ts 为准:
StreetNumber 的字段是 streetName / streetNumber,
第一版凭印象写成 street / number,编译直接报
"Property 'street' does not exist on type 'StreetNumber'",已修正。

编译通过(33 tasks,17 executed)。
This commit is contained in:
2026-10-30 08:12:15 +08:00
parent f4f27cea55
commit 7bc26dd7e1
4 changed files with 159 additions and 76 deletions
@@ -44,8 +44,6 @@ export struct FbAddrInput {
@Param placeholder: string = '';
/** 当前值(父组件持有,**受控**) */
@Param value: string = '';
/** API 令牌(空串 = 不联想,纯文本框) */
@Param token: string = '';
/** 最多显示几条候选(默认 8;端上视口有限) */
@Param limit: number = 8;
/** 值变化(用户打字 / 选中候选都会触发) */
@@ -97,7 +95,9 @@ export struct FbAddrInput {
private async search(kw: string): Promise<void> {
this.seq += 1;
const my: number = this.seq;
const list: FbGeoTip[] = await fbGeoTips(kw, this.token, this.limit);
/* ⚠️ 不再传 token:改用鸿蒙自带 Map Kit 的 `site.queryAutoComplete()`,
鉴权走 AGC 应用认证,与我们的 API 令牌无关(见 FbGeoRepo 文件头)。 */
const list: FbGeoTip[] = await fbGeoTips(kw, this.limit);
if (my !== this.seq) {
return; // 已经有一次更新的输入了,这份丢弃
}
@@ -533,7 +533,6 @@ export struct FbEventEditSheet {
label: '地点',
placeholder: '地点(可选,输入后可从下拉选)',
value: this.fPlace,
token: this.token(),
onValue: (v: string): void => {
this.fPlace = v;
}
@@ -222,7 +222,6 @@ export struct FbTripNodeSheet {
label: '地点',
placeholder: '如「青岛北站」「崂山区·沙子口」',
value: this.place,
token: FB_TOKEN_STORE.get(),
onValue: (v: string): void => {
this.place = v;
}