Flash(AS3.0)與FMS(Flash Media Server)溝通

Flash檔下載
FMS的基礎筆記,若看懂範例檔的話,再加工一下就可以做一個簡易的線上聊天室了。
範例檔是AS3.0搭配FMS3.5
在本機安裝完FMS後,在C:\Program Files\Adobe\Flash Media Server 3.5\applications\下建立一個叫test01的資料夾下,然後把asc丟進test01資料夾下,就可以執行了。
Category: 0 意見

Facebook 連結

Facebook(1)
Category: 0 意見

Facebook(3-1 使用PHP API)

前面兩個步驟都準備好後,就是下載Facebook的API了。(此範例為PHP)
第1步:先到這個網址後,點"Downloads"進入下載頁面
http://github.com/facebook/php-sdk


第2步:目前看到最新版是v2.1.1,就下載這個版本的zip吧


第3步:解壓縮回來後,我們主要會用到的只有2個檔
src資料夾內的facebook.php <=這個是我們待會兒要用到的API
examples資料夾內的example.php <=這個是範例檔,待會兒會直接執行它做測試

第4步:把examples資料夾內的example.php,改名為index.php

第5步:如果你有裝appserv的話,把"src資料夾"和"examples資料夾" 丟到 C:\AppServ\www\下,資料夾的結構看起來會像這樣:
(沒有裝的話,請上傳到你的網頁空間)

第6步:回到應用程式設定,把Canvas URL由"http://localhost/"改成"http://localhost/examples/"
(沒有裝appserv,而是上傳到網頁空間的,改成:http://你的網址/examples/)


第7步:瀏覽器上的網址列上輸入Canvas Page的網址 也就是http://apps.facebook.com/你的Canvas page網址/

第8步:會出現
Fatal error: Uncaught CurlException: 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed thrown inC:\AppServ\www_class1\src\facebook.php on line 589
的錯誤訊息。

做到這,真的是令人感到很沮喪…範例居然跑起來會有error...

這個問題應該是跟SSL有關,但我不清楚這是什麼東西,直接上google找解決方法
解決方法:開啟src資料夾下的facebook.php,找到這一段:
...前面省略
protected function makeRequest($url, $params, $ch=null) {
if (!$ch) {
$ch = curl_init();
}

$opts = self::$CURL_OPTS;
if ($this->useFileUploadSupport()) {
...後面省略
把它改成:
...前面省略
protected function makeRequest($url, $params, $ch=null) {
if (!$ch) {
$ch = curl_init();
}
$opts = self::$CURL_OPTS;
$opts[CURLOPT_SSL_VERIFYPEER] = false;//加入這一行
if ($this->useFileUploadSupport()) {
...後面省略

第9步:再執行網頁一次,應該會跑出下面的圖片
恭禧你~你的第一個Facebook範例出來了。
Category: 0 意見

Facebook(2)

文章清單
第1步:按左邊的"Facebook整合"
填入Canvas Page及Canvas URL
Canvas Page的值是這個應用程式的網址
Canvas URL的值是這個應用程式的"真正"網址
什麼意思?就是連到Canvas Page後,它會內嵌一個iframe,這個iframe的網址就是Canvas URL
因為我要在本機直接測試,所以我的Canvas URL就填入 http://localhost/
我測了一下,發現Canvas URL不能指定某個html或php檔,它會自己找這個資料夾下的index.html或index.php

第2步:按左邊的"進階"
勾選"沙盒模式"
勾選這個的目的是只有建立這個程式的帳號才可進入測試,其它帳號不行。
因為我只是測試而已,並沒有要開放,所以我把它勾起來。

第3步:按下面的儲存,把設定儲存起來。
若是成功的話,就會看到下圖的字樣:

然後…我又出現error了…可能的失敗情況(我碰到的):
1.下面兩圖,都是說Canvas Page填入的值只能是小寫字母、底線



2.Canvas Page的值必需為唯一,會出現這個錯誤,代表已經有其它人用這個網址了,所以我們只好改別的啦!

3.這是我前面提到的,不能指定某個html或php檔,只能指定某個目錄,而它會自己找這個目錄下的index檔
Category: 0 意見

Facebook(1)

開始學著開發Facebook應用程式,順便就記錄一些開發過程吧。
文章清單
第1步:一定要有一個facebook帳號(這不是廢話嗎?)
申請帳號步驟就不講了。
第2步:進入Facebook的開發者頁面
還沒登入時,會先要求登入;已經登入了,會要求授權,按下同意
第3步:按下"現在就建立一個"


第4步:填入應用程式名稱、勾選同意、按下"建立應用程式"

第5步:成功的話,就會出現下圖


當然…我不是一次就建好了…可能的失敗情況(我碰到的):


1.應用程式的名稱不可以包含fb或FB





2.應用程式的名稱至少要三個字



Category: 0 意見

AS3與AS2做溝通-1(AS3呼叫AS2)

AS3已出來很久,但有時還是會碰到AS3呼叫AS2的狀況。
這個範例是使用LocalConnection去做溝通。
這個方法最大的限制是,傳送資料限定大小:40kb
範例檔下載
AS3檔案:
場景上做一個按鈕,實體名稱為mc,按下後,就會呼叫AS2中AS3call2_fun這支function

var conn:LocalConnection=new LocalConnection();

var loader:Loader=new Loader();//載AS2 SWF
loader.load(new URLRequest("AS2.swf"));
this.addChild(loader);
mc.addEventListener(MouseEvent.CLICK,function(e:Event){
var connObj:Object=new Object();
connObj.datas="connect Data!!!";
conn.send("connAS2", "AS3call2_fun", connObj);
//connAS2=>溝通的通訊名稱
//AS3call2_fun=>通訊的function名稱
//connObj=>要傳入的資料,有資料量限制,需在40 KB以下
});


AS2檔案

var conn:LocalConnection = new LocalConnection();
conn.AS3call2_fun=function(connObj:Object){//AS3call2_fun=>通訊的function名稱
trace("as2被呼叫:"+connObj.datas);//connObj=>接收的資料,有資料量限制,需在40 KB以下
}
conn.connect("connAS2");//connAS2=>溝通的通訊名稱

AS3 使用DataGrid組件 - 欄位文字變色(下)

範例檔下載

再加一個"是否大於0"的欄位,這個欄位的內容與顏色都會依照亂數值而改變。









1.先建立一支設定Style的as,檔名為CellRenderStyle2.as



package {
import fl.controls.listClasses.CellRenderer;

public class CellRenderStyle2 extends CellRenderer {
public function CellRenderStyle2() {
}
override protected function drawLayout():void {
//this.data["col2"]會取得與這個欄位同一Roll的值
//this.listData.label會取得目前這個欄位的值
//this.listData.column會取得目前是第幾個Column

if(parseInt(this.data["col2"])<0 && this.listData.column==1){
textField.textColor=0xFF0000;
}
if(parseInt(this.data["col2"])<0 && this.listData.column==2){
textField.textColor=0x00FF00;
}
super.drawLayout();
}
}
}



2.fla的主程式:

import fl.controls.DataGrid;
import fl.data.DataProvider;
import fl.controls.dataGridClasses.DataGridColumn;

//建立DataGrid(可把它想成大Table)
var dg:DataGrid = new DataGrid();
dg.width=500;
dg.height=300;
dg.x=20;
dg.y=30;
this.addChild(dg);
//建立Column
//第一個Column
var colA:DataGridColumn = new DataGridColumn("col1");
colA.headerText="序號";
dg.addColumn(colA);
//第二個Column
var colB:DataGridColumn = new DataGridColumn("col2");
colB.headerText="亂數";
//此格會變色,因此要設定cellRenderer
colB.cellRenderer = CellRenderStyle2;
dg.addColumn(colB);
//第三個Column
var colC:DataGridColumn = new DataGridColumn("col3");
colC.headerText="大於0?";
//此格會變色,因此要設定cellRenderer
colC.cellRenderer = CellRenderStyle2;
//此格的文字內容依Col2而變化,設定要出現的文字function
//labelFun會判斷col2的值大於0嗎,大於0顯示Y;小於0顯示n
colC.labelFunction=labelFun;
dg.addColumn(colC);

//建立DataProvider(Table的資料)
var dp:DataProvider = new DataProvider();
for (var i = 0; i < 20; i++) {
//col3的值依col2的值變化,可先不填
dp.addItem({col1:(i+1), col2:getRandomNumber()});
}
dg.dataProvider=dp;

function labelFun(item:Object):String {
trace(item["col2"]);
if(parseInt(item["col2"])>0){
return 'Y';
}else{
return 'N';
}
}

function getRandomNumber(){
return Math.floor(Math.random()*50)-25;
}