合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
场景概述
中国古代史学家历来秉持“左图右史”的治学传统,即通过图文互证的方式深入探究历史脉络。这一理念强调,史书典籍的解读离不开对历史地理空间维度的把握——地图以其直观性弥补了纯文字描述在空间关系呈现上的局限,使抽象的历史事件得以具象化呈现。
正如费尔南·布罗代尔所言:“没有地理,就没有历史”,地理环境实为历史进程不可剥离的时空坐标。
历史地图APP正是基于这一“史地不分家”的核心思想设计开发。以数字化手段重构传统治学方法,将历史文献与地理空间深度融合,用户可动态切换公元前7000年至公元1948年间的历史场景,实现跨时空的沉浸式探索。通过精准还原不同时期的疆域变迁、战争路线、文明分布等地理要素,不仅延续了“索象于图,索理于书”的学术传统,更以交互技术赋予历史研究全新的时空体验维度:



然而,历史地图APP的核心特性——时空信息的动态性与精确性——也带来了一个独特的挑战:跨场景分享困难。这在历史研究者或爱好者群体中尤为突出。当需要引用特定时代、特定位置的历史地图来佐证观点时,若双方身处同一空间,直接展示手机屏幕即可高效讨论。但异地交流时,现有分享方式均存在显著局限:
1、文字描述:难以精确传达复杂的时空坐标与地理关系,信息失真风险高。
2、静态截图:虽然直观,却丧失了地图的核心交互性(如缩放、图层切换、时间轴拖动),无法满足深度探讨需求。
3、坐标数据分享:虽能精确定位,但操作流程相对繁琐,且接收方需手动输入,体验割裂,破坏了交流的流畅性。
相较之下,“App Linking”技术为此场景提供了近乎完美的解决方案。它允许用户生成一个携带完整时空参数(时代、位置、视图状态)的动态链接,接收方点击即可无缝跳转至APP内完全一致的地图视图,瞬间实现“所见即所得”的精准信息同步,彻底解决了异地历史地图分享的痛点。
技术实现
如何判断应用是否适合集成 App Linking? 可参考以下核心标准进行评估:
a) 内容可分享性与发现难度: 应用内是否存在用户希望分享给他人,但通过常规应用导航难以快速定位的内容?例如,在历史地图应用中,特定时间点、特定位置的地图视图就属于此类“深藏”内容。
b) 内容可描述性与机器可识别性: 分享的核心信息能否被精炼为一段简单的文本描述?这决定了程序能否据此精准定位目标内容。关键在于,这段描述对机器易于解析,但对人类用户可能不够直观(如地图的经纬度坐标、年代、缩放级别)。
c) 应用内跳转支持能力: 应用能否基于接收到的内容描述(如上述文本参数),准确解析并跳转至对应的界面,完整展示该内容?
若以上问题答案均为“是”,则可参照官方 App Linking 集成指南 完成集成。核心流程可归纳为以下四个关键步骤:
1、服务开通与配置: 在控制台开通 App Linking 服务并完成基础配置(如域名配置、关联网址等)。此步骤建议严格参照官方控制台示意图操作。

2、分享入口与 URL 构造: 在应用内提供用户分享入口(如分享按钮)。用户触发分享后,程序需根据目标内容生成符合规范的 App Linking URL(通常包含用于定位内容的参数,像是坐标、年代信息等),这里要注意的是,对于分享参数通过 encodeURIComponent 进行编码,以防止特殊字符破坏链接:
private async share(mapLocInfo: MapLocInfo) {
const contextFaker: Context = getContext(this);
const resourceMgr: resourceManager.ResourceManager = contextFaker.resourceManager;
const shareImage: Uint8Array = await resourceMgr.getMediaContent($r('app.media.app_icon'));
const appName: string = contextFaker.resourceManager.getStringByNameSync('EntryAbility_label');
let shareData: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.HYPERLINK,
content: `https://xxx.xxx.xxx.xxx/share.html?year=${encodeURIComponent(mapLocInfo.year.toString())}&lng=${encodeURIComponent(mapLocInfo.lng.toString())}&lat=${encodeURIComponent(mapLocInfo.lat.toString())}&zoom=${encodeURIComponent(mapLocInfo.zoom.toString())}`,
title: `「${appName}」`,
description: '分享内容',
thumbnail: shareImage,
});
let controller: systemShare.ShareController = new systemShare.ShareController(shareData);
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
controller.show(context, {
previewMode: systemShare.SharePreviewMode.DEFAULT,
selectionMode: systemShare.SelectionMode.SINGLE
}).then(() => {
hilog.debug(0xFF00, HistoryMapView.TAG, 'ShareController show success.');
}).catch((error: BusinessError) => {
hilog.debug(0xFF00, HistoryMapView.TAG, "ShareController show error. code: %{public}s, message: %{public}s,",
error.code, error.message);
});
}3、链接接收与参数解析: 在应用的 EntryAbility(应用入口模块)中,实现对新启动意图(want)的监听。从接收到的 App Linking URL 中解析出关键参数(如上一步构造的 year,lng,lat,zoom):
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let uri = want?.uri
if (uri) {
let urlObject = url.URL.parseURL(uri);
const shareData = {
data: {
year: urlObject.params.get('year'),
lng: urlObject.params.get('lng'),
lat: urlObject.params.get('lat'),
zoom: urlObject.params.get('zoom'),
} as ExploreData
} as ShareData;
AppStorage.setOrCreate<ShareData>('SHAREDATA', shareData);
}
}
// 其他处理逻辑
}
}4、内容跳转与展示: 基于解析出的参数,通过应用的路由机制跳转到目标页面,加载并展示对应的具体内容(如特定时间点的历史地图视图)。
测试注意事项:
在测试 App Linking 功能时,切勿直接将第二步生成的链接粘贴到系统浏览器地址栏并回车。这是因为系统会将此行为识别为用户主动请求访问该 URL 对应的网页,从而优先尝试在浏览器中加载,而非触发应用跳转。

推荐测试方法:
1、备忘录点击法: 将完整的 App Linking URL 粘贴到手机自带的备忘录或任何文本编辑应用中。保存后,直接点击该链接。系统会将其识别为来自其他应用的链接请求,从而正确触发 App Linking 跳转逻辑。
2、跨应用分享法: 将链接通过其他应用(如微信)发送给自己,然后在接收端点击该链接进行测试。需特别注意:若在微信环境中打开,需在分享页面添加环境检测逻辑(如判断User-Agent),当识别为微信内置浏览器时,应主动提示用户使用系统浏览器打开链接。可参考以下示例实现:

效果收益
综合上述集成流程,若APP已具备原生页面路由能力,则App Linking的集成成本相对较低。但对于缺乏此类直达能力的应用,需评估是否值得投入开发资源进行架构改造——该决策可能因APP类型(如工具类、内容类等)而异。为便于量化评估,分享一下集成前后的关键指标数据供参考。
于7月初完成App Linking集成并上线后,在后续迭代版本中逐步扩展了碰一碰、延迟链接、跨设备接力等能力。从下载增长数据观察,虽未带来爆发式增长,但增长曲线斜率已呈现显著上扬趋势:

从活跃设备维度观察,效果表现更为显著,活跃设备的规模实现量级跃升(或许是因为地图分享方便了,激发了大家的交流欲?)

最后分享一个有点意思的数据,在应用跨端接续功能上线后,鸿蒙PC设备占比出现显著提升。当前设备占比TOP5榜单中,华为MateBook系列已占据三席:

我要发帖子