Я хочу реализовать свой собственный идентификатор тестового клиента со следующим скриптом:
<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.
Лучший, Антон
Спасибо @EikePierstorff за подсказку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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