2010-08-04 2 views
1

이 문제가있는 사람이 있습니까? 데이터를 추적하지 않는 모바일 웹 사이트의 Google 웹 로그 분석

우리는 Google 웹 로그 분석 자바 스크립트 기반 추적을 사용할 수있는 모바일 사이트를, 그래서 우리가 여기있는 솔루션을 사용해야 그러나 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 웹 로그 분석의 상태가 녹색 확인 표시가되어 정상적으로 작동하는 것으로 보입니다.

도움을 주셔서 감사합니다.

UPDATE : 추가 정보 :

그것이 사람으로 추적 있어요 나타납니다. 모든보기가 표시됩니다 (예 : 페이지보기가 추적 중입니다). 나는 그것이 웹 서버가 이미지를 제공하고 있기 때문에 그것이 었는지 궁금하다.

답변

4

Google 애널리틱스의 Google 애널리틱스 페이지 설정을 살펴보고 설정, 상태, 고급으로 차례로 이동 한 다음 라디오 버튼을 모바일 사이트로 변경했습니다. 거기에서 모바일 웹 사이트 앱에 다른 계정 번호를 사용하는 것 같습니다. 즉, 일반적인 UA 기반 계정 번호 대신 UA를 MO와 교환해야합니다. 그걸 고쳐야 해!

관련 문제