2015-03-18 2 views
9

У меня есть особая ситуация, когда посетители сайтов могут получить доступ к странице из определенного домена, но не к другим. Таким образом, HTML и активы не являются проблемой, если они хранятся на сервере. Google Analytics, с другой стороны, требует загрузки analytics.js с серверов Google, что невозможно.Прокси-сервер Google Analytics

Так что я ищу способ прокси-сервера. Сам веб-сервер имеет доступ в Интернет и может передавать трафик. Чтобы сообщить Google о моем просмотре страницы, один GIF-файл с одним пикселем загружается из Google, описанный здесь: https://developers.google.com/analytics/resources/concepts/gaConceptsTrackingOverview

Я думаю, что было бы легко получить все параметры в GIF и использовать протокол измерений для отчета Google с сервера - но жесткий бит должен получить всю эту информацию на сервере. Загружать analytics.js и изменять его, чтобы перейти на мой собственный сервер, кажется мне взломом, который не является будущим доказательством вообще. Просто получить текущую страницу от пользователя на сервере не очень важно, но мы хотели бы получить идентификатор пользователя, версию браузера и все, что вы получите с помощью Google Analytics.

Как вы это сделаете? Вы нашли решение для этого?

+0

Пройдет некоторое время, прежде чем я смогу ответить на этот вопрос (это требует некоторых объяснений, и я сейчас работаю), но на данный момент информация в вашей ссылке устарела. Текущая версия клиента JavaScript javascript сама построена на протоколе измерения и, таким образом, отправляет данные в конечную точку протокола измерения (которая все еще возвращает gif), и имена параметров изменились. –

+0

Хорошо, хорошо знать! Я с нетерпением жду дополнительной помощи от вас позже :) Спасибо. –

+0

Просто для любопытства, вы когда-либо использовали это в производстве и как это получилось? –

ответ

15

Как указывалось в моем комментарии, utm.gif больше не используется. Google Analytics полностью переключилась на протокол измерений, и данные теперь отправляются в конечную точку для протокола измерения на google-analytics.com/collect. Фактически это все равно возвращает прозрачный пиксель, поскольку вызов изображения с параметрами является методом завещания передачи информации через границы домена.

Теперь вы можете просто измерить протокол, чтобы реализовать свой собственный трекер Google Analytics.

Для quote myself:

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

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

www.google-analytics.com/collect/v=1 & TID = UA-XXXXY & чид = 555 & т = & просмотр страницы dp =% 2Fmypage

Возможно, вы бы хотели добавить IP-пользователей (будет автоматически анонимно) и агент пользователя.

Однако, похоже, вы предпочитаете использовать стандартный код Google Analytics для сбора данных и ретранслирования вызова отслеживания через собственный сервер. Хотя я не использовал следующее в производстве, я не вижу причин, почему это не сработает.

Сначала вам нужен файл analytics.js. Самостоятельный хостинг файла обескуражен, но данная причина заключается в том, что иногда код иногда обновляется Google, и если вы его размещаете самостоятельно, вы можете пропустить обновления. Это можно исправить, установив задание cron, которое регулярно загружает файл на ваш сервер, чтобы вы всегда имели текущую версию.

Далее вы бы адаптировать функцию самозагрузки GA, чтобы загрузить код с вашего сервера:

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.myserver.com/analytics.js','ga'); 

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

Чтобы сделать это возможным, в Google (Universal) Analytics Code есть feature called "tasks". Задачи - это функции в коде отслеживания, в котором собирается отслеживающий вызов.

Можно изменять задачи, используя функцию «set» объекта трекера, используя параметр taskname как параметр и передавая функцию, которая перезаписывает/перегружает функцию задачи.

Ниже в значительной степени примера из документации Google (за исключение я пропустил ту часть, где данные по-прежнему отправляются в Google - вам это не нужно в данный момент):

ga('create', 'UA-XXXXX-Y', 'auto'); 

ga(function(tracker) { 

    tracker.set('sendHitTask', function(model) { 
    var payLoad = model.get('hitPayload'); 
    var gifRequest = new XMLHttpRequest(); 
    var gifPath = "/__ua.gif"; 
    gifRequest.open('get', gifPath + '?' + payLoad, true); 
    gifRequest.send(); 
    }); 
}); 

ga('send', 'pageview'); 

Теперь это отправляет данные в файл с именем __ua.gif на вашем собственном сервере (если вам нужно отправить данные междоменного, вы можете просто сделать var ua = new Image; ua.src = gifPath + '?' + payLoad для создания изображения запрос).

Параметр модели для функции sendHitTask содержит (помимо большого количества служебных) полезную нагрузку, то есть собранную строку запроса, содержащую данные аналитики. Затем вы можете создать свой _ua.gif скрипт, который проксирует запрос на google-analytics.com/collect.

На данный момент агент пользователя будет ваш сценарий и IP-адрес будет у вашего сервера, поэтому вам необходимо включить & дываются (User IP переопределения) и & параметров (User агент переопределения) иа (https://groups.google.com/forum/#!msg/google-analytics-measurement-protocol/8TAp7_I1uTk/KNjI5IGwT58J) в получить гео- и техническую информацию.

Если вы чувствуете себя более предприимчивым, вместо этого вы можете переопределить buildHitTask и попробовать и добавить туда дополнительные параметры (более вероятно, так как вам нужно будет получить IP-адрес откуда-то).

Дополнительный параметр см. В описании для analytics.js и Measurement Protocol.

+0

Какой отличный ответ! Большое спасибо. Я прочитаю еще несколько о задачах, и мы увидим, смогу ли я это исправить :) –

+0

Одна из проблем, которая приходит на ум сейчас, заключается в том, что установить тайм-аут сложно - для мобильных пользователей 1 не так много, и если я увеличьте его, некоторые записи будут потеряны. Сначала я попытаюсь загрузить analytics.js с AJAX, и если это удастся - сделайте обычный сниппет (если мне повезет, браузер будет кэшировать его и не загружать дважды). –

Смежные вопросы