Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Передача треков Google Analytics сторонним доменам без javascript

Anna | 31.05.2014 | нет комментариев

О чем статья?

 

  • О междоменном отслеживании
  • О том, что если чего-то нет в официальной документации, то это не причина печалится, а причина добавить такую вероятность.

Для чего передавать?

Дабы не терять информацию о пользователе во время его перехода в платежную систему для совершения покупок, а также его походов по нашей экосистеме сайтов.

Отчего без javascript?

 

  • Если необходимо исполнить редирект пользователя позже обработки логики запроса на сервере.
  • Google Analytics api и так отлично документирован, а читать копипаст документации это не ярус програ,не так ли?

Суть способа примитивна. Берем все куки вида __utm и передаем их, как параметры, в урле на иной домен.Ничего не происходит. Расходимся. Добавляем последним параметром __utmk, тот, что является специальным хешем всех остальных кук гугл аналитики. Поздравляю мы сделали, то что делаем функция _link в вестимом файле ga.js от Google Analytics.
И так если у вас переход на другие сайты обрабатывал контроллер, то вам не нужно во все ссылки добавлять конструкцию вида:

onclick="_gaq.push(['_link', 'https://www.payment-system.com?contractId=example']); return false;"

Если необходимы исходники образования хеша для ключа utmk, умоляю в github.
Дальше история о процессе приобретения данного способа.

1. Задание получено:
«Прокинуть гугл аналитику для всех переходов с сайта на платежную систему»
Изложение:
«Теряем информацию [откуда пришел, что искал, как дошел до кнопки buy] о самых значимых пользователях, которые приобрели наш софт.

Документация аналитики советует воспользоваться конструкцией вида:

onclick="_gaq.push(['_link', 'http://another-domain.com']); return false;"

И поставить ей на все ссылки, которые ведут на иной домен.
Вот и задача — у нас ссылок нет на платежную систему. Есть корзина с несколькими шагами. И контроллер, тот, что определяет, какую платежную систему задействовать и с какими параметрами. Позже чего делает редирект пользователя на платежную систему.
В голову лезут „ленивые идеи“. Дозволено же сделать промежуточную страницу на которой пользователь будет нажимать кнопку подтверждения, с вызовом функции аналитики из доки. Либо же javascript будет формировать ссылку/форму и перенаправлять пользователя. Но мы эти идеи откидываем сразу как ущербныеи идем читать доку дальше.

A session from one domain can only be transferred to another domain via a properly configured click or form submission, or via _getLinkerURL.

И так. Нам доступны: клик пользователя, отправка формы, javascript способ. Only? Only! Realy?

Посмотрим, что же происходит когда пользователь нажимает на ссылку у которой установлен признак onclick.

поищем через поисковик наш сайт, переход по ссылке, имеем данные куки от аналитики:

__utma	31500988.382379344.1389384850.1389388916.1389389624.3
__utmb	31500988.1.10.1389389624
__utmc	31500988
__utmz	31500988.1389389624.3.2.utmcsr=yandex|utmccn=(organic)|utmcmd=organic|utmctr=наш_запрос

Подробнее о всякой из кук здесь.

Перейдем на платежную систему через тестовую html ссылку, которая вызывает _gaq.push(‘link’… описанный в документации.
Воспользовавшись консолью браузера (так комфортнее) узнаем что в урл добавились параметры:

__utma	31500988.382379344.1389384850.1389388916.1389389624.3
__utmb	31500988.1.10.1389389624
__utmc	31500988
__utmz	31500988.1389389624.3.2.utmcsr=yandex|utmccn=(organic)|utmcmd=organic|utmctr=наш_запрос
__utmk	88022362
__utmv	-
__utmx	-

Так же установились куки (теснее на ином домене) utma, utmb, utmc, и основное utmz, в которую перенеслось значение utmcsr=yandex|utmccn=(organic)|utmcmd=organic|utmctr=наш_запрос

Дальше зашел в тупичок, испробовав передать без заказчика 4 значения знаменитых кук как параметры урла, но они настойчиво не хотели устанавливаться аналитикой как треки.
Обзор ga.js, ga_debug.js, а вернее их минификация не дали итога, попытка сделать beautifality ga.js тоже ни к чему не привела.

Внимательные теснее подметили, что позже javascript обработки возникают 3 новых параметра в запросе:

__utmk	88022362
__utmv	-
__utmx	-

Подметил это и я, но чуть позднее. Немножко покопав, наткнулся на данный комментарий к схожей по тематике статье на прогре.

Это оказались сорцы на Google Analytics Tracking For Adobe Flash.
Осталось дело за малым. Узнать, что на основе всех кук формируется хеш и записывается в __utmk и переписать

java функцию генерации хеша:

/**
     * Generate hash for input string. This is a global method, since it does not need
     * to access any instance variables, and it is being used everywhere in the GATC module.
     * @param input Input string to generate hash value on.
     * @return Hash value of input string. If input string is undefined, or empty, return hash value of 1.
     */
    public function generateHash( input:String ):int
    {
        var hash:int      = 1; // hash buffer
        var leftMost7:int = 0; // left-most 7 bits
        var pos:int;           // character position in string
        var current:int;       // current character in string

        // if input is undef or empty, hash value is 1
        if(input != null && input != "")
        {
            hash = 0;

            // hash function
            for( pos = input.length - 1 ; pos >= 0 ; pos-- )
            {
                current   = input.charCodeAt(pos);
                hash      = ((hash << 6) & 0xfffffff)   current   (current << 14);
                leftMost7 = hash & 0xfe00000;

                if(leftMost7 != 0)
                {
                    hash ^= leftMost7 >> 21;
                }
            }
        }

        return hash;
    }

на PHP.

В заключении проверяем, что для идентичных значений треков оба варианта ( javascript — ga.js — link() и php generateHash ) генерируют идентичный ключ для __utmk и на стороннем домене устанавливаются надобные треки.

Итог:

У нас возник новейший метод междоменного отслеживания. Он не отменнее, не дрянней, легко иной ( серверный ).

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB