泰州网络公司 浏览次数:0 发布时间:2026-08-25
GEO 分层适配:基于用户地理位置(国家 / 大区 / 省份 / 城市 / 商圈 / IP / 经纬度),对内容、文案、功能、权益、资源、UI做分层分发与渲染,做到不同地域看到不一样的业务内容,同时兼顾兜底、降级、灰度、权限、数据一致性。核心目标:地域精准匹配、异常可降级、配置可运营、性能可控、可追溯。
先定义系统内 GEO 层级字典,统一编码,避免各业务各自维护地理库。
重要:同一个用户会有多套 GEO 来源:GPS 定位、IP 地址、账号属地、用户手动选择,需要设计 GEO 优先级策略。
示例通用规则,业务可调整:
问题点:IP 容易出错、VPN 会篡改;GPS 可能为空;弱网定位失败,必须做降级。
核心是规则 + 内容 + 生效地域 + 排除地域 + 优先级 + 生效时间,不要写死代码。
rule_id:规则唯一ID
content_id:关联要展示的内容(活动/文案/弹窗/资源)
geo_scope_type:包含模式|排除模式
include_geo_list:生效geo编码集合(支持多层级混合:国家、省、城市)
exclude_geo_list:排除geo编码集合
priority:优先级,数字越大越优先
effective_time:生效/失效时间
status:启用/禁用
version:配置版本,用于灰度回滚
支持混合粒度:比如一条规则「全国生效,排除新疆、西藏」;另一条规则「仅上海、北京展示专属内容」。
用户请求时,组装用户 GEO 上下文对象,传给匹配引擎:
{
"geo_source":"gps/manual/ip/account",
"country":"CN",
"region":"east",
"province":"310000",
"city":"310100",
"district":"310101",
"lnglat":[121.47,31.23],
"geo_confidence":0.8 //置信度,定位不准时降低,触发降级
}
geo_confidence置信度非常关键:GPS 高精度置信度高;IP 解析置信度低,置信度过低不使用精细规则,自动往上一层回退。
匹配原则:越细粒度规则优先级越高;同粒度看 priority 权重;匹配不到执行向上兜底
完整执行流程:
优先尝试细粒度,匹配成功直接取;匹配失败向上回退上一级 GEO
priority优先级高的一条;性能优化:规则做本地缓存,不要每次请求查 DB;热点规则预热。
❌反模式:前端硬编码一堆 if (city== 上海) 展示 xxx;行政区划变更后,版本无法更新,维护灾难。
地理编码库维护新旧编码映射,旧编码自动映射新编码,规则配置层屏蔽底层编码变更。
依靠置信度,低置信度禁用精细规则;增加用户手动选择入口作为强优先。
统一后端 GEO 匹配引擎,各端只传 GEO 来源,统一返回结果,避免各端逻辑不一致。
每条返回内容带上命中的 rule_id、用户 GEO、geo_source 来源。埋点记录:
支持规则灰度:按百分比、按白名单账号测试 GEO 规则;测试环境支持强制模拟 GEO,不用真实切换 IP/GPS,可模拟任意省份城市验证适配效果。
def match_geo_content(user_geo, rule_list):
# 匹配层级从细到粗
geo_levels = [user_geo.district, user_geo.city, user_geo.province, user_geo.region, user_geo.country]
# 过滤有效规则
valid_rules = [r for r in rule_list if r.is_enable() and r.in_time_range()]
# 按粒度从细到粗遍历
for current_geo_code in geo_levels:
hit_rules = []
for rule in valid_rules:
# 排除列表优先校验
if current_geo_code in rule.exclude_geo_list:
continue
# 包含模式匹配
if rule.geo_scope_type == "include" and current_geo_code in rule.include_geo_list:
hit_rules.append(rule)
if hit_rules:
# 按优先级取最高
hit_rules.sort(key=lambda x:x.priority, reverse=True)
return hit_rules[0].content_id
# 全部没命中,返回兜底
return get_default_content()

下一篇:没有了