Tag: Google

  • Google Analytics Measurement Protocol – Track Events C#

    Recently I had a project that required to track events happening within the business layer and could not be tracked using JavaScript from the client. To do this a helper class was required in order to communicate with Google Analytics and track those extra events. Below you will find that class that can be used to do Page Tracking, Event Tracking, Ecommerce Tracking, Social Interactions and Exception Tracking within your C# code without requiring any JavaScript or any other script.

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace Spyriadis.net
    {
        public class GoogleTracker
        {
            private string googleURL = "http://www.google-analytics.com/collect";
            private string googleVersion = "1";
            private string googleTrackingID = "UA-XXXX-Y";
            private string googleClientID = "555";
    
            public GoogleTracker(string trackingID)
            {
                this.googleTrackingID = trackingID;
            }
    
            public void trackEvent(string category, string action, string label, string value)
            {
                Hashtable ht = baseValues();
    
                ht.Add("t", "event");                   // Event hit type
                ht.Add("ec", category);                 // Event Category. Required.
                ht.Add("ea", action);                   // Event Action. Required.
                if (label != null) ht.Add("el", label); // Event label.
                if (value != null) ht.Add("ev", value); // Event value.
    
                postData(ht);
            }
            public void trackPage(string hostname, string page, string title)
            {
                Hashtable ht = baseValues();
    
                ht.Add("t", "pageview");                // Pageview hit type.
                ht.Add("dh", hostname);                 // Document hostname.
                ht.Add("dp", page);                     // Page.
                ht.Add("dt", title);                    // Title.
    
                postData(ht);
            }
    
            public void ecommerceTransaction(string id, string affiliation, string revenue, string shipping, string tax, string currency)
            {
                Hashtable ht = baseValues();
    
                ht.Add("t", "transaction");       // Transaction hit type.
                ht.Add("ti", id);                 // transaction ID.            Required.
                ht.Add("ta", affiliation);        // Transaction affiliation.
                ht.Add("tr", revenue);            // Transaction revenue.
                ht.Add("ts", shipping);           // Transaction shipping.
                ht.Add("tt", tax);                // Transaction tax.
                ht.Add("cu", currency);           // Currency code.
    
                postData(ht);
            }
            public void ecommerceItem(string id, string name, string price, string quantity, string code, string category, string currency)
            {
                Hashtable ht = baseValues();
    
                ht.Add("t", "item");              // Item hit type.
                ht.Add("ti", id);                 // transaction ID.            Required.
                ht.Add("in", name);               // Item name.                 Required.
                ht.Add("ip", price);              // Item price.
                ht.Add("iq", quantity);           // Item quantity.
                ht.Add("ic", code);               // Item code / SKU.
                ht.Add("iv", category);           // Item variation / category.
                ht.Add("cu", currency);           // Currency code.
    
                postData(ht);
            }
    
            public void trackSocial(string action, string network, string target)
            {
                Hashtable ht = baseValues();
    
                ht.Add("t", "social");                // Social hit type.
                ht.Add("dh", action);                 // Social Action.         Required.
                ht.Add("dp", network);                // Social Network.        Required.
                ht.Add("dt", target);                 // Social Target.         Required.
    
                postData(ht);
            }
    
            public void trackException(string description, bool fatal)
            {
                Hashtable ht = baseValues();
    
                ht.Add("t", "exception");             // Exception hit type.
                ht.Add("dh", description);            // Exception description.         Required.
                ht.Add("dp", fatal ? "1" : "0");      // Exception is fatal?            Required.
    
                postData(ht);
            }
    
            private Hashtable baseValues()
            {
                Hashtable ht = new Hashtable();
                ht.Add("v", googleVersion);         // Version.
                ht.Add("tid", googleTrackingID);    // Tracking ID / Web property / Property ID.
                ht.Add("cid", googleClientID);      // Anonymous Client ID.
                return ht;
            }
            private bool postData(Hashtable values)
            {
                string data = "";
                foreach (var key in values.Keys)
                {
                    if (data != "") data += "&";
                    if (values[key] != null) data += key.ToString() + "=" + HttpUtility.UrlEncode(values[key].ToString());
                }
    
                using (var client = new WebClient())
                {
                    var result = client.UploadString(googleURL, "POST", data);
                }
    
                return true;
            }
        }
    }

    All you need to do afterwards initialize the class using the code below:

    Spyriadis.net.GoogleTracker ga = new Spyriadis.net.GoogleTracker("UA-XXXXXXX-X");

    And then you can use all the functions by Google as described here. For example to track an event you use:

    ga.trackEvent("Category", "Action", "label", "value");

    You can pass null values for all the non-required fields.

  • MobileMe free alternative with Google

    MobileMeI have been using MobileMe and paying 79$ for a couple of years now. Couple of days ago I show an article saying that you could sync all your Contact,Calendar and Notes with Gmail. This is done by connecting your iPhone to Gmail as an Exchange Server instead of as a regular Gmail Account.

    Before continuing further you should backup your iPhone since in many steps you will be prompted to delete all your contacts locally from the iPhone and you should do so!

    The first thing you need to do is connect your iPhone to your PC and sync your contacts with Google. After doing so you should be able to see all your contacts through Gmail. You must verify that the number of contacts match in order to be sure not to lose any contact. Having your contacts safe on Gmail and on your iTunes backup you remove any gmail account from the iPhone and setup a new one but instead of selecting Gmail Account you choose Microsoft Exchange. Give your Gmail credentials and when prompted for a server use m.google.com. Then select all three possible syncs (Mail,Contacts,Calendar) and continue. When prompted to delete all your contacts from your iPhone you should do so to avoid duplicate values.

    That’s all! You are now synced with Google!