2010-08-04 44 views
1

有没有人遇到过这个问题?Google Analytics for Mobile网站没有跟踪数据

我们无法使用基于JavaScript跟踪谷歌分析移动网站,所以我们必须使用这里找到了解决办法:http://code.google.com/mobile/analytics/docs/web/#asp

但是,它似乎并没有被记录过任何数据最近几天。

这是正在使用的代码:

public class GoogleAnalyticsHelpers 
{ 
    public static String GetTrackingImageUrl() 
    { 
     StringBuilder url = new StringBuilder(); 
     url.Append("/ga.aspx?"); 
     url.Append("utmac=").Append(Configuration.GoogleAnalyticsKey()); 

     Random randomClass = new Random(); 
     url.Append("&utmn=").Append(randomClass.Next(0x7fffffff)); 

     String referer = "-"; 
     if (HttpContext.Current.Request.UrlReferrer != null && "" != HttpContext.Current.Request.UrlReferrer.ToString()) 
     { 
      referer = HttpContext.Current.Request.UrlReferrer.ToString(); 
     } 
     url.Append("&utmr=").Append(HttpUtility.UrlEncode(referer)); 

     if (HttpContext.Current.Request.Url != null) 
     { 
      url.Append("&utmp=").Append(HttpUtility.UrlEncode(HttpContext.Current.Request.Url.PathAndQuery)); 
     } 

     url.Append("&guid=ON"); 

     return url.ToString().Replace("&", "&"); 
    } 
} 

而在ga.aspx页:

<%@ Page Language="C#" ContentType="image/gif"%> 
<%@ Import Namespace="System.Net"%> 
<%@ Import Namespace="System.Security.Cryptography"%> 
<script runat="server" language="c#"> 
    /** 
    Copyright 2009 Google Inc. All Rights Reserved. 
    **/ 

    // Tracker version. 
    private const string Version = "4.4sa"; 

    private const string CookieName = "__utmmobile"; 

    // The path the cookie will be available to, edit this to use a different 
    // cookie path. 
    private const string CookiePath = "/"; 

    // Two years in seconds. 
    private readonly TimeSpan CookieUserPersistence = TimeSpan.FromSeconds(63072000); 

    // 1x1 transparent GIF 
    private readonly byte[] GifData = { 
     0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 
     0x01, 0x00, 0x01, 0x00, 0x80, 0xff, 
     0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 
     0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 
     0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 
     0x02, 0x44, 0x01, 0x00, 0x3b 
    }; 

    private static readonly Regex IpAddressMatcher = 
     new Regex(@"^([^.]+\.[^.]+\.[^.]+\.).*"); 

    // A string is empty in our terms, if it is null, empty or a dash. 
    private static bool IsEmpty(string input) { 
    return input == null || "-" == input || "" == input; 
    } 

    // The last octect of the IP address is removed to anonymize the user. 
    private static string GetIP(string remoteAddress) { 
    if (IsEmpty(remoteAddress)) { 
     return ""; 
    } 
    // Capture the first three octects of the IP address and replace the forth 
    // with 0, e.g. 124.455.3.123 becomes 124.455.3.0 
    Match m = IpAddressMatcher.Match(remoteAddress); 
    if (m.Success) { 
     return m.Groups[1] + "0"; 
    } else { 
     return ""; 
    } 
    } 

    // Generate a visitor id for this hit. 
    // If there is a visitor id in the cookie, use that, otherwise 
    // use the guid if we have one, otherwise use a random number. 
    private static string GetVisitorId(
     string guid, string account, string userAgent, HttpCookie cookie) { 

    // If there is a value in the cookie, don't change it. 
    if (cookie != null && cookie.Value != null) { 
     return cookie.Value; 
    } 

    String message; 
    if (!IsEmpty(guid)) { 
     // Create the visitor id using the guid. 
     message = guid + account; 
    } else { 
     // otherwise this is a new user, create a new random id. 
     message = userAgent + GetRandomNumber() + Guid.NewGuid().ToString(); 
    } 

    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
    byte[] messageBytes = Encoding.UTF8.GetBytes(message); 
    byte[] sum = md5.ComputeHash(messageBytes); 

    string md5String = BitConverter.ToString(sum); 
    md5String = md5String.Replace("-",""); 

    md5String = md5String.PadLeft(32, '0'); 

    return "0x" + md5String.Substring(0, 16); 
    } 

    // Get a random number string. 
    private static String GetRandomNumber() { 
    Random RandomClass = new Random(); 
    return RandomClass.Next(0x7fffffff).ToString(); 
    } 

    // Writes the bytes of a 1x1 transparent gif into the response. 
    private void WriteGifData() { 
    Response.AddHeader(
     "Cache-Control", 
     "private, no-cache, no-cache=Set-Cookie, proxy-revalidate"); 
    Response.AddHeader("Pragma", "no-cache"); 
    Response.AddHeader("Expires", "Wed, 17 Sep 1975 21:32:10 GMT"); 
    Response.Buffer = false; 
    Response.OutputStream.Write(GifData, 0, GifData.Length); 
    } 

    // Make a tracking request to Google Analytics from this server. 
    // Copies the headers from the original request to the new one. 
    // If request containg utmdebug parameter, exceptions encountered 
    // communicating with Google Analytics are thown. 
    private void SendRequestToGoogleAnalytics(string utmUrl) { 
    try { 
     WebRequest connection = WebRequest.Create(utmUrl); 

     ((HttpWebRequest)connection).UserAgent = Request.UserAgent; 
     connection.Headers.Add("Accepts-Language", 
      Request.Headers.Get("Accepts-Language")); 

     using (WebResponse resp = connection.GetResponse()) { 
     // Ignore response 
     } 
    } catch (Exception ex) { 
     if (Request.QueryString.Get("utmdebug") != null) { 
     throw new Exception("Error contacting Google Analytics", ex); 
     } 
    } 
    } 

    // Track a page view, updates all the cookies and campaign tracker, 
    // makes a server side request to Google Analytics and writes the transparent 
    // gif byte data to the response. 
    private void TrackPageView() { 
    TimeSpan timeSpan = (DateTime.Now - new DateTime(1970, 1, 1).ToLocalTime()); 
    string timeStamp = timeSpan.TotalSeconds.ToString(); 
    string domainName = Request.ServerVariables["SERVER_NAME"]; 
    if (IsEmpty(domainName)) { 
     domainName = ""; 
    } 

    // Get the referrer from the utmr parameter, this is the referrer to the 
    // page that contains the tracking pixel, not the referrer for tracking 
    // pixel. 
    string documentReferer = Request.QueryString.Get("utmr"); 
    if (IsEmpty(documentReferer)) { 
     documentReferer = "-"; 
    } else { 
     documentReferer = HttpUtility.UrlDecode(documentReferer); 
    } 
    string documentPath = Request.QueryString.Get("utmp"); 
    if (IsEmpty(documentPath)) { 
     documentPath = ""; 
    } else { 
     documentPath = HttpUtility.UrlDecode(documentPath); 
    } 

    string account = Request.QueryString.Get("utmac"); 
    string userAgent = Request.UserAgent; 
    if (IsEmpty(userAgent)) { 
     userAgent = ""; 
    } 

    // Try and get visitor cookie from the request. 
    HttpCookie cookie = Request.Cookies.Get(CookieName); 

    string visitorId = GetVisitorId(
     Request.Headers.Get("X-DCMGUID"), account, userAgent, cookie); 

    // Always try and add the cookie to the response. 
    HttpCookie newCookie = new HttpCookie(CookieName); 
    newCookie.Value = visitorId; 
    newCookie.Expires = DateTime.Now + CookieUserPersistence; 
    newCookie.Path = CookiePath; 
    Response.Cookies.Add(newCookie); 

    string utmGifLocation = "http://www.google-analytics.com/__utm.gif"; 

    // Construct the gif hit url. 
    string utmUrl = utmGifLocation + "?" + 
     "utmwv=" + Version + 
     "&utmn=" + GetRandomNumber() + 
     "&utmhn=" + HttpUtility.UrlEncode(domainName) + 
     "&utmr=" + HttpUtility.UrlEncode(documentReferer) + 
     "&utmp=" + HttpUtility.UrlEncode(documentPath) + 
     "&utmac=" + account + 
     "&utmcc=__utma%3D999.999.999.999.999.1%3B" + 
     "&utmvid=" + visitorId + 
     "&utmip=" + GetIP(Request.ServerVariables["REMOTE_ADDR"]); 

    SendRequestToGoogleAnalytics(utmUrl); 

    // If the debug parameter is on, add a header to the response that contains 
    // the url that was used to contact Google Analytics. 
    if (Request.QueryString.Get("utmdebug") != null) { 
     Response.AddHeader("X-GA-MOBILE-URL", utmUrl); 
    } 
    // Finally write the gif data to the response. 
    WriteGifData(); 
    } 
</script><% TrackPageView(); %> 

有没有人遇到这个问题?我可以去哪里找出为什么没有被跟踪?在过去的几天里只有2次访问。 FWIW,该网站在Google Analytics中的状态确实有一个绿色的复选标记,看起来工作正常。

感谢您的帮助!

更新:更多信息:

看来它的跟踪,人。所有的视图都在它看起来像(即页面视图正在跟踪)。我想知道是否因为Web服务器正在服务映像?

回答

4

我查看了我们应用的Google Analytics页面设置,并深入了设置,然后进入状态,然后进入高级,然后将单选按钮更改为移动站点。从那里,它看起来像我们要为移动网站应用程序使用不同的帐号!也就是说,UA必须与MO交换,而不是典型的基于UA的帐号。这应该解决它!

相关问题