GEOLOCATION 功能,其配置项为 geolocation_* 键,其核验结果显示在会话决策的 geolocation_checks[] 中。
适用场景
- 您仅在特定司法管辖区持有牌照(例如博彩、经纪、借贷),必须证明用户在申请时位于允许的区域内。
- 您必须将用户拦截在禁止区域之外,例如受制裁地区或您不提供服务的州/省份。
- 您需要额外的欺诈防范信号:设备位置与 IP 位置或身份证件地址相距甚远、模拟位置、VPN 或模拟器。
- 您不需要用户的行动轨迹或历史记录,仅需获取会话期间采集的单次读取位置。
工作原理
提示与权限
用户会看到需要获取其位置的原因,并了解该位置仅在本次验证中读取一次。
随后其浏览器或手机会请求位置权限。
Didit 会将用户同意的提示信息(版本、语言和时间)作为
consent 记录在结果中。每次尝试获取一次位置
客户端会保留最佳读取结果,直到精度达到要求或单次尝试超时(默认 20 秒)。
每次尝试都包含一个有效期为 5 分钟且与会话绑定的单次使用挑战,以确保捕获的提交内容无法被重放。
核验
Didit 会评估精度、新鲜度、近似位置权限、欺骗攻击信号、区域、与 IP 位置和证件地址的距离、VPN、代理、Tor 和模拟器的发现项,以及用户此前的核验记录。
结果
每项发现都会触发一个警告,其配置的操作(
NO_ACTION、REVIEW 或 DECLINE)决定步骤状态。
以最严格的操作为准。位置来源
您可以通过geolocation_position_source 选择位置的获取来源。
在向设备请求位置的节点上,未获取到位置的尝试将被视为拒绝或失败:绝不会用 IP 位置来替代。
配置默认值与限制
所有键均为选填项。 完整列表请参阅工作流功能配置参考。预设
geolocation_preset 会为您未明确设置的每项操作设定默认值。
licensing 会拒绝处于允许区域外、禁止区域内、使用 VPN 或 Tor 以及来自模拟器的位置,并对代理进行审核。
fraud_screening 应用相同的核验项,但会将 licensing 会拒绝的所有情况转为人工审核。
您明确设置的操作始终优先。
地理围栏
开启is_geolocation_geofencing_enabled 并列出 geolocation_areas。
区域可以是一个完整的国家/地区、某个国家/地区的行政区划(ISO 3166-2)、一个圆形(1 至 500 公里)或一个多边形(3 至 200 个顶点)。
只有位于允许区域内的位置才能通过,且禁止区域的优先级始终高于允许区域。
区域列表最多可包含 50 个区域,且至少需要一个允许区域。
Didit 会评估位置的整个精度圆范围,而不仅仅是其中心点:
- 精度圆完全位于所有允许区域之外时,判定为
LOCATION_OUTSIDE_GEOFENCE。 - 精度圆穿过决定判定的边界时,判定为
LOCATION_GEOFENCE_UNDETERMINED,绝不会直接判定为“在区域外”。 - 精度圆完全位于禁止区域内时,判定为
LOCATION_IN_BLOCKED_AREA,并在允许区域判定的基础上额外触发该警告。
ip_only 步骤,依据 IP 位置进行评估。
旧版的 geolocation_geofencing_by_country 设置依然有效,但不能与 geolocation_areas 同时使用。
距离检查
geolocation_document_distance_basis 用于选择地址:document(先选择身份证件,再选择地址证明)、proof_of_address 或 declared(会话创建时的 expected_details.address)。
启用 geolocation_travel_tolerance_enabled 后,如果用户在最近 geolocation_travel_max_days 天内曾在其地址附近出现,则当前远离该地址不会被标记。
旅行容差绝不豁免 VPN、伪造的位置、受阻区域或位于允许区域之外的位置。
欺骗与完整性信号
- 模拟提供程序:Android 和 iOS 会在位置属于模拟而非实测时进行上报。
- 设备证明:原生 SDK 可以附加设备证明。证明失败一律拒绝。缺失证明会被记录,且默认不采取任何操作。浏览器无法提供证明,会被记录为
unsupported,而非失败。 - VPN、代理和 Tor:在共享位置的网络连接中发现。当您对其中某项的操作不是
NO_ACTION时,若仍有剩余尝试次数,系统会要求用户将其关闭后重试。 - 模拟器:仅由原生应用上报。检测到模拟器会在该次尝试时直接结束该步骤,因为重试无法更改设备。
- 重放:在其他会话中出示的质询一律拒绝。
结果
该步骤中被接受的尝试具有一个outcome:
若仍有剩余尝试次数,当出现精度不足、位置陈旧、大致位置、拒绝授权或区域不符的结果时,系统会要求用户重试,且仅最后一次尝试会触发警告。
检测到模拟位置,或您的工作流会对模拟器采取操作时,会在上报该情况的该次尝试中直接结束该步骤。
用户体验
同意与权限
在用户接受须知并响应系统提示之前,不会读取任何信息。 该须知会说明:位置信息仅在此次验证中读取一次,不会记录其行动轨迹。 拒绝授权的用户将根据geolocation_refusal_path 进行处理:
retry_then_handoff:在仍有剩余尝试次数时再次请求,若仍未授权则引导在手机上继续。continue_without_location:允许在不提供位置的情况下继续,并将拒绝授权记录为结果。end_session:首次拒绝即直接结束该步骤和会话。此选项要求geolocation_permission_denied_action设置为REVIEW或DECLINE,且该会话绝不会通过。
geolocation_allow_skip 后,用户可以随时在不提供位置的情况下继续,该步骤将按 geolocation_unavailable_action 进行判定。
浏览器
托管流程会向浏览器请求位置,并在网站位置权限被关闭时提供针对 Chrome 和 Safari 的逐步指导。 浏览器无法区分精确授权与大致授权,因此网页结果绝不会触发LOCATION_APPROXIMATE_ONLY,也绝不上报模拟提供程序、模拟器或设备证明。
电脑无法共享精确位置,因此该流程会提供一个二维码,以便在用户的手机上继续相同的验证(geolocation_allow_qr_handoff,默认开启),手机端完成后电脑端会自动进入下一步。
当您将该流程嵌入到 iframe 中时,请在 allow 属性中包含 geolocation,请参阅嵌入式 iframe。
若页面阻止了地理位置权限策略,将被视为网站自身的决定,而非用户的拒绝。
原生 SDK
iOS 和 Android SDK 会向操作系统请求权限,并可附加设备证明与模拟位置标记。 在 iOS 上,需在Info.plist 中添加 NSLocationWhenInUseUsageDescription;在 Android 上,SDK 会声明 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION,且仅在工作流包含该步骤时在运行时进行请求。
请参阅原生 SDK。
在 iOS 或 Android 上授予大致位置权限会触发 LOCATION_APPROXIMATE_ONLY,除非 geolocation_accuracy_mode 为 approximate_allowed。
早于该步骤发布的应用或 SDK 构建版本将以 unsupported_client 结束,以避免会话卡滞。
决策返回的内容
会话决策和status.updated Webhook 包含两个列表:
geolocation_checks[]:每个位置步骤对应一项,包含该步骤已接受的尝试及其warnings。geolocation_attempts[]:每个位置步骤的每一次尝试,按时间由旧到新排列。
geolocation_checks 字段。