做过LBS应用的开发者,想起起地理围栏应该都有一段血泪史。
不是代码难度,是周边的麻烦太多。地图SDK、定位权限、后台保活、电量控制,每一样都得单独搞定,最后还不一定稳定。好不容易跑通了,换个手机品牌又出兼容问题。
鸿蒙SDK 26把这套东西收进了系统层。云侧围栏、FenceExtensionAbility、实况窗,三个组件把以前要拼积木的活全干了。这篇不吹不黑,先说说以前到底有多折腾,再给一份能直接用的开发教程。手上有商铺、连锁门店、景区资源的老板,看到最后应该会有收获。
以前做地理围栏,到底折腾在哪
安卓时代做地理围栏,技术栈本身不复杂,复杂的是把它变成能商用的产品。
先说地图SDK。国内用高德或百度,个人开发者用免费版,但免费版有调用次数限制,精度也打了折扣。企业商用必须买授权,授权费按年收,按调用量阶梯计价,一年几千到几万块不等。
定位SDK同样要买。高德定位、百度定位,商业授权单独收费。地图和定位两套授权买下来,还没开始写代码,预算已经出去一笔。
后台保活是另一个老大难。围栏监听需要应用在后台一直跑着,但安卓从8.0开始一步步收紧后台限制,到12.0之后后台进程基本活不过几小时。开发者得搞前台服务、WorkManager、AlarmManager各种方案轮番上阵,哪个都不能保证在所有机型上稳定运行。
推送服务还得再买一套。围栏触发了得通知用户,要么接厂商推送——华为、小米、OPPO、vivo,各家有自己的Push SDK,要么用第三方推送聚合服务,又是一笔年费。
电量也是问题。持续定位等于持续耗电,用户发现哪个App耗电高,第一反应是卸载。开发者得在精度和功耗之间反复调参,调到用户不投诉为止。
iOS侧也没轻松到哪去。CoreLocation的围栏有20个数量上限,精度受系统调度影响,后台唤醒不稳定,测试结果经常飘忽。
这一整套搞下来,光各种授权费一年就是几万块,开发周期按月算,安卓和iOS两端还得各写一套代码。做完了,换个系统版本又得适配一轮。小团队扛不住这个成本,大团队也不想在这上面耗人。
现在鸿蒙如何实现
鸿蒙SDK 26把上面这些问题从系统层面解决了,核心三个方面。
云侧围栏:围栏坐标在AGC后台配置,不需要写死在代码里。围栏触发逻辑由系统接管,不依赖应用后台进程。开发者不用管保活,不用管功耗,系统在合适的时间自己唤醒应用处理事件。
FenceExtensionAbility:系统级的后台唤醒机制。即使应用被用户清掉、被系统回收,围栏事件发生时系统照样能拉起这个Ability处理业务。不需要写任何保活代码。
实况窗:围栏触发后,用实况窗把信息推给用户。不是通知栏弹窗,是锁屏和通知中心的轻量卡片,不骚扰用户。用户可以点卡片进入应用,也可以直接忽略。
这三样都是系统自带的能力,不需要买第三方SDK,不需要按年付授权费,不需要处理兼容性问题。以前按月计的开发周期,现在按天算。
开发教程:从零搭建一个到店推送功能
下面是一份完整的开发教程,以到店推送为例,手把手教你用云侧围栏和实况窗。
第一步:AGC后台配置围栏
登录AppGallery Connect,找到“定位服务”,选择“添加围栏组触发”。按商圈、门店等类别配置围栏策略下发。如果你有全国几百家门店的坐标,一次性配置好围栏组即可,不需要在代码里逐个定义。
从HarmonyOS NEXT Developer Beta2起,不需要配置公钥指纹和Client ID,这一步省了。
第二步:创建FenceExtensionAbility
import { FenceExtensionAbility, geoLocationManager } from '@kit.LocationKit';
import { notificationManager } from '@kit.NotificationKit';
import { Want, wantAgent } from '@kit.AbilityKit';
export class MyFenceExtensionAbility extends FenceExtensionAbility {
onFenceStatusChange(transition: geoLocationManager.GeofenceTransition, additions: Record<string, string>): void {
console.info(`围栏事件,ID:${transition.geofenceId},事件:${transition.transitionEvent}`);
let wantAgentInfo: wantAgent.WantAgentInfo = {
wants: [
{
bundleName: 'com.example.myapp',
abilityName: 'EntryAbility',
parameters: {
"geofenceId": transition?.geofenceId,
"transitionEvent": transition?.transitionEvent,
}
} as Want
],
actionType: wantAgent.OperationType.START_ABILITY,
requestCode: 100
};
wantAgent.getWantAgent(wantAgentInfo).then((wantAgentMy) => {
let notificationRequest: notificationManager.NotificationRequest = {
id: 1,
content: {
notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
normal: {
title: `到店优惠`,
text: `您有一张优惠券待领取`,
}
},
notificationSlotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,
wantAgent: wantAgentMy
};
notificationManager.publish(notificationRequest);
});
}
onDestroy(): void {
console.info('FenceExtensionAbility 销毁');
}
}
onFenceStatusChange
是收到围栏事件后的唯一入口。transition
包含围栏ID和事件类型(进入/退出/停留),additions
是附加信息。上面示例在收到事件后发了一条通知,用户点击通知会打开应用主页,并通过参数把围栏ID和事件类型传过去,应用可以根据这些参数展示不同的优惠页面。
第三步:module.json5 注册
{
"module": {
"extensionAbilities": [
{
"name": "MyFenceExtensionAbility",
"srcEntry": "./ets/FenceExtensionAbility/MyFenceExtensionAbility.ets",
"type": "fence"
}
]
}
}
第四步:元服务免安装触达
如果不想让用户装App,可以做成元服务。用户在应用市场搜索你的品牌名,点一下就能用,不需要下载。围栏触发后,实况窗弹出元服务卡片,用户点卡片进入元服务完成领券或下单。
对商家来说,获客路径从“下载App→注册→领券”变成了“走到店附近→锁屏看到优惠→点一下领券”。每一步的流失率都大幅降低。
第五步:实况窗展示
围栏触发后,除了发通知,还可以用实况窗把信息展示在锁屏上。实况窗接入代码不复杂,核心是调用Live View Kit的接口创建卡片。具体开发细节可以查阅官方文档里的Live View Kit开发指导。
以前和现在,差距有多大
以前安卓方案:买地图SDK授权 → 买定位SDK授权 → 买推送SDK授权 → 搞后台保活 → 调试功耗 → 兼容不同机型 → 两端各写一套代码。一年几万块授权费,开发周期按月算。
现在鸿蒙方案:AGC配置围栏 → 创建FenceExtensionAbility → module.json5注册 → 接实况窗。系统自带能力,没有第三方授权费。以前按月计的开发周期,现在按天算。
代码量从几百行降到几十行。不需要处理保活,不需要调功耗,不需要买SDK——系统帮你做了。开发者只关心业务逻辑:围栏触发后展示什么内容、用户点击后跳到哪个页面。
有店铺资源的老板,可以动手了
如果你手上有连锁门店、商场、景区、车站这些线下场景资源,地理围栏+元服务这套组合的商业价值是实打实的。
以前想做“到店推送”,各种SDK授权费加上开发成本,小几十万起步,大部分商家一听价格就放弃了。鸿蒙SDK 26把这套东西变成了系统自带能力,不需要买第三方SDK,不需要养移动开发团队,找一个懂鸿蒙的开发者或者外包团队,几天对接完,剩下的就是配置围栏坐标。
想更深入地把这套能力用在商业场景上,可以联系重庆华鸿科技。他们的鸿蒙开发团队能帮你从围栏配置、实况窗搭建到元服务上线一条龙搞定。有华为官方认证讲师坐镇,跟赛力斯、阿维塔、重钢集团等企业有深度合作,做过的项目覆盖办公、社交、工具、商业营销多个方向。不管你是想做自己的品牌应用,还是想给商户提供到店推送服务,都有现成的技术方案可以直接用。
对开发者来说,地理围栏这个技能本身也是加分项。重庆华鸿科技的鸿蒙培训课程里,位置服务和实况窗是一个完整的实战模块,从云侧围栏配置到FenceExtensionAbility开发,从实况窗卡片设计到元服务打包上架,一步步教到能独立交付。学完考个HCIA或HCIP,简历上多一个能落地的项目经验。
本文由「华鸿技术栈」原创发布,专注鸿蒙(HarmonyOS)原生应用与元服务开发。从零到一分享实战代码与项目案例,对接鸿蒙技术培训资源与上市公司研发岗位,为开发者铺平入行之路。不讲虚的,只上干货。转载请联系授权。
重庆华鸿科技 深耕鸿蒙生态人才培养,推出《HarmonyOS 应用开发者认证培训班》《HarmonyOS 应用开发者原生开发精研班》《HarmonyOS 原生应用项目实战与就业班》,由华为官方认证讲师授课,手把手带您从零构建商业级鸿蒙应用。
课程亮点:真实项目驱动,以办公、社交、工具类 App 为案例;小班精讲,每位学员获得针对性指导;就业直推,合作企业覆盖西南地区鸿蒙生态链,优秀学员直接内推。
🎯 抢占限量试学名额,开启你的鸿蒙开发第一课!
📞 古老师:15923251302