Добавление Google Analytics в приложение Adobe Air HTML / Javascript - PullRequest
1 голос
/ 12 октября 2010

Я пытаюсь добавить отслеживание Google Analytics в приложение Adobe Air, созданное с использованием HTML и javascript.

Я попытался добавить файл ga.js и использовать его, как на веб-странице:

<script type="text/javascript" src="lib/js/ga.js"></script>
<script type="text/javascript">
   var pageTracker = _gat._getTracker("UA-********-1");
   pageTracker._initData();
   pageTracker._trackPageview('/test');
</script>

Но, похоже, это ничего не регистрирует на панели аналитики.

Также пытались использовать GA для библиотеки flash-скриптов, но я не могу создать экземпляр GATracker какему нужен DisplayObject?

EDIT

с использованием информации от grapefrukt Я попытался сделать следующее:

air.Sprite = window.runtime.flash.display.Sprite;
air.GATracker = window.runtime.com.google.analytics.GATracker;

var tracker = new air.GATracker( new air.Sprite(), "UA-XXXXXXX-X", "AS3", false );

, но я получаю следующую ошибку:Ошибка типа: ошибка # 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

ПРИМЕЧАНИЕ. Первоначально я неправильно прочитал ваш вопрос о том, как использовать gaforflash , но я все равно опубликую это, так как уже набрал его, и он может быть полезен.

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

var tracker:AnalyticsTracker = new GATracker( new Sprite, "UA-XXXXXXX-X", TrackerMode.AS3, false );

Если для TrackerMode установлено значение AS3, флэш-память будет напрямую взаимодействовать с серверами отслеживания, поэтому вам не понадобится JavaScript с серверов Google.

Я не могу помочь вам в общении между js / as3, но это должно быть довольно просто.

1 голос
/ 29 сентября 2012

Вероятно, бесполезно для ОП, но просто потратил целый день, работая над этим, так что, надеюсь, мое решение спасет кого-то другого в этот раз.

Таким образом, причина, по которой код ga.js не может использоваться непосредственно из приложения AIR, написанного на javascript, заключается в том, что AIR не будет устанавливать cookie для страниц, которые хранятся в самом приложении. Чтобы обойти это, я скачал ga.js в приложение и изменил его так, чтобы он не полагался на функцию document.cookie.

В приложении у меня есть:

<script type="text/javascript">
  var cookies = {};
  document.__defineSetter__('_cookie', function(c) {
      var epos = c.indexOf('=');
      var spos = c.indexOf(';', Math.max(0, epos));
      if (epos == -1 || spos == -1) { return; }
      var name = c.substring(0, epos);
      var value = c.substring(epos + 1, spos);
      cookies[name] = value;
  });
  document.__defineGetter__('_cookie', function() {
      var a = [];
      for (var name in cookies) {
          a.push(name + '=' + cookies[name]);
      }
      return a.join('; ');
  });

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXXX-1']);
  _gaq.push(['_trackPageview', path])
  (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      // custom GA code which uses document._cookie instead of
      // document.cookie
      ga.src = 'js/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
  })();
</script>

В идеале, мы могли бы переопределить метод cookie, но, к сожалению, это не представляется возможным в веб-наборе, реализованном для AIR. Поэтому в ga.js я заменил все экземпляры J.cookie на J._cookie. Как только это будет сделано, ga.js должен поверить, что он пишет куки и работает нормально.

В целях полного раскрытия я фактически получаю доступ к вышеуказанному аналитическому коду через iframe, но, поскольку ga.js обслуживается локально, я подозреваю, что он больше не нужен и не хотел усложнять решение, добавляя мост. логика.

...