给你的Flex程序添加深链接和分析-其实比你想象的要简单
Adobe Flash Builder 4 簡體中文正式版 Windows版點擊下載:http://g.csdn.net/5134151
Adobe Flash Builder 4 簡體中文正式版 Mac版點擊下載 :http://g.csdn.net/5134152
Adobe 在線課堂:http://adobev.csdn.net/zx/index.html
Adobe平臺技術峰會課程視頻:http://adobev.csdn.net/ 深鏈接:是通過URL 控制你的程序的初始視圖的能力;
分析:收集關于用戶如何與程序互動的數據。
關于Flash 和Flex 的兩個共同的誤解就是:在你的程序和游戲中,加入深鏈接和收集分析數據功能是不可能的,或者說是非常之難的。不過,事實并非如此。幾行代碼就可以實現這個要求了。
在本文中,我會介紹SWFAddress 和SWFAddress ,及你為什么會想要使用這兩個工具,最重要的是,如何在你的程序中添加它們。
我將于2010 年9 月19 日到21 日在360Flex 大會上探討這個話題。我想,使用SWFAddress 和Google Analytics 構建一個定制化幻燈片燈會很合適-右擊獲取源代碼。
注意:移動你的鼠標到程序的左邊,顯示導航。或者你可以使用鼠標手勢,按下左鼠標鍵,左右移動,前后移動幻燈片。還有一個功能就是,程序還可以處理觸控事件(這一點在代碼中就完全涉及到了)。
隨著你瀏覽一張張幻燈片,你會注意到URL 和頁面標題出現變化,以反映現在播放的幻燈片。程序還向Google Analytics 發送數據。我提供了一個公共的Google 賬戶,每個人都可以登陸上去,瀏覽幻燈片燈箱收集的分析數據-本頁面的最后提供了細節。從Google Analytics dashboard 上,你會看到獨特的瀏覽者,頁面瀏覽量,網站平均訪問事件,圖層疊加用戶地址等。
為什么添加深鏈接
不是每個Flex 程序都需要添加深鏈接。但是在很多情況下,它能夠加強UX (用戶體驗),因此值得你稍微費點功夫將之添加進來。譬如,我的網站RunPee.com -這個網站告訴人們,看電影的時候,什么時間是最佳洗手間時間,這樣你就不會錯過任何精彩片段。網站很簡單。有一個電影導航,向用戶顯示選定的電影的"洗手間時間"。假設你登陸了該網站,想要向一個朋友發送郵件或者告訴其他人某部影片(如Inception )的洗手間時間。沒有SWFAddress 的話,你只能讓你的朋友登陸主頁,然后她們自己在導航中尋找Inception 。但是因為我在網站使用了SWFAddress ,你可以向你的朋友發送一個鏈接,從此鏈接,你的朋友可以直接連接到你想要她們觀看的影片,如http://runpee.com/#/Inception-region-US-lang-EN-ke y-121 。
它還能啟動瀏覽器前進后退按鈕和刷新,并且能夠給你的程序的特定視圖添加書簽。這些都是很多用戶認為Flex/Flash 程序缺少的。
注意:如果你使用SWFAddress ,發現它很有用,那就在Asual 的donation bucket 里說幾句感謝的話吧。
為什么添加analytics (分析)?
當然,你想要知道用戶是如何使用你的程序的。你可以僅僅就在程序的HTML 容器里嵌入Google Analytics Javascript 代碼,但是那只會提供有關主頁的數據。你不能知道人們到底如何使用你的程序的,除非你向Actionscript 代碼添加跟蹤。
你不想知道在中國,到底有多少人在使用你的程序嗎?
在一個HTML 網站,每次當你從網站上載一個頁面的時候,Google 服務器會更新,Google Analytics 運行。在Flex 程序里,就有些不同了。你得告訴Google 服務器,你要求什么作為網頁瀏覽量,并且發送更新數據。最棒.給你的Flex程序添加深鏈接和分析-其實比你想象的要簡單 .的就是,它可以讓你全權控制你想要跟蹤的內容。你可以,譬如,添加跟蹤,當用戶觀看一部視頻時,每隔十秒ping 一下Google 服務器。這樣,你可以了解到人們看視頻時,會看到哪里選擇離開。或者,你可以向一個游戲添加跟蹤,看看人們在打到多少級時,放棄。你可以因此確定哪一級對玩家來說太難了。
你還可以根據你的喜好,定義網頁的格式。你可以做一串數據,采用任何格式,然后發送到Google 。在這個視頻使用跟蹤范例里,我可能會發送這樣一個內容到Google "、名稱-我的視頻名-秒-40-213"也就是,我的視頻名稱,用戶觀看的秒數,和視頻的全部時間(秒)。現在,在Google 上瀏覽數據時,我可使用過濾器選出我想要查看的信息。
另外一個收集分析數據的重要原因就是,哪些國家的大部分用戶會選擇你的程序。譬如,如果你有個游戲產品,發現它在中國很受歡迎,你想要將部分內容翻譯成中文,從而提高在該地區的受歡迎度。如果你想要本地化你的程序,你需要根據用戶跟蹤了解哪個語言是最佳選擇。
此外,你可以獲取關于運行你的程序的硬件的信息,如Flash Player 版本,瀏覽器類型,屏幕清晰度,OS 類型等。這些數據對于更新你的程序都非常重要。
注意:這里用Flex 程序舉例說明,而實際上SWFAddress 和Google Analytics 在純粹的Actionscript 項目里運行良好。
SWFAddress如何運行
首先,你需要從Asua.com 獲得SWFAddress 代碼-這是免費的開源代碼。你需要兩樣東西:在你的項目libs folder 中的swc ,和你放在服務器上通過HTML 容器裝載的swfaddress.js 文件。
你會要更新Flex 項目的index.template.html ,以上載JavaScript 文件。代碼行在上載了swfobject.js 文件之后運行正確。所以,你的HTML 代碼就是這樣: <mce:script type="text/javascript" src="swfobject.js" mce_src="swfobject.js"></mce:script> <mce:script type="text/javascript" src="swfaddress.js" mce_src="swfaddress.js"></mce:script> 關于SWFAddress 的幾點:
SWFAddress是一個靜態類。你不需實例化它。
你需要向SWFAddress 添加一個監聽器,這樣就可以了解它什么時候發生了變化。但是你可以只添加一個監聽器。更為精確地說就是,你可以按照自己的要求添加N 個監聽器,但是只有最后添加的那個會被觸發。現在,在你的程序里,你需要監聽SWFAddress.CHANGE 事件,如下所示:
SWFAddress.addEventListener( SWFAddressEvent.CHANGE, onSWFAddressChange );
然后,事件控制如下所示: private function onSWFAddressChange( e:SWFAddressEvent ):void { if( SWFAddress.getPath() == "/" ) { // set view to homepage } else if( SWFAddress.getPath().indexOf( 'something_' ) != -1 ) { // set view to something } } 然后,事件控制如下所示:
SWFAddress.setValue( 'something' );
你可以告訴SWFAddress 在程序內任何位置更改url 。但是,我根據經驗認為,你可能不要這么做。假定你做了,稍后又決定你想要改變URL 的格式。你可能會在程序內不同的位置進行跟蹤,在這些位置,可能設定了該URL 。我發現最好的方法是擁有一個靜態文件,它會處理所有的SWFAddress 更新。因為你只有一個用于SWFAddress 的監聽器,我使用InBox/OutBox 來做個比方吧。InBox 類監聽的是變化,而OutBox 卻執行了所有的setValue 更新。用這個方法,我的InBox 類只有兩個靜態方法。一個就是設置監聽器,當然還有用于該監聽器的handler( 子線程監聽器) 。我從程序creationComplete handler. 中調用InBox.init() 方法。 package model { import com.asual.swfaddress.SWFAddressEvent; import com.asual.swfaddress.SWFAddress; public class InBox { public static function init():void { SWFAddress.addEventListener( SWFAddressEvent.CHANGE, onSWFAddressChange ); } private static function onSWFAddressChange( e:SWFAddressEvent ):void { if( SWFAddress.getPath() == "/" ) { // set view to homepage } else if( SWFAddress.getPath().indexOf( 'something_' ) != -1 ) { // set view to something } } } SWFAddress不僅僅限于更改URL 。你還可以使用它更新頁面的標題,這樣有助于用戶決定是否給視圖需要添加書簽。
使用SWFAddress 時,最重要的是你需要確保你的程序必須只依賴于對SWFAddress.CHANGE 事件的反應,以更改視圖。譬如,你不能再將ButtonBar 與ViewStack 連接起來,改變ButtonBar 以更改ViewStack 的selectedIndex 。相反,ButtonBar 將于,如OutBox.buttonBarChanged( s:String ) 方法通訊。這個方法會通過WFAddress.setValue( s ) 更ViewStack 。下面簡單說明下這個流程;.
在上面這個例子里,InBox 不能直接與ViewStack 通訊。實際上,你可能會從InBox 派遣一個事件,以與ViewStack 通訊。
你可以清楚地看到,在程序中使用SWFAddress 起來很簡單,但是把它添加到現有的一個程序中可能也非常令人頭疼-你的"里程數"可能會變動。因此,如果你想要以后使用它,要確保你從程序構建開始就將之添加進去了,這樣你會輕松很多。
它"中斷"了什么?
顯然,SWFAddress 使用ExternalInterface 與Javascript 代碼通訊。一個常見的問題是"如果Javascript 代碼因為某種原因不進行上載或者ExternalInterface 在一個特定的瀏覽器中失敗了,會發生什么?(你會說Safari ?)它會不會中斷我的程序,阻止人們使用導航?幸運的是,答案是NO! SWFAddress 實際上并不依賴瀏覽器中URL 的改變來觸發更改事件。當你使用setValue 時,它觸發更改事件,然后試圖更新URL 。如果它因為某種愿意不能運行,也沒有什么大損失。
如何使用Google Analytics
如果你認為SWFAddress 很簡單,那就等著知道你在Flex 或Actionscript 程序中嘗試使用Google Analytics 吧(下載GAforFlash )。你所要做的就是創建一個GATracker 實例,你準備開始發送pageviews 到Google 。這次,我又發現只用一個靜態類與Google 通訊,很有意義,這樣你可以中心化格式及你想要進行的更改。
下面是一個GATracker 的實例: var tracker:GATracker = new GATracker( FlexGlobals.topLevelApplication.stage, // DisplayObject 'UA-123456789-1', // Account Number 'AS3' // 'AS3' or 'Bridge' false // is in Debug mode? ) 第一個參數是DisplayObject ,如果你是在debug 模式,GATracker 可以用來顯示關于它發送到Google 的反饋。第二個參數是你的賬戶號,在使用Google Analytics 建立賬戶時獲得。(你不能使用這個代碼,因為每個代碼與特定的域相連)。第三個參數是一個串,你可以用來設置到 AS3 或Bridge 上。我使用AS3 。最后,你為debug 模式設置一個Boolean 。顯然,你不想在debug 模式下公布你的網站。這只是為了進行測試。
Bridge 或 AS3
簡而言之,這里顯示的是Bridge 和AS3 模式的區別。Bridge 使用Actionscript ExternalInterface 與你在HTML 中的ga.js 模式通訊。如果你有一個Flash widget 內嵌在網頁中,效果最佳。你會想要將widget 的分析數據與你已經跟蹤的網站其它部分的分析數據混合起來。然而,如果你有一個程序,你想要單獨跟蹤它,你可能會要采用AS3 模式。在兩種情況下,你的內嵌代碼都應該向"always "設置allowscriptaccess 。
在我使用GATracker 的項目中,我想要確保我在測試程序時,并沒有向Google 發送數據。但是一旦發布了該程序,我還是不會忘記啟用跟蹤功能。為了streamline 該過程,我編寫了一個簡單的類,用于分析FlexGlobals.topLevelApplication.url 。如果程序在localhost 上運行,它就不會更新Google 。
最后的代碼如下所示: public static function update( path:String ):void { // If we are in development - on the localhost - then DON'T update Google Analytics. // This code below will only run on the production server. if( !AppURL.isLocalhost ) { // Initialized once. if( tracker == null ) { tracker = new GATracker( FlexGlobals.topLevelApplication.stage, 'UA-17962415-1', 'AS3', false ) } // Update Google Analytics. tracker.trackPageview( path ); } } 雖然Google Analytics 很簡單,但是有時候還是有些麻煩的情況。我鼓勵你閱讀下Flash GA 跟蹤指南,對功能設置有個完整的了解,遇到問題,就參考這些文件。
SWFAddress 和 Google Analytics 兩項都很強大,加起來就更為強大了。
在一篇文章里,一起討論SWFAddress 和Google Analytics 的原因就是,即便他們是相互獨立的,他們還是互相構成了補充。如果你按照我的建議創建一個靜態類,用于管理SWFAddress.CHANGE 事件-InBox.as - ,再創建另外一個靜態類通過setValue 管理SWFAddess 的更新-OutBox.as ,那創建另外一個靜態類,就更簡單了-Analytics.as ,以更新Google 。在這個例子中,你會發現,大部分時間,即使不是所有的時間,你唯一需要調用Analytics 類的地方就是OutBox 類。在這個例子中,就是用戶與你的程序互動。事件調用OutBox.as 中的某個方法,更改URL ,這就是我們可能想要傳遞給Google Analytics 的。
Flex 4中的狀態
Flex4最棒的一點就是,它引入了一個很出色的功能-狀態(千萬不要以為Flex 2/3 的狀態算得上是功能。應該盡力避免。)只要有可能,我會構建程序,在狀態,URL 更改,和分析數據更新之間實現一對一的對應。如果你可以有效管理,你的開發過程就很開心了。當然,事情不是都這么簡單,但是這個目標很不錯。
公共Google 賬戶
我創建了一個與大家共享的Google 賬戶,有想要查看我構建的Slydes 程序收集的分析數據的,可以用這個賬戶。就是使用這個賬戶信息登陸Google 。(希望你不要隨便更改此賬戶的密碼。我自己本身是沒需要再使用這個賬戶了。但是我愿意其它人開發使用Google Analytics Dashboard. ) 。
用戶名:AdobeFlexOpenDev
密碼: adobeflex4
一旦登陸,你可以瀏覽Analytics Dashboard 。你能看到如獨特的用戶數量,pageviews, 圖層疊加等信息。
本文譯自:http://insideria.com/2010/09/adding-deeplinking-an d-analyti.html
?
轉載于:https://blog.51cto.com/netp312/572239
總結
以上是生活随笔為你收集整理的给你的Flex程序添加深链接和分析-其实比你想象的要简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: server日期函数
- 下一篇: 动态产生一个TextBox,并使输入的文