2012-02-18 4 views
3

Я хочу отслеживать офлайн-события с помощью Google Analytics и локального хранилища. это мой код:Последовательные удары GA удаляются

var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-27966345-1']); 
    _gaq.push(['_setDomainName', 'none']); 
    _gaq.push(['_setSessionCookieTimeout',10]); 
    _gaq.push(['_setSampleRate', '400']); 
    _gaq.push(['_trackPageview']); 
    (function() { 
     var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async   = true; 
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www')  + '.google-analytics.com/ga.js'; 
     var s = document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(ga, s); 
    })(); 

Я просто сохранить события в локальном хранилище, и когда пользователь вернуться онлайн Я пытаюсь отправить событие в Google в течение, но когда я сравниваю мой счетчик с просмотрами страниц, что я вижу в режиме реального времени (Google Analytics) Я не понимаю, почему они разные. Я думаю, что речь идет о частоте опроса Google или о чем-то, потому что я тестирую ее много раз, и я вижу разные результаты, иногда результаты правильные, но иногда имеют 1000 или более различие.

Вот мой код для отправки событий:

 while(ctr>0){ 
     if(sd==0){ 
      sd=1; 
      alert(ctr); 
     } 
     // 
     if(flag==0)break; 
     var name='tosend'; 
     var tosend_action=localStorage.getItem(name+'action'+ctr); 
     var tosend_label=localStorage.getItem(name+'label'+ctr); 
     var tosend_value=localStorage.getItem(name+'value'+ctr); 
     _gaq.push(['_trackEvent',value,tosend_action,tosend_label+"_val:"+tosend_value,tosend_value]); 
     _gaq.push(['_trackPageview',name+'value'+ctr]); 
     localStorage.removeItem(name+'action'+ctr); 
     localStorage.removeItem(name+'label'+ctr); 
     localStorage.removeItem(name+'value'+ctr); 
     ctr=Number(ctr)-1; 
     localStorage.removeItem('counter'); 
     localStorage.setItem('counter',ctr); 
     ctr=localStorage.getItem('counter'); 
     } 

} 

p.s: флаг является моим переменным, чтобы увидеть, если пользователь находится в сети или нет.

+0

метод _setSampleRate должен быть процент. Не имеет смысла устанавливать его в нечто большее, чем '100 '. Кстати, '' 100 '' является значением по умолчанию, поэтому вам совсем не нужно его устанавливать. – Eduardo

+0

Сколько хитов вы отправляете в GA не чаще, когда пользователь выходит в Интернет. Вы знаете, что есть предел в 10 последовательных ударов? – Eduardo

+1

Почему вы устанавливаете тайм-аут cookie сеанса на 10 мс? Это, скорее всего, будет охватывать новый визит на каждом просмотре страниц. Это, вероятно, не то, что вы хотите. – Eduardo

ответ

7

Google будет оценивать лимит вас на следующих событиях, которые вы можете отправить. Вот правила.

  • Вы можете отправить до 10 обращений (событий или просмотров страницы) за один раз.
  • После этого все удары молча удаляются.
  • каждые 5 секунд вы получаете 1 дополнительный удар. До максимума 10.

Это как Token Bucket алгоритм, где максимальные лексемы 10 и частота обновления 1 новый маркер каждые 5 секунд.

Теперь _setSampleRate и _setSessionCookietimeout не помогут вам здесь, вы должны удалить эти параметры из своего кода отслеживания. Лучшее, что вы можете сделать, это задушить ваши запросы, внедряя тот же самый алгоритм на вашем конце. Вот пример того, как вы могли бы сделать это:

var tokens = 10; 

function update_tokens() { 
    if (tokens < 10) tokens++; 
} 

// Even though new tokens should be generated each 5 seconds I give it 10 seconds just to make sure we have tokens available. 
setInterval(update_tokens, 10 * 1000); 


var hits_to_send = [ 
    ['_trackPageview', '/page1'], 
    ['_trackPageview', '/page2'], 
    ['_trackEvent', 'category', 'action', 'label'], 
    //... 
    ]; 

// Recursive function to check tokens and send requests. 
function send_next() { 
    if (hits_to_send.length==0) return; 
    if (tokens > 0) { 
     tokens--; 
     _gaq.push(hits_to_send.shift()); 
    } 
    else { 
     setTimeout(send_next, 5 * 1000); 
     return; 
    } 
    send_next(); 
    return; 
} 


//When you go online just call: 
send_next(); 

Это должно дать вам лучшие номера, даже если некоторые показатели не будут выглядеть красиво. timeOnSite и timeOnPage, например. Новый визит может быть создан, если пользователь находится в автономном режиме более 30 минут, даже если он взаимодействует с системой.

Также обратите внимание, что если у вас слишком много событий, это может занять некоторое время, чтобы обновить их все. Я бы рекомендовал вам держать ваши события в разумной сумме. Постарайтесь отслеживать только то, что важно для будущего анализа.

GA Hit Limit Reference

+0

У меня есть 10hits для каждого пользователя или 10 хитов для всех моих пользователей в секунду? – pooya

+0

10 просмотров для каждого пользователя – Eduardo