- Akamai maintains database of useragent strings
- When visitor requests your website under Akamai, it is able to parse useragent header on the fly and add parsed information about device.
- You get X-Akamai-Device-Characteristics request header on your server that contains information that could be used. E.g.: X-Akamai-Device-Characteristics: brand_name=Google; is_tablet=false; device_os=Android
- You can use this information to display different content depending on information that you have got.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sitecore.Diagnostics; using Sitecore.Rules; using Sitecore.Rules.Conditions; namespace Foundation.Akamai.DeviceDetection.Rules.Conditions { public class DeviceIsMobile<T> : OperatorCondition<T> where T : RuleContext { private HeaderParser HeaderParser { get { return new HeaderParser(); } } protected override bool Execute(T ruleContext) { Assert.ArgumentNotNull(ruleContext, "ruleContext"); Assert.IsNotNullOrEmpty(HttpContext.Current.Request.Headers["X-Akamai-Device-Characteristics"], "Akamai header X-Akamai-Device-Characteristics is null or empty"); var headerValue = HttpContext.Current.Request.Headers["X-Akamai-Device-Characteristics"]; var dictionary = headerValue.ParseAkamaiHeader(";"); bool.TryParse(dictionary["is_mobile"], out bool value); return value; } } public static class Extensions { public static Dictionary<string, string> ParseAkamaiHeader(this string headerValue, string delimiter = ",") { var pairs = headerValue.Split(new string[] { delimiter }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()); var dictionary = new Dictionary<string, string>(); foreach (var pair in pairs) { var parts = pair.Split('='); if (parts.Length > 1) { var key = parts[0]; var value = parts[1]; dictionary.Add(key, value); } } return dictionary; } } }
It is possible to create a lot of rules based on Akamai information about visitor location or his device without overriding anything in Sitecore.
All code and Sitecore items serialization are available in GitHub repository, also it is possible to download Sitecore update package and use it.