Внедрение собственного идентификатора клиента показывает расхождения по сравнению с идентификатором клиента GA

Я хочу реализовать свой собственный идентификатор тестового клиента со следующим скриптом:

<script>
(function(){

    var cookie = readCookie("customClientID"); 
    var storage = window.localStorage; 
    var storageClientID = storage.getItem("customClientID""); 
    var userID = userId(); 
    var agent = window.navigator.userAgent; 

    if (!cookie && !storageClientID){
        createCookie("customClientID"", userID, 2);
        storage.setItem("customClientID"", readCookie("customClientID"")); 
    }else if (cookie && !storageClientID){
        storage.setItem("customClientID"", readCookie("customClientID""));
    }else if (!cookie && storageClientID){
        createCookie("customClientID"", storageUserId, 2);
    }else{}

    //Create UUID
    function userId() {
        try{
            return new Date().getTime() + '.' + Math.random().toString(36).substring(5) + '.' + hash(agent);
        }catch(e){}
    }

     //Hash Function
    function hash(str){
        try{
            var hash = 0;
            for(var i = 0; i < str.length; i++){
                var charI = str.charCodeAt(i);
                hash = ((hash<<5)-hash)+charI;
                hash = hash & hash; // Convert to 32bit integer
                }   
                hash = hash & hash;
                hash = hash.toString().replace("-", "");
            return hash; 
    }catch(e){}
    }

    //Read Cookie https://www.quirksmode.org/
    function readCookie(name) {
        try{
            var nameEQ = name + " = ";
            var ca = document.cookie.split(';');
            for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
            }
            return null;
        }catch(e){}
    }

    //Create Cookie https://www.quirksmode.org/
    function createCookie(name,value,days) {
        try{
            if (days) {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires = "; expires = "+date.toGMTString();
            }else var expires = "";
                document.cookie = name+" = "+value+expires+"; path=/";
        }catch(e){}
    }
})();

Блок if проверяет, установлен ли cookie, и значение cookie также отображается в локальном хранилище. Если файл cookie не найден, устанавливается новый файл cookie со значением, созданным функцией userId ().

Чтобы получить значение customClientID из файла cookie, я использую внутреннюю переменную GTM First Party Cookie. Пользовательский тег HTML с приведенным выше сценарием активируется на всех страницах - Просмотр страницы.

Наконец, я установил настраиваемое измерение (пользовательская область) со значением переменной First Party Cookie (customClientID) в каждом теге.

Когда я сравниваю метрику пользователей исходного идентификатора клиента GA, я получаю 1 пользователя для каждого идентификатора клиента, который является правильным. Однако, если я сравниваю customClientID в настраиваемом отчете с тем же диапазоном дат, например. однажды я получаю много пользователей с одним и тем же customClientID. Также имеется меньше пользователей по сравнению с исходным ClientID.

У нас веб-сайт с высокой посещаемостью, поэтому мое первое предположение состоит в том, что сценарий, возможно, слишком медленный, чтобы обрабатывать большое количество пользователей, входящих и просматривающих одновременно. Многие пользователи получат один и тот же customClientID.

Второе предположение заключается в том, что специальный параметр следует устанавливать только в теге просмотра страницы.

Надеюсь, вы понимаете мою проблему и заранее большое спасибо!

PS: Я тоже выложил сюда https://productforums.google.com/forum/#!topic/tag-manager/syet129zIqI;context-place=forum/tag-manager.

Лучший, Антон

«сценарий, возможно, слишком медленный, чтобы обрабатывать ввод большого количества пользователей» - Javascript запускается на клиенте, поэтому он всегда работает с одним пользователем.

Eike Pierstorff 13.03.2018 14:53

Спасибо @EikePierstorff за подсказку.

Toni2708 13.03.2018 16:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
30
0

Другие вопросы по теме