Arkiv for januar 2009

Facebook aplikationer og Flash - navigateToUrl drilleri

torsdag, 29. januar 2009

Vi er i øjeblikket i fuld gang med at lave en Facebook aplikation der i høj grad benytter sig af Flash (mere om den senere), og i den forbindelse er jeg stødt på et par mindre besværligheder.

Den første og største var, at Facebook når man bruger FBML (fb:swf) automatisk sætter alle Flash-objekter til at kører med allowScriptAccess=never.

Det er en sikkerhedsbegrænsning de har sat på, for at alle vi udviklere ikke uhæmmet skal kunne kalde en masse javascript-funktioner og dermed få adgang til data som vi ikke skal have adgang til.
Problemet med det er så, at det også sætter en række begrænsninger for funktioner som man ikke nødvendigvis ved bruger javascript, eksempelvis navigateToUrl, som pludselig er begrænset til kun at kunne bruge _blank, og det er jo helt umuligt at lave en lækker aplikation i Flash, hvis alle sider åbner i nye vinduer.

Det ved Facebook også godt og derfor er der en metode til at komme uden om problemet, nemlig ved at bruge en Flash-fil som Facebook har lavet som en bro.
Lyder det indviklet? Det er det også lidt og det tog mig noget tid at lure, så derfor kommer opskriften her.

Før skal man indsætte den Facebook-bro som man senere skal tilgå via LocalConnection:

<fb:fbjs-bridge/>
<fb:swf swfbgcolor="FFFFFF"
	swfsrc='http://www.dinurl.dk/din.swf'
	width='760'
	height='600'
	/>
<script> <!-- --></script>

Dernæst, så skal man bruge en funktion som tilgår broen og som kan bruges som erstatning for navigateToUrl, selv lavede jeg denne lille klasse, men det kan gøres på mange måder:

import flash.net.LocalConnection;
import flash.display.LoaderInfo;

public class FacebookUtil {
	private var connection:LocalConnection;
	private var connectionName:String;
	private var baseUrl:String = "http://apps.facebook.com/dinaplikation/";

	public function init(_loaderInfo:LoaderInfo):void {
		connection = new LocalConnection();
		connectionName = _loaderInfo.parameters.fb_local_connection;
	}

	function go(_url:String):void {
		if (connectionName) {
			connection.send(connectionName,
			"callFBJS",
			"document.setLocation",
			[baseUrl + _url]
			);
		} else {
			trace("FacebookUtil.go: No connection");
		}
	}
}

Som du kan se, så har den en init funktion, og det er fordi at Facebook som standard sender nogle værdier med til alle fb:swf objekter, og nogle af dem har vi brug for, så derfor skal klassen klargøres inden man kan kalde funktionen go, som det hele drejer sig om:

var Facebook:FacebookUtil = new FacebookUtil();

Facebook.init(LoaderInfo(this.root.loaderInfo));

Facebook.go("minside.php");

I den klasse jeg lige har lavet er der ikke mulighed for at sætte target, da jeg kun havde brug for _self, men det kan den sagtens udvides med.

Håber det kan gøre vejen til din første Facebook aplikation i Flash lidt nemmere :-)

Skaler dit indhold så det passer til skærmen

tirsdag, 20. januar 2009

Hvis der har været en dominerende trend i Flash inden for det sidste års tid, så er det at man nu meget ofte bruger hele skærmens størrelse (som vi eksempelvis selv gør det på Fredrik Clement), og selv om det egentlig er rimelig simpelt at gå til, så er det jo altid godt med et sted at starte og til det formål kan denne tutorial fra Kirupa anbefales:
Auto-rezising and centering your content

Google Analytics - Nu også med Flash statistik!

tirsdag, 13. januar 2009

Noget som altid har været temmeligt belastende i Flash, har været at måle hvor mange brugere der har trykket på en knap, set en video færdig og så videre, for modsat sidevisninger og andre mere traditionelle begreber, så findes der kun et meget begrænset antal systemer til det, og mig bekendt bruger de fleste i dag noget internt udviklet.

Men, nu er Google kommet på banen med en række klasser og komponenter til Flash, som gør det super nemt at tracke ting i Flash direkte via Google Analytics:
Google Analytics for simplified tracking of rich media websites

Lyder virkelig som en timesaver og når jeg selv får rodet lidt med det, er det slet ikke utænkeligt at der kommer en lille how-to her på bloggen, men umiddelbart er man rigtig godt igang når man har set videoen på linket.

Offline hjælp i Flash CS4

tirsdag, 6. januar 2009

Noget af det som jeg og andre har brokket os en del over i Flash CS4 er, at det indbyggede hjælpepanel, der kom frem på F1 i CS3, er lavet om til at en browser åbner op og går til en relativt langsom online-version.

Det er desværre ikke muligt at få det gamle panel tilbage, men til gengæld kan man få Flash til at vise en lokal version af hjælpen, hvilket gør at det hele går meget hurtigere.

For at få det til at ske, så skal du gør følgende:

1. Gå ind i Window -> Extensions -> Connections, og i det vindue der kommer frem skal du klikke på pilen i øverste højre hjørne og herefter vælge “Offline options”:
Flash CS4 Offline hjælp - step 1

2. I det nye vindue der kommer, skal man så sætte hak ud for “Keep me offline” og trykke Ok:
Flash CS4 Offline hjælp - step 2

3. Når du næste gang trykker F1, vil hjælpen åbne fra din egen harddisk.

Selvom det ikke er nær så godt som det gamle hjælpepanel, så er det i hvert fald en kraftig forbedring.