以编程方式访问地理定位服务

Access Geolocation service programmatically

我正在尝试使用 Sitecore 8.1 的地理定位服务来检测客户的位置并提供正确的站点上下文。

我可以通过编程方式使用他们提供的 API 吗?有示例代码吗?

您将需要 Sitecore.Analytics.Lookups 命名空间。 Sitecore.Analytics.Lookups.GeoIpManager.GetGeoIpData 应该让你开始。

请记住,基于 GeoIP 数据的框中已经有一些可用的规则和条件。也可以选择(重新)使用它们。

你真的不应该。该服务不打算在您的页面请求中同步调用 - 在您得到答案之前暂停网站页面交付。它根本不会表现得很好。

Sitecore Marketplace 提供 GeoLite Resolver(Github link:https://github.com/adoprog/Sitecore-Geo-Lite-Resolver),虽然它已经很老了,但仍然可以在您的 Sitecore 8 项目中包含和编译它.

它基本上使用 MaxMind 数据库的离线轻型副本 - 足以解决国家/地区分辨率(但不是城市) - 并且可以非常快速地(<10 毫秒)响应查找。

Sitecore Marketplace 也有 MaxMind GeoIP2 自定义查找提供程序模块,它使用 MaxMind GeoIP2 城市数据库 API 而无需 xDB https://marketplace.sitecore.net/en/Modules/M/MaxMind_GeoIP2_CustomLookupProvider.aspx

以上是正确的,你应该避免调用 GeoManager,它在许多地方作为示例给出,但会混淆分析。您应该调用 LookupManager.GetInformationByIP(ip);,它会解析 IP 并使用 GeoIP 缓存。

当我们尝试在 Sitecore 管道中利用 Geo IP 数据时,我们 运行 遇到了同样的问题,因为 GeoData 在默认情况下尚不可用。

记录在:http://edgebytes.com/2016/09/08/calling-sitecore-geo-ip-location-service/