Exemplo n.º 1
0
 void OnLevelWasLoaded(int level)
 {
     if (!sceneName.Equals(Application.loadedLevelName))
     {
         //Debug.Log("AnalyticsTesting: app screen event - switch to scene " + Application.loadedLevelName);
         sceneName = Application.loadedLevelName;
         GoogleUniversalAnalytics gua = GoogleUniversalAnalytics.Instance;
         gua.sendAppScreenHit(newLevelAnalyticsEventPrefix + sceneName);
     }
 }
Exemplo n.º 2
0
    void Awake()
    {
        //Debug.Log("AnalyticsTesting Awake()");

        // prevent additional Analytics objects being created on level reloads
        if (instance)
        {
            DestroyImmediate(this.gameObject);
            return;
        }
        instance = this;
        DontDestroyOnLoad(gameObject);

        string       clientID        = "";
        const string clientIdPrefKey = "GoogleUniversalAnalytics_clientID";

        // If you want to force a new client ID for temporary testing,
        // uncomment following line for a single run:
        //////// PlayerPrefs.DeleteKey(clientIdPrefKey);
        // (remember to disable it again)

        if (PlayerPrefs.HasKey(clientIdPrefKey))
        {
            clientID = PlayerPrefs.GetString(clientIdPrefKey);
        }
        if (clientID.Length < 8 || !PlayerPrefs.HasKey(clientIdPrefKey))
        {
            // Need to generate unique & anonymous client ID for analytics.
            // SystemInfo.deviceUniqueIdentifier would be nice for this, but
            // use of it is abandoned as it can lead to additional required
            // permissions or submission approval problems on some platforms.
            // So we only use a combination of timestamp, random value and
            // some sources of device-specific data to make up an anonymous
            // id which is also sufficiently unique.
            int deviceData = SystemInfo.graphicsDeviceName.GetHashCode() ^ SystemInfo.graphicsDeviceVersion.GetHashCode() ^ SystemInfo.operatingSystem.GetHashCode() ^ SystemInfo.processorType.GetHashCode();
            clientID = getPOSIXTime().ToString("X8") + Random.Range(0, 0x7fffffff).ToString("x8") + deviceData.ToString("X8");

            //Debug.Log("Created client id for analytics: " + clientID);
            PlayerPrefs.SetString(clientIdPrefKey, clientID);
            PlayerPrefs.Save();
        }

        string offlineCacheFilePath = ""; // empty string=disable (in GUA class)

        if (useOfflineCache && offlineCacheFileName != null && offlineCacheFileName.Length > 0)
        {
            offlineCacheFilePath = Application.persistentDataPath + '/' + offlineCacheFileName;
            //Debug.Log("Full path for offline cache: " + offlineCacheFilePath);
        }

        //bool useStringEscaping = true; // see the docs about this
        if (gua == null)
        {
            gua = GoogleUniversalAnalytics.Instance;
        }
        gua.initialize(this, trackingID, clientID, appName, appVersion, useHTTPS, offlineCacheFilePath);
        //gua.setStringEscaping(useStringEscaping); // see the docs about this

        if (PlayerPrefs.HasKey(disableAnalyticsByUserOptOutPrefKey))
        {
            gua.analyticsDisabled = (PlayerPrefs.GetInt(disableAnalyticsByUserOptOutPrefKey, 0) != 0);
        }

        if (!gua.analyticsDisabled)
        {
            // Start by sending a hit with some generic info, including an app
            // screen hit with the first level name, since first scene doesn't get
            // automatically call to OnLevelWasLoaded.
            gua.beginHit(GoogleUniversalAnalytics.HitType.Screenview);
            gua.addScreenResolution(Screen.currentResolution.width, Screen.currentResolution.height);
            gua.addViewportSize(Screen.width, Screen.height);
            gua.addScreenName(newLevelAnalyticsEventPrefix + Application.loadedLevelName);
            gua.sendHit();


            // Next, client SystemInfo statistics are submitted ONCE on the first
            // launch when internet is reachable.

            // If you make a few version upgrades and at some point want to get
            // fresh statistics of your active users, update the category string
            // below and after next update users will re-submit SystemInfo once.
            const string category = "SystemInfo_since_v001";
            const string prefKey  = "GoogleUniversalAnalytics_" + category;

            // Existing pref key could be deleted with following command:
            //// PlayerPrefs.DeleteKey(prefKey);
            // Warning: Do not enable that code row here (except for single time
            //          testing). Otherwise all following single time statistics
            //          hits would be sent on each launch.

            if (sendSystemInfo &&
                (useOfflineCache || gua.internetReachable) &&
                !PlayerPrefs.HasKey(prefKey))
            {
                sendSystemInfoEvent(category, "ScreenResolution", "" + Screen.currentResolution.width + "x" + Screen.currentResolution.height);
                sendSystemInfoEvent(category, "ViewportSize", "" + Screen.width + "x" + Screen.height);
                sendSystemInfoEvent(category, "ScreenDPI", ((int)Screen.dpi).ToString(), (int)Screen.dpi);

                sendSystemInfoEvent(category, "operatingSystem", SystemInfo.operatingSystem);
                sendSystemInfoEvent(category, "processorType", SystemInfo.processorType);
                sendSystemInfoEvent(category, "processorCount", SystemInfo.processorCount.ToString(), SystemInfo.processorCount);
                // round down to 128MB chunks for label
                sendSystemInfoEvent(category, "systemMemorySize", (128 * (SystemInfo.systemMemorySize / 128)).ToString(), SystemInfo.systemMemorySize);
                // round down to 16MB chunks for label
                sendSystemInfoEvent(category, "graphicsMemorySize", (16 * (SystemInfo.graphicsMemorySize / 16)).ToString(), SystemInfo.graphicsMemorySize);
                sendSystemInfoEvent(category, "graphicsDeviceName", SystemInfo.graphicsDeviceName);
                sendSystemInfoEvent(category, "graphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
                sendSystemInfoEvent(category, "graphicsDeviceID", SystemInfo.graphicsDeviceID.ToString(), SystemInfo.graphicsDeviceID);
                sendSystemInfoEvent(category, "graphicsDeviceVendorID", SystemInfo.graphicsDeviceVendorID.ToString(), SystemInfo.graphicsDeviceVendorID);
                sendSystemInfoEvent(category, "graphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
                sendSystemInfoEvent(category, "graphicsShaderLevel", SystemInfo.graphicsShaderLevel.ToString(), SystemInfo.graphicsShaderLevel);
#if UNITY_3_5 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
                // (graphicsPixelFillrate is not supported on Unity 5.0+)
                // round down to chunks for label (10-5000 MPix depending on value range)
                int pixelFillrateChunkSize = 5000;
                if (SystemInfo.graphicsPixelFillrate < 40000)
                {
                    pixelFillrateChunkSize = 2000;
                }
                if (SystemInfo.graphicsPixelFillrate < 10000)
                {
                    pixelFillrateChunkSize = 1000;
                }
                else if (SystemInfo.graphicsPixelFillrate < 4000)
                {
                    pixelFillrateChunkSize = 500;
                }
                else if (SystemInfo.graphicsPixelFillrate < 1300)
                {
                    pixelFillrateChunkSize = 100;
                }
                else if (SystemInfo.graphicsPixelFillrate < 200)
                {
                    pixelFillrateChunkSize = 20;
                }
                else if (SystemInfo.graphicsPixelFillrate < 100)
                {
                    pixelFillrateChunkSize = 10;
                }
                sendSystemInfoEvent(category, "graphicsPixelFillrate", (pixelFillrateChunkSize * (SystemInfo.graphicsPixelFillrate / pixelFillrateChunkSize)).ToString(), SystemInfo.graphicsPixelFillrate);
#else // or Unity 5.0+:
                // New additions in Unity 5.0+:
                sendSystemInfoEvent(category, "graphicsMultiThreaded", SystemInfo.graphicsMultiThreaded ? "yes" : "no", SystemInfo.graphicsMultiThreaded ? 1 : 0);
#endif // Unity 5.0+
                sendSystemInfoEvent(category, "deviceType", SystemInfo.deviceType.ToString());
                // round down to 512 chunks for label
#if !UNITY_3_5
                sendSystemInfoEvent(category, "maxTextureSize", (512 * (SystemInfo.maxTextureSize / 512)).ToString(), SystemInfo.maxTextureSize);
                sendSystemInfoEvent(category, "supports3DTextures", SystemInfo.supports3DTextures ? "yes" : "no", SystemInfo.supports3DTextures ? 1 : 0);
                sendSystemInfoEvent(category, "supportsComputeShaders", SystemInfo.supportsComputeShaders ? "yes" : "no", SystemInfo.supportsComputeShaders ? 1 : 0);
                sendSystemInfoEvent(category, "supportsInstancing", SystemInfo.supportsInstancing ? "yes" : "no", SystemInfo.supportsInstancing ? 1 : 0);
                sendSystemInfoEvent(category, "npotSupport", SystemInfo.npotSupport.ToString());
#endif
                sendSystemInfoEvent(category, "supportsShadows", SystemInfo.supportsShadows ? "yes" : "no", SystemInfo.supportsShadows ? 1 : 0);
                sendSystemInfoEvent(category, "supportsRenderTextures", SystemInfo.supportsRenderTextures ? "yes" : "no", SystemInfo.supportsRenderTextures ? 1 : 0);
                sendSystemInfoEvent(category, "supportedRenderTargetCount", SystemInfo.supportedRenderTargetCount.ToString(), SystemInfo.supportedRenderTargetCount);
                sendSystemInfoEvent(category, "deviceModel", SystemInfo.deviceModel);
                sendSystemInfoEvent(category, "supportsAccelerometer", SystemInfo.supportsAccelerometer ? "yes" : "no", SystemInfo.supportsAccelerometer ? 1 : 0);
                sendSystemInfoEvent(category, "supportsGyroscope", SystemInfo.supportsGyroscope ? "yes" : "no", SystemInfo.supportsGyroscope ? 1 : 0);
                sendSystemInfoEvent(category, "supportsLocationService", SystemInfo.supportsLocationService ? "yes" : "no", SystemInfo.supportsLocationService ? 1 : 0);
                sendSystemInfoEvent(category, "supportsVibration", SystemInfo.supportsVibration ? "yes" : "no", SystemInfo.supportsVibration ? 1 : 0);
                sendSystemInfoEvent(category, "supportsImageEffects", SystemInfo.supportsImageEffects ? "yes" : "no", SystemInfo.supportsImageEffects ? 1 : 0);
                PlayerPrefs.SetInt(prefKey, getPOSIXTime());
                PlayerPrefs.Save();
            } // sendSystemInfo
        }     // !gua.analyticsDisabled

        if (sendExceptions)
        {
            Application.RegisterLogCallback(Callback_HandleLog);
        }
    }     // Awake
Exemplo n.º 3
0
    void Awake()
    {
        //Debug.Log("AnalyticsTesting Awake()");

        // prevent additional Analytics objects being created on level reloads
        if (instance)
        {
            DestroyImmediate(this.gameObject);
            return;
        }
        instance = this;
        DontDestroyOnLoad(gameObject);

        string clientID = "";
        const string clientIdPrefKey = "GoogleUniversalAnalytics_clientID";
        // If you want to force a new client ID for temporary testing,
        // uncomment following line for a single run:
        //////// PlayerPrefs.DeleteKey(clientIdPrefKey);
        // (remember to disable it again)

        if (PlayerPrefs.HasKey(clientIdPrefKey))
            clientID = PlayerPrefs.GetString(clientIdPrefKey);
        if (clientID.Length < 8 || !PlayerPrefs.HasKey(clientIdPrefKey))
        {
            // Need to generate unique & anonymous client ID for analytics.
            // SystemInfo.deviceUniqueIdentifier would be nice for this, but
            // use of it is abandoned as it can lead to additional required
            // permissions or submission approval problems on some platforms.
            // So we only use a combination of timestamp, random value and
            // some sources of device-specific data to make up an anonymous
            // id which is also sufficiently unique.
            int deviceData = SystemInfo.graphicsDeviceName.GetHashCode() ^ SystemInfo.graphicsDeviceVersion.GetHashCode() ^ SystemInfo.operatingSystem.GetHashCode() ^ SystemInfo.processorType.GetHashCode();
            clientID = getPOSIXTime().ToString("X8") + Random.Range(0, 0x7fffffff).ToString("x8") + deviceData.ToString("X8");

            //Debug.Log("Created client id for analytics: " + clientID);
            PlayerPrefs.SetString(clientIdPrefKey, clientID);
            PlayerPrefs.Save();
        }

        string offlineCacheFilePath = ""; // empty string=disable (in GUA class)
        if (useOfflineCache && offlineCacheFileName != null && offlineCacheFileName.Length > 0)
        {
            offlineCacheFilePath = Application.persistentDataPath + '/' + offlineCacheFileName;
            //Debug.Log("Full path for offline cache: " + offlineCacheFilePath);
        }

        //bool useStringEscaping = true; // see the docs about this
        if (gua == null)
            gua = GoogleUniversalAnalytics.Instance;
        gua.initialize(this, trackingID, clientID, appName, appVersion, useHTTPS, offlineCacheFilePath);
        //gua.setStringEscaping(useStringEscaping); // see the docs about this

        if (gua.shouldWarnAboutUsingExampleTrackingProperty())
        {
            GameObject guiWarningGO = new GameObject();
            GUIText guiWarning = guiWarningGO.AddComponent<GUIText>();
            guiWarning.name = "GUA Tracking Property ID WARNING";
            guiWarning.text = "GUA WARNING: Wrong analytics property ID!"; // USE YOUR ANALYTICS TRACKING PROPERTY ID FROM GOOGLE ANALYTICS
            guiWarning.fontSize = 16;
	    #if !UNITY_3_5
            guiWarning.color = Color.red;
	    #endif
            guiWarning.fontStyle = FontStyle.Bold;
            guiWarning.anchor = TextAnchor.UpperCenter;
            guiWarning.transform.position = new Vector3(0.5f, 0.9f);
        }

        if (PlayerPrefs.HasKey(disableAnalyticsByUserOptOutPrefKey))
        {
            gua.analyticsDisabled = (PlayerPrefs.GetInt(disableAnalyticsByUserOptOutPrefKey, 0) != 0);
        }

        if (!gua.analyticsDisabled)
        {
            // Start by sending a hit with some generic info, including an app
            // screen hit with the first level name, since first scene doesn't get
            // automatically call to OnLevelWasLoaded.
            gua.beginHit(GoogleUniversalAnalytics.HitType.Screenview);
            gua.addScreenResolution(Screen.currentResolution.width, Screen.currentResolution.height);
            gua.addViewportSize(Screen.width, Screen.height);
            gua.addScreenName(newLevelAnalyticsEventPrefix + Application.loadedLevelName);
            gua.sendHit();


            // Next, client SystemInfo statistics are submitted ONCE on the first
            // launch when internet is reachable.

            // If you make a few version upgrades and at some point want to get
            // fresh statistics of your active users, update the category string
            // below and after next update users will re-submit SystemInfo once.
            const string category = "SystemInfo_since_v001";
            const string prefKey = "GoogleUniversalAnalytics_" + category;

            // Existing pref key could be deleted with following command:
            //// PlayerPrefs.DeleteKey(prefKey);
            // Warning: Do not enable that code row here (except for single time
            //          testing). Otherwise all following single time statistics
            //          hits would be sent on each launch.

            if (sendSystemInfo &&
                (useOfflineCache || gua.internetReachable) &&
                !PlayerPrefs.HasKey(prefKey))
            {
                sendSystemInfoEvent(category, "ScreenResolution", "" + Screen.currentResolution.width + "x" + Screen.currentResolution.height);
                sendSystemInfoEvent(category, "ViewportSize", "" + Screen.width + "x" + Screen.height);
                sendSystemInfoEvent(category, "ScreenDPI", ((int)Screen.dpi).ToString(), (int)Screen.dpi);

                sendSystemInfoEvent(category, "operatingSystem", SystemInfo.operatingSystem);
                sendSystemInfoEvent(category, "processorType", SystemInfo.processorType);
                sendSystemInfoEvent(category, "processorCount", SystemInfo.processorCount.ToString(), SystemInfo.processorCount);
                // round down to 128MB chunks for label
                sendSystemInfoEvent(category, "systemMemorySize", (128 * (SystemInfo.systemMemorySize / 128)).ToString(), SystemInfo.systemMemorySize);
                // round down to 16MB chunks for label
                sendSystemInfoEvent(category, "graphicsMemorySize", (16 * (SystemInfo.graphicsMemorySize / 16)).ToString(), SystemInfo.graphicsMemorySize);
                sendSystemInfoEvent(category, "graphicsDeviceName", SystemInfo.graphicsDeviceName);
                sendSystemInfoEvent(category, "graphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
                sendSystemInfoEvent(category, "graphicsDeviceID", SystemInfo.graphicsDeviceID.ToString(), SystemInfo.graphicsDeviceID);
                sendSystemInfoEvent(category, "graphicsDeviceVendorID", SystemInfo.graphicsDeviceVendorID.ToString(), SystemInfo.graphicsDeviceVendorID);
                sendSystemInfoEvent(category, "graphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
                sendSystemInfoEvent(category, "graphicsShaderLevel", SystemInfo.graphicsShaderLevel.ToString(), SystemInfo.graphicsShaderLevel);
#               if UNITY_3_5 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6
                // (graphicsPixelFillrate is not supported on Unity 5.0+)
                // round down to chunks for label (10-5000 MPix depending on value range)
                int pixelFillrateChunkSize = 5000;
                if (SystemInfo.graphicsPixelFillrate < 40000)
                    pixelFillrateChunkSize = 2000;
                if (SystemInfo.graphicsPixelFillrate < 10000)
                    pixelFillrateChunkSize = 1000;
                else if (SystemInfo.graphicsPixelFillrate < 4000)
                    pixelFillrateChunkSize = 500;
                else if (SystemInfo.graphicsPixelFillrate < 1300)
                    pixelFillrateChunkSize = 100;
                else if (SystemInfo.graphicsPixelFillrate < 200)
                    pixelFillrateChunkSize = 20;
                else if (SystemInfo.graphicsPixelFillrate < 100)
                    pixelFillrateChunkSize = 10;
                sendSystemInfoEvent(category, "graphicsPixelFillrate", (pixelFillrateChunkSize * (SystemInfo.graphicsPixelFillrate / pixelFillrateChunkSize)).ToString(), SystemInfo.graphicsPixelFillrate);
#               else // or Unity 5.0+:
                // New additions in Unity 5.0+:
                sendSystemInfoEvent(category, "graphicsMultiThreaded", SystemInfo.graphicsMultiThreaded ? "yes" : "no", SystemInfo.graphicsMultiThreaded ? 1 : 0);
#               endif // Unity 5.0+
                sendSystemInfoEvent(category, "deviceType", SystemInfo.deviceType.ToString());
                // round down to 512 chunks for label
#               if !UNITY_3_5
                sendSystemInfoEvent(category, "maxTextureSize", (512 * (SystemInfo.maxTextureSize / 512)).ToString(), SystemInfo.maxTextureSize);
                sendSystemInfoEvent(category, "supports3DTextures", SystemInfo.supports3DTextures ? "yes" : "no", SystemInfo.supports3DTextures ? 1 : 0);
                sendSystemInfoEvent(category, "supportsComputeShaders", SystemInfo.supportsComputeShaders ? "yes" : "no", SystemInfo.supportsComputeShaders ? 1 : 0);
                sendSystemInfoEvent(category, "supportsInstancing", SystemInfo.supportsInstancing ? "yes" : "no", SystemInfo.supportsInstancing ? 1 : 0);
                sendSystemInfoEvent(category, "npotSupport", SystemInfo.npotSupport.ToString());
#               endif
                sendSystemInfoEvent(category, "supportsShadows", SystemInfo.supportsShadows ? "yes" : "no", SystemInfo.supportsShadows ? 1 : 0);
                sendSystemInfoEvent(category, "supportsRenderTextures", SystemInfo.supportsRenderTextures ? "yes" : "no", SystemInfo.supportsRenderTextures ? 1 : 0);
                sendSystemInfoEvent(category, "supportedRenderTargetCount", SystemInfo.supportedRenderTargetCount.ToString(), SystemInfo.supportedRenderTargetCount);
                sendSystemInfoEvent(category, "deviceModel", SystemInfo.deviceModel);
                sendSystemInfoEvent(category, "supportsAccelerometer", SystemInfo.supportsAccelerometer ? "yes" : "no", SystemInfo.supportsAccelerometer ? 1 : 0);
                sendSystemInfoEvent(category, "supportsGyroscope", SystemInfo.supportsGyroscope ? "yes" : "no", SystemInfo.supportsGyroscope ? 1 : 0);
                sendSystemInfoEvent(category, "supportsLocationService", SystemInfo.supportsLocationService ? "yes" : "no", SystemInfo.supportsLocationService ? 1 : 0);
                sendSystemInfoEvent(category, "supportsVibration", SystemInfo.supportsVibration ? "yes" : "no", SystemInfo.supportsVibration ? 1 : 0);
                sendSystemInfoEvent(category, "supportsImageEffects", SystemInfo.supportsImageEffects ? "yes" : "no", SystemInfo.supportsImageEffects ? 1 : 0);
                PlayerPrefs.SetInt(prefKey, getPOSIXTime());
                PlayerPrefs.Save();
            } // sendSystemInfo
        } // !gua.analyticsDisabled

        if (sendExceptions &&
            (!Application.isEditor || sendExceptionsAlsoFromEditor))
        {
#           if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 && !UNITY_4_6
            // Unity 5.0+:
            Application.logMessageReceived += Callback_HandleLog;
#           else
            Application.RegisterLogCallback(Callback_HandleLog);
#           endif
        }
Exemplo n.º 4
0
    void Awake()
    {
        //Debug.Log("AnalyticsTesting Awake()");

        // prevent additional Analytics objects being created on level reloads
        if (instance)
        {
            DestroyImmediate(this.gameObject);
            return;
        }
        instance = this;
        DontDestroyOnLoad(gameObject);

        string clientID = "";
        const string clientIdPrefKey = "GoogleUniversalAnalytics_clientID";
        // If you want to force a new client ID for temporary testing,
        // uncomment following line for a single run:
        //////// PlayerPrefs.DeleteKey(clientIdPrefKey);
        // (remember to disable it again)

        if (PlayerPrefs.HasKey(clientIdPrefKey))
            clientID = PlayerPrefs.GetString(clientIdPrefKey);
        if (clientID.Length < 8 || !PlayerPrefs.HasKey(clientIdPrefKey))
        {
            // Need to generate unique & anonymous client ID for analytics.
            #if UNITY_ANDROID
            // Don't use SystemInfo.deviceUniqueIdentifier on Android,
            // as it would add requirement of READ_PHONE_STATE permission.
            // So we only use self-generated timestamp + random value.
            //Debug.Log("Creating new Android clientID for analytics...");
            clientID = getPOSIXTime().ToString("X8") + Random.Range(0, 0x7fffffff).ToString("x8");
#else
            // On most platforms we use device unique identifier but
            // additionally shuffle a random value inside it to make
            // sure it's anonymous.
            char[] id = (Random.Range(0, 0x7fffffff).ToString("x8") + SystemInfo.deviceUniqueIdentifier).ToCharArray();
            for (int a = 0; a < 8; ++a)
            {
                char c = id[a];
                int idx = Random.Range(0, id.Length);
                id[a] = id[idx];
                id[idx] = c;
            }
            clientID = new string(id);
            #endif

            //Debug.Log("Created client id for analytics: " + clientID);
            PlayerPrefs.SetString(clientIdPrefKey, clientID);
            PlayerPrefs.Save();
        }

        //bool useStringEscaping = true; // see the docs about this
        if (gua == null)
            gua = GoogleUniversalAnalytics.Instance;
        gua.initialize(trackingID, clientID, appName, appVersion, useHTTPS);
        //gua.setStringEscaping(useStringEscaping); // see the docs about this

        if (PlayerPrefs.HasKey(disableAnalyticsByUserOptOutPrefKey))
        {
            gua.analyticsDisabled = (PlayerPrefs.GetInt(disableAnalyticsByUserOptOutPrefKey, 0) != 0);
        }

        if (!gua.analyticsDisabled)
        {
            // Start by sending a hit with some generic info, including an app
            // screen hit with the first level name, since first scene doesn't get
            // automatically call to OnLevelWasLoaded.
            gua.beginHit(GoogleUniversalAnalytics.HitType.Appview);
            gua.addApplicationVersion();
            gua.addScreenResolution(Screen.currentResolution.width, Screen.currentResolution.height);
            gua.addViewportSize(Screen.width, Screen.height);
#if !UNITY_METRO && !UNITY_WEBPLAYER && !UNITY_STANDALONE && !UNITY_3_5 && !UNITY_FLASH
            gua.addScreenColors(Handheld.use32BitDisplayBuffer ? 32 : 16);
#endif
            // Note: this adds language e.g. as "English", although Google API example has "en-us".
            gua.addUserLanguage(Application.systemLanguage.ToString());
            //gua.addCustomDimension(1, "ScreenDPI");
            //gua.addCustomMetric(1, (int)Screen.dpi);
            gua.addContentDescription(newLevelAnalyticsEventPrefix + Application.loadedLevelName);
            gua.sendHit();


            // Next, client SystemInfo statistics are submitted ONCE on the first
            // launch when internet is reachable.

            // If you make a few version upgrades and at some point want to get
            // fresh statistics of your active users, update the category string
            // below and after next update users will re-submit SystemInfo once.
            const string category = "SystemInfo_since_v001";
            const string prefKey = "GoogleUniversalAnalytics_" + category;

            // Existing pref key could be deleted with following command:
            //// PlayerPrefs.DeleteKey(prefKey);
            // Warning: Do not enable that code row here (except for single time
            //          testing). Otherwise all following single time statistics
            //          hits would be sent on each launch.

            if (Application.internetReachability != NetworkReachability.NotReachable &&
                !PlayerPrefs.HasKey(prefKey))
            {
                gua.sendEventHit(category, "ScreenDPI", ((int)Screen.dpi).ToString(), (int)Screen.dpi);

                gua.sendEventHit(category, "operatingSystem", SystemInfo.operatingSystem);
                gua.sendEventHit(category, "processorType", SystemInfo.processorType);
                gua.sendEventHit(category, "processorCount", SystemInfo.processorCount.ToString(), SystemInfo.processorCount);
                // round down to 128MB chunks for label
                gua.sendEventHit(category, "systemMemorySize", (128 * (SystemInfo.systemMemorySize / 128)).ToString(), SystemInfo.systemMemorySize);
                // round down to 16MB chunks for label
                gua.sendEventHit(category, "graphicsMemorySize", (16 * (SystemInfo.graphicsMemorySize / 16)).ToString(), SystemInfo.graphicsMemorySize);
                gua.sendEventHit(category, "graphicsDeviceName", SystemInfo.graphicsDeviceName);
                gua.sendEventHit(category, "graphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
                gua.sendEventHit(category, "graphicsDeviceID", SystemInfo.graphicsDeviceID.ToString(), SystemInfo.graphicsDeviceID);
                gua.sendEventHit(category, "graphicsDeviceVendorID", SystemInfo.graphicsDeviceVendorID.ToString(), SystemInfo.graphicsDeviceVendorID);
                gua.sendEventHit(category, "graphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
                gua.sendEventHit(category, "graphicsShaderLevel", SystemInfo.graphicsShaderLevel.ToString(), SystemInfo.graphicsShaderLevel);
                // round down to chunks for label (10-5000 MPix depending on value range)
                int pixelFillrateChunkSize = 5000;
                if (SystemInfo.graphicsPixelFillrate < 40000)
                    pixelFillrateChunkSize = 2000;
                if (SystemInfo.graphicsPixelFillrate < 10000)
                    pixelFillrateChunkSize = 1000;
                else if (SystemInfo.graphicsPixelFillrate < 4000)
                    pixelFillrateChunkSize = 500;
                else if (SystemInfo.graphicsPixelFillrate < 1300)
                    pixelFillrateChunkSize = 100;
                else if (SystemInfo.graphicsPixelFillrate < 200)
                    pixelFillrateChunkSize = 20;
                else if (SystemInfo.graphicsPixelFillrate < 100)
                    pixelFillrateChunkSize = 10;
                gua.sendEventHit(category, "graphicsPixelFillrate", (pixelFillrateChunkSize * (SystemInfo.graphicsPixelFillrate / pixelFillrateChunkSize)).ToString(), SystemInfo.graphicsPixelFillrate);
                gua.sendEventHit(category, "deviceType", SystemInfo.deviceType.ToString());
                // round down to 512 chunks for label
#if !UNITY_3_5
                gua.sendEventHit(category, "maxTextureSize", (512 * (SystemInfo.maxTextureSize / 512)).ToString(), SystemInfo.maxTextureSize);
                gua.sendEventHit(category, "supports3DTextures", SystemInfo.supports3DTextures ? "yes" : "no", SystemInfo.supports3DTextures ? 1 : 0);
                gua.sendEventHit(category, "supportsComputeShaders", SystemInfo.supportsComputeShaders ? "yes" : "no", SystemInfo.supportsComputeShaders ? 1 : 0);
                gua.sendEventHit(category, "supportsInstancing", SystemInfo.supportsInstancing ? "yes" : "no", SystemInfo.supportsInstancing ? 1 : 0);
                gua.sendEventHit(category, "npotSupport", SystemInfo.npotSupport.ToString());
#endif
                gua.sendEventHit(category, "supportsShadows", SystemInfo.supportsShadows ? "yes" : "no", SystemInfo.supportsShadows ? 1 : 0);
                gua.sendEventHit(category, "supportsRenderTextures", SystemInfo.supportsRenderTextures ? "yes" : "no", SystemInfo.supportsRenderTextures ? 1 : 0);
                gua.sendEventHit(category, "supportedRenderTargetCount", SystemInfo.supportedRenderTargetCount.ToString(), SystemInfo.supportedRenderTargetCount);

                gua.sendEventHit(category, "deviceModel", SystemInfo.deviceModel);

                gua.sendEventHit(category, "supportsAccelerometer", SystemInfo.supportsAccelerometer ? "yes" : "no", SystemInfo.supportsAccelerometer ? 1 : 0);
                gua.sendEventHit(category, "supportsGyroscope", SystemInfo.supportsGyroscope ? "yes" : "no", SystemInfo.supportsGyroscope ? 1 : 0);
                gua.sendEventHit(category, "supportsLocationService", SystemInfo.supportsLocationService ? "yes" : "no", SystemInfo.supportsLocationService ? 1 : 0);
                gua.sendEventHit(category, "supportsVibration", SystemInfo.supportsVibration ? "yes" : "no", SystemInfo.supportsVibration ? 1 : 0);
                gua.sendEventHit(category, "supportsImageEffects", SystemInfo.supportsImageEffects ? "yes" : "no", SystemInfo.supportsImageEffects ? 1 : 0);
                PlayerPrefs.SetInt(prefKey, getPOSIXTime());
                PlayerPrefs.Save();
            }

        } // !gua.analyticsDisabled
	} // Awake
    void Awake()
    {
        //Debug.Log("AnalyticsTesting Awake()");

        // prevent additional Analytics objects being created on level reloads
        if (instance)
        {
            DestroyImmediate(this.gameObject);
            return;
        }
        instance = this;
        DontDestroyOnLoad(gameObject);

        string clientID = "";
        const string clientIdPrefKey = "GoogleUniversalAnalytics_clientID";
        // If you want to force a new client ID for temporary testing,
        // uncomment following line for a single run:
        //////// PlayerPrefs.DeleteKey(clientIdPrefKey);
        // (remember to disable it again)

        if (PlayerPrefs.HasKey(clientIdPrefKey))
            clientID = PlayerPrefs.GetString(clientIdPrefKey);
        if (clientID.Length < 8 || !PlayerPrefs.HasKey(clientIdPrefKey))
        {
            // Need to generate unique & anonymous client ID for analytics.
            // SystemInfo.deviceUniqueIdentifier would be nice for this, but
            // use of it is abandoned as it can lead to additional required
            // permissions or submission approval problems on some platforms.
            // So we only use a combination of timestamp, random value and
            // some sources of device-specific data to make up an anonymous
            // id which is also sufficiently unique.
            int deviceData = SystemInfo.graphicsDeviceName.GetHashCode() ^ SystemInfo.graphicsDeviceVersion.GetHashCode() ^ SystemInfo.operatingSystem.GetHashCode() ^ SystemInfo.processorType.GetHashCode();
            clientID = getPOSIXTime().ToString("X8") + Random.Range(0, 0x7fffffff).ToString("x8") + deviceData.ToString("X8");

            //Debug.Log("Created client id for analytics: " + clientID);
            PlayerPrefs.SetString(clientIdPrefKey, clientID);
            PlayerPrefs.Save();
        }

        string offlineCacheFilePath = ""; // empty string=disable (in GUA class)
        if (useOfflineCache && offlineCacheFileName != null && offlineCacheFileName.Length > 0)
        {
            offlineCacheFilePath = Application.persistentDataPath + '/' + offlineCacheFileName;
            //Debug.Log("Full path for offline cache: " + offlineCacheFilePath);
        }

        //bool useStringEscaping = true; // see the docs about this
        if (gua == null)
            gua = GoogleUniversalAnalytics.Instance;
        gua.initialize(this, trackingID, clientID, appName, appVersion, useHTTPS, offlineCacheFilePath);
        //gua.setStringEscaping(useStringEscaping); // see the docs about this

        if (PlayerPrefs.HasKey(disableAnalyticsByUserOptOutPrefKey))
        {
            gua.analyticsDisabled = (PlayerPrefs.GetInt(disableAnalyticsByUserOptOutPrefKey, 0) != 0);
        }

        if (!gua.analyticsDisabled)
        {
            // Start by sending a hit with some generic info, including an app
            // screen hit with the first level name, since first scene doesn't get
            // automatically call to OnLevelWasLoaded.
            gua.beginHit(GoogleUniversalAnalytics.HitType.Screenview);
            gua.addScreenResolution(Screen.currentResolution.width, Screen.currentResolution.height);
#if !UNITY_METRO && !UNITY_WEBPLAYER && !UNITY_STANDALONE && !UNITY_3_5
            gua.addScreenColors(Handheld.use32BitDisplayBuffer ? 32 : 16);
#endif
            // Note: this adds language e.g. as "English", although Google API example has "en-us".
            gua.addUserLanguage(Application.systemLanguage.ToString());
            gua.addScreenName(newLevelAnalyticsEventPrefix + Application.loadedLevelName);
            gua.sendHit();


            // Next, client SystemInfo statistics are submitted ONCE on the first
            // launch when internet is reachable.

            // If you make a few version upgrades and at some point want to get
            // fresh statistics of your active users, update the category string
            // below and after next update users will re-submit SystemInfo once.
            const string category = "SystemInfo_since_v001";
            const string prefKey = "GoogleUniversalAnalytics_" + category;

            // Existing pref key could be deleted with following command:
            //// PlayerPrefs.DeleteKey(prefKey);
            // Warning: Do not enable that code row here (except for single time
            //          testing). Otherwise all following single time statistics
            //          hits would be sent on each launch.

            if ((useOfflineCache || gua.internetReachable) &&
                !PlayerPrefs.HasKey(prefKey))
            {
                gua.sendEventHit(category, "ScreenDPI", ((int)Screen.dpi).ToString(), (int)Screen.dpi);
                gua.sendEventHit(category, "ScreenResolution", "" + Screen.currentResolution.width + "x" + Screen.currentResolution.height);
                gua.sendEventHit(category, "ViewportSize", "" + Screen.width + "x" + Screen.height);

                gua.sendEventHit(category, "operatingSystem", SystemInfo.operatingSystem);
                gua.sendEventHit(category, "processorType", SystemInfo.processorType);
                gua.sendEventHit(category, "processorCount", SystemInfo.processorCount.ToString(), SystemInfo.processorCount);
                // round down to 128MB chunks for label
                gua.sendEventHit(category, "systemMemorySize", (128 * (SystemInfo.systemMemorySize / 128)).ToString(), SystemInfo.systemMemorySize);
                // round down to 16MB chunks for label
                gua.sendEventHit(category, "graphicsMemorySize", (16 * (SystemInfo.graphicsMemorySize / 16)).ToString(), SystemInfo.graphicsMemorySize);
                gua.sendEventHit(category, "graphicsDeviceName", SystemInfo.graphicsDeviceName);
                gua.sendEventHit(category, "graphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
                gua.sendEventHit(category, "graphicsDeviceID", SystemInfo.graphicsDeviceID.ToString(), SystemInfo.graphicsDeviceID);
                gua.sendEventHit(category, "graphicsDeviceVendorID", SystemInfo.graphicsDeviceVendorID.ToString(), SystemInfo.graphicsDeviceVendorID);
                gua.sendEventHit(category, "graphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
                gua.sendEventHit(category, "graphicsShaderLevel", SystemInfo.graphicsShaderLevel.ToString(), SystemInfo.graphicsShaderLevel);
                // round down to chunks for label (10-5000 MPix depending on value range)
                int pixelFillrateChunkSize = 5000;
                if (SystemInfo.graphicsPixelFillrate < 40000)
                    pixelFillrateChunkSize = 2000;
                if (SystemInfo.graphicsPixelFillrate < 10000)
                    pixelFillrateChunkSize = 1000;
                else if (SystemInfo.graphicsPixelFillrate < 4000)
                    pixelFillrateChunkSize = 500;
                else if (SystemInfo.graphicsPixelFillrate < 1300)
                    pixelFillrateChunkSize = 100;
                else if (SystemInfo.graphicsPixelFillrate < 200)
                    pixelFillrateChunkSize = 20;
                else if (SystemInfo.graphicsPixelFillrate < 100)
                    pixelFillrateChunkSize = 10;
                gua.sendEventHit(category, "graphicsPixelFillrate", (pixelFillrateChunkSize * (SystemInfo.graphicsPixelFillrate / pixelFillrateChunkSize)).ToString(), SystemInfo.graphicsPixelFillrate);
                gua.sendEventHit(category, "deviceType", SystemInfo.deviceType.ToString());
                // round down to 512 chunks for label
#if !UNITY_3_5
                gua.sendEventHit(category, "maxTextureSize", (512 * (SystemInfo.maxTextureSize / 512)).ToString(), SystemInfo.maxTextureSize);
                gua.sendEventHit(category, "supports3DTextures", SystemInfo.supports3DTextures ? "yes" : "no", SystemInfo.supports3DTextures ? 1 : 0);
                gua.sendEventHit(category, "supportsComputeShaders", SystemInfo.supportsComputeShaders ? "yes" : "no", SystemInfo.supportsComputeShaders ? 1 : 0);
                gua.sendEventHit(category, "supportsInstancing", SystemInfo.supportsInstancing ? "yes" : "no", SystemInfo.supportsInstancing ? 1 : 0);
                gua.sendEventHit(category, "npotSupport", SystemInfo.npotSupport.ToString());
#endif
                gua.sendEventHit(category, "supportsShadows", SystemInfo.supportsShadows ? "yes" : "no", SystemInfo.supportsShadows ? 1 : 0);
                gua.sendEventHit(category, "supportsRenderTextures", SystemInfo.supportsRenderTextures ? "yes" : "no", SystemInfo.supportsRenderTextures ? 1 : 0);
                gua.sendEventHit(category, "supportedRenderTargetCount", SystemInfo.supportedRenderTargetCount.ToString(), SystemInfo.supportedRenderTargetCount);
                gua.sendEventHit(category, "deviceModel", SystemInfo.deviceModel);
                gua.sendEventHit(category, "supportsAccelerometer", SystemInfo.supportsAccelerometer ? "yes" : "no", SystemInfo.supportsAccelerometer ? 1 : 0);
                gua.sendEventHit(category, "supportsGyroscope", SystemInfo.supportsGyroscope ? "yes" : "no", SystemInfo.supportsGyroscope ? 1 : 0);
                gua.sendEventHit(category, "supportsLocationService", SystemInfo.supportsLocationService ? "yes" : "no", SystemInfo.supportsLocationService ? 1 : 0);
                gua.sendEventHit(category, "supportsVibration", SystemInfo.supportsVibration ? "yes" : "no", SystemInfo.supportsVibration ? 1 : 0);
                gua.sendEventHit(category, "supportsImageEffects", SystemInfo.supportsImageEffects ? "yes" : "no", SystemInfo.supportsImageEffects ? 1 : 0);
                PlayerPrefs.SetInt(prefKey, getPOSIXTime());
                PlayerPrefs.Save();
            }
        } // !gua.analyticsDisabled
	} // Awake
Exemplo n.º 6
0
    void Awake()
    {
        //Debug.Log("AnalyticsTesting Awake()");

        // prevent additional Analytics objects being created on level reloads
        if (instance)
        {
            DestroyImmediate(this.gameObject);
            return;
        }
        instance = this;
        DontDestroyOnLoad(gameObject);

        string       clientID        = "";
        const string clientIdPrefKey = "GoogleUniversalAnalytics_clientID";

        // If you want to force a new client ID for temporary testing,
        // uncomment following line for a single run:
        //////// PlayerPrefs.DeleteKey(clientIdPrefKey);
        // (remember to disable it again)

        if (PlayerPrefs.HasKey(clientIdPrefKey))
        {
            clientID = PlayerPrefs.GetString(clientIdPrefKey);
        }
        if (clientID.Length < 8 || !PlayerPrefs.HasKey(clientIdPrefKey))
        {
            // Need to generate unique & anonymous client ID for analytics.
            #if UNITY_ANDROID
            // Don't use SystemInfo.deviceUniqueIdentifier on Android,
            // as it would add requirement of READ_PHONE_STATE permission.
            // So we only use self-generated timestamp + random value.
            //Debug.Log("Creating new Android clientID for analytics...");
            clientID = getPOSIXTime().ToString("X8") + Random.Range(0, 0x7fffffff).ToString("x8");
#else
            // On most platforms we use device unique identifier but
            // additionally shuffle a random value inside it to make
            // sure it's anonymous.
            char[] id = (Random.Range(0, 0x7fffffff).ToString("x8") + SystemInfo.deviceUniqueIdentifier).ToCharArray();
            for (int a = 0; a < 8; ++a)
            {
                char c   = id[a];
                int  idx = Random.Range(0, id.Length);
                id[a]   = id[idx];
                id[idx] = c;
            }
            clientID = new string(id);
            #endif

            //Debug.Log("Created client id for analytics: " + clientID);
            PlayerPrefs.SetString(clientIdPrefKey, clientID);
            PlayerPrefs.Save();
        }

        //bool useStringEscaping = true; // see the docs about this
        if (gua == null)
        {
            gua = GoogleUniversalAnalytics.Instance;
        }
        gua.initialize(trackingID, clientID, appName, appVersion, useHTTPS);
        //gua.setStringEscaping(useStringEscaping); // see the docs about this

        if (PlayerPrefs.HasKey(disableAnalyticsByUserOptOutPrefKey))
        {
            gua.analyticsDisabled = (PlayerPrefs.GetInt(disableAnalyticsByUserOptOutPrefKey, 0) != 0);
        }

        if (!gua.analyticsDisabled)
        {
            // Start by sending a hit with some generic info, including an app
            // screen hit with the first level name, since first scene doesn't get
            // automatically call to OnLevelWasLoaded.
            gua.beginHit(GoogleUniversalAnalytics.HitType.Appview);
            gua.addApplicationVersion();
            gua.addScreenResolution(Screen.currentResolution.width, Screen.currentResolution.height);
            gua.addViewportSize(Screen.width, Screen.height);
#if !UNITY_METRO && !UNITY_WEBPLAYER && !UNITY_STANDALONE && !UNITY_3_5 && !UNITY_FLASH
            gua.addScreenColors(Handheld.use32BitDisplayBuffer ? 32 : 16);
#endif
            // Note: this adds language e.g. as "English", although Google API example has "en-us".
            gua.addUserLanguage(Application.systemLanguage.ToString());
            //gua.addCustomDimension(1, "ScreenDPI");
            //gua.addCustomMetric(1, (int)Screen.dpi);
            gua.addContentDescription(newLevelAnalyticsEventPrefix + Application.loadedLevelName);
            gua.sendHit();


            // Next, client SystemInfo statistics are submitted ONCE on the first
            // launch when internet is reachable.

            // If you make a few version upgrades and at some point want to get
            // fresh statistics of your active users, update the category string
            // below and after next update users will re-submit SystemInfo once.
            const string category = "SystemInfo_since_v001";
            const string prefKey  = "GoogleUniversalAnalytics_" + category;

            // Existing pref key could be deleted with following command:
            //// PlayerPrefs.DeleteKey(prefKey);
            // Warning: Do not enable that code row here (except for single time
            //          testing). Otherwise all following single time statistics
            //          hits would be sent on each launch.

            if (Application.internetReachability != NetworkReachability.NotReachable &&
                !PlayerPrefs.HasKey(prefKey))
            {
                gua.sendEventHit(category, "ScreenDPI", ((int)Screen.dpi).ToString(), (int)Screen.dpi);

                gua.sendEventHit(category, "operatingSystem", SystemInfo.operatingSystem);
                gua.sendEventHit(category, "processorType", SystemInfo.processorType);
                gua.sendEventHit(category, "processorCount", SystemInfo.processorCount.ToString(), SystemInfo.processorCount);
                // round down to 128MB chunks for label
                gua.sendEventHit(category, "systemMemorySize", (128 * (SystemInfo.systemMemorySize / 128)).ToString(), SystemInfo.systemMemorySize);
                // round down to 16MB chunks for label
                gua.sendEventHit(category, "graphicsMemorySize", (16 * (SystemInfo.graphicsMemorySize / 16)).ToString(), SystemInfo.graphicsMemorySize);
                gua.sendEventHit(category, "graphicsDeviceName", SystemInfo.graphicsDeviceName);
                gua.sendEventHit(category, "graphicsDeviceVendor", SystemInfo.graphicsDeviceVendor);
                gua.sendEventHit(category, "graphicsDeviceID", SystemInfo.graphicsDeviceID.ToString(), SystemInfo.graphicsDeviceID);
                gua.sendEventHit(category, "graphicsDeviceVendorID", SystemInfo.graphicsDeviceVendorID.ToString(), SystemInfo.graphicsDeviceVendorID);
                gua.sendEventHit(category, "graphicsDeviceVersion", SystemInfo.graphicsDeviceVersion);
                gua.sendEventHit(category, "graphicsShaderLevel", SystemInfo.graphicsShaderLevel.ToString(), SystemInfo.graphicsShaderLevel);
                // round down to chunks for label (10-5000 MPix depending on value range)
                int pixelFillrateChunkSize = 5000;
                if (SystemInfo.graphicsPixelFillrate < 40000)
                {
                    pixelFillrateChunkSize = 2000;
                }
                if (SystemInfo.graphicsPixelFillrate < 10000)
                {
                    pixelFillrateChunkSize = 1000;
                }
                else if (SystemInfo.graphicsPixelFillrate < 4000)
                {
                    pixelFillrateChunkSize = 500;
                }
                else if (SystemInfo.graphicsPixelFillrate < 1300)
                {
                    pixelFillrateChunkSize = 100;
                }
                else if (SystemInfo.graphicsPixelFillrate < 200)
                {
                    pixelFillrateChunkSize = 20;
                }
                else if (SystemInfo.graphicsPixelFillrate < 100)
                {
                    pixelFillrateChunkSize = 10;
                }
                gua.sendEventHit(category, "graphicsPixelFillrate", (pixelFillrateChunkSize * (SystemInfo.graphicsPixelFillrate / pixelFillrateChunkSize)).ToString(), SystemInfo.graphicsPixelFillrate);
                gua.sendEventHit(category, "deviceType", SystemInfo.deviceType.ToString());
                // round down to 512 chunks for label
#if !UNITY_3_5
                gua.sendEventHit(category, "maxTextureSize", (512 * (SystemInfo.maxTextureSize / 512)).ToString(), SystemInfo.maxTextureSize);
                gua.sendEventHit(category, "supports3DTextures", SystemInfo.supports3DTextures ? "yes" : "no", SystemInfo.supports3DTextures ? 1 : 0);
                gua.sendEventHit(category, "supportsComputeShaders", SystemInfo.supportsComputeShaders ? "yes" : "no", SystemInfo.supportsComputeShaders ? 1 : 0);
                gua.sendEventHit(category, "supportsInstancing", SystemInfo.supportsInstancing ? "yes" : "no", SystemInfo.supportsInstancing ? 1 : 0);
                gua.sendEventHit(category, "npotSupport", SystemInfo.npotSupport.ToString());
#endif
                gua.sendEventHit(category, "supportsShadows", SystemInfo.supportsShadows ? "yes" : "no", SystemInfo.supportsShadows ? 1 : 0);
                gua.sendEventHit(category, "supportsRenderTextures", SystemInfo.supportsRenderTextures ? "yes" : "no", SystemInfo.supportsRenderTextures ? 1 : 0);
                gua.sendEventHit(category, "supportedRenderTargetCount", SystemInfo.supportedRenderTargetCount.ToString(), SystemInfo.supportedRenderTargetCount);

                gua.sendEventHit(category, "deviceModel", SystemInfo.deviceModel);

                gua.sendEventHit(category, "supportsAccelerometer", SystemInfo.supportsAccelerometer ? "yes" : "no", SystemInfo.supportsAccelerometer ? 1 : 0);
                gua.sendEventHit(category, "supportsGyroscope", SystemInfo.supportsGyroscope ? "yes" : "no", SystemInfo.supportsGyroscope ? 1 : 0);
                gua.sendEventHit(category, "supportsLocationService", SystemInfo.supportsLocationService ? "yes" : "no", SystemInfo.supportsLocationService ? 1 : 0);
                gua.sendEventHit(category, "supportsVibration", SystemInfo.supportsVibration ? "yes" : "no", SystemInfo.supportsVibration ? 1 : 0);
                gua.sendEventHit(category, "supportsImageEffects", SystemInfo.supportsImageEffects ? "yes" : "no", SystemInfo.supportsImageEffects ? 1 : 0);
                PlayerPrefs.SetInt(prefKey, getPOSIXTime());
                PlayerPrefs.Save();
            }
        } // !gua.analyticsDisabled
    }     // Awake