2010-10-12 3 views
1

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

Я попытался добавить файл 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 для флэш-библиотеки ActionScript, но я не могу создать экземпляр 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); 

, но я получаю следующее сообщение об ошибке: TypeError: Error # 1009: Не удается получить доступ к свойству или методу null Ссылка на объект

ответ

2

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

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

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

Установка в TrackerMode пригодной для AS3 ДАВАЙТЕ вспышку общаться непосредственно с серверами трекинга, так что вам не нужно JavaScript с серверов Google.

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

+0

Благодарим вас за ответ. Я пошел, изменив синтаксис для работы с adobe air/javascript, и я получаю эту ошибку: TypeError: Error # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. – JordanW

+0

Да, у меня такая же ошибка. Было ли какое-то исследование и, похоже, [связано с созданием GATracker до того, как DisplayObject добавлен в этап] (http://code.google.com/p/gaforflash/issues/detail?id=95#c2). Тем не менее, я не верю, что он когда-либо создавался, когда создавался в javascript. – gschwa

1

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

Поэтому причина, по которой код 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> 

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

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