AIR 2.0 Beta 2 发布!

由 Jinni 于 February 3rd, 2010 8:48 am 发布 0条评论

访问这里获取AIR 2.0最新的测试版本。

注意:基于AIR 2.0 Beta 1创建的应用程序将无法在Beta 2上运行。请更新你的应用程序并将应用程序描述文件中的命名空间修改为:

<application xmlns="http://ns.adobe.com/air/application/2.0beta2">

AIR 2.0 Beta 2的新特性

  • 增强的打印机交互能力:获取和控制更多打印有关的属性,允许后台打印等。
  • 支持TSL/SSL Socket通讯:TSL/SSL让AIR应用的安全性又迈上一个台阶。
  • IME(输入法) API增强:增加了更多与输入法软件协同工作的API。
  • 各种Bug修正

其他AIR 2.0范例可访问Tuor de Flex获取。

同时发布的还有Flex SDK 3.5a,修正了之前AIR Update Framework的Bug

Enjoy!

iPhone上基于Flash技术的Connect客户端

由 Jinni 于 February 2nd, 2010 6:08 pm 发布 2条评论

就在“乔帮主”手持“iPhone 4 in 1”大放厥词之时,Adobe也在Flash for iPhone的道路上不停的前进着,根据最新的视频显示,基于Flash技术的Connect客户端已经可以在iPhone上流畅地运行。以下是我针对几个核心功能做的视频截图:

起始页面

实时聊天

摄像头视频

屏幕共享

完整的视频请看:

Enjoy!

推荐大家一篇文章

由 Jinni 于 February 1st, 2010 3:26 pm 发布 0条评论

Flash is Dead… Long Live Flash

此君的大部分观点和我颇为相似,其他不再赘述

Flex 4 SDK的ASDoc工具

由 Jinni 于 January 29th, 2010 10:40 am 发布 1条评论

Flex 4 SDK除了全新的API和编译效率的提升,对一些辅助的命令行工具也有所改进,ASDoc就是一例。

在Flex 3的时代,我们为一个工程或者类库提供ASDoc说明时,所有包(package)的说明,必须通过命令行来指定,例如

./asdoc -source-path src -doc-sources src \
-package com.swfever.pkg1 "Package 1 Description" \
-package com.swfever.pkg2 "Package 2 Description" \
-package com.swfever.pkg3 "Package 3 Description" \
-output $1

这样的写法非常不易于维护。更为麻烦的是,由于是命令行参数,取决于系统编码,有些时候一些双字节字符,如中文,会变成乱码。

在Flex 4 SDK中的ASDoc提供了一个新的参数:package-description-file。你可以将所有的对包的说明组织在一个XML文件中,并通过该参数进行传递。例如:

<overviews>
	<packages>
		<package name="com.swfever.pkg1">
			<shortDescription>
			<![CDATA[
				沉默...
			]]>
			</shortDescription>
			<description>
			<![CDATA[
				你可以保持不沉默,但我会快会让你沉默....
			]]>
			</description>
		</package>
		<package name="com.swfever.pkg2">
			<shortDescription>
			<![CDATA[
				春节。
			]]>
			</shortDescription>
			<description>
			<![CDATA[
				外国人信圣诞老人,所以过圣诞节。
				中国人信春哥,所以过春节。
			]]>
			</description>
		</package>
	</packages>
</overviews>

其中shortDescription中包含的描述用于在Overview页面对包的简述。而description标签中的内容则会显示在包的详细页面(类列表)。

接下来,只需要向ASDoc指定该文件的路径即可。

./asdoc -source-path src -doc-sources src \
package-description-file package-descriptions.xml
-output $1

这样,既可以方便管理,中文乱码问题也可以轻松解决。:)

Enjoy!

基于NetGroup的P2P多人聊天室

由 Jinni 于 January 26th, 2010 12:02 am 发布 17条评论

Stratus Beta2上线后,有很多朋友表示不知道如何基于NetGroup进行开发。事实上,NetGroup是一个非常强大的类,可以实现诸如Direct Routing, Posting和Object Replication等功能。为此,我花了20分钟时间写了一个简单的Demo:基于NetGroup的P2P多人聊天室,其中主要使用了Posting功能。其他NetGroup功能的使用方法大同小异,请各位自行发掘。

要运行这个Demo,你需要一个Stratus Developer Key,并确保你的Flash Player版本为10.1

点击下图运行Demo

时间仓促,界面使用FB4的Design模式胡乱搭的:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" width="600" height="400">
	<fx:Script> .... </fx:Script>	
	<s:TextInput id="developerKeyInput" x="10" y="10" width="304" text="@{developerKey}"/>
	<s:TextInput id="yourNameInput" x="320" y="10" width="192" text="@{yourName}"/>
	<s:Button id="connectBtn" x="520" y="10" label="Connect" click="connectBtn_onClick()" />
	<s:TextArea text="{logText}" left="10" right="10" bottom="10" editable="false"/>
	<s:TextArea text="{chatMsg}" width="372"  x="218" y="56" height="129" editable="false"/>
	<s:Label left="10" bottom="170" text="Log:"/>
	<s:Label left="10" bottom="350" text="Neighbor:"/>
	<s:Label left="218" bottom="350" text="Chat:"/>
	<s:List id="userList" x="10" y="57" width="200" height="153">
		<s:ArrayCollection id="userList_ac" />
	</s:List>
	<s:Button x="520" y="189" label="Send" id="sendButton" click="sendBtn_onClick()" enabled="false"/>
	<s:TextInput x="218" y="188" width="294" id="chatMsgInput"/>
</s:Application>

Script标签内的代码如下:

import mx.utils.StringUtil;
[Bindable]
private var developerKey:String = "Your Developer Key";
[Bindable]
private var yourName:String = "no name";
private const SERVER_URL:String = "rtmfp://stratus.adobe.com/";
[Bindable]
private var logText:String = "";
[Bindable]
private var chatMsg:String = "";
 
private var netConn:NetConnection;
private var netGroup:NetGroup;
 
private function connectBtn_onClick():void {
	if(!netConn) {
		netConn = new NetConnection();
		netConn.addEventListener(NetStatusEvent.NET_STATUS, netConn_onNetStatus);					
	}
        netConn.connect(SERVER_URL+developerKey);
}
 
private function sendBtn_onClick():void {
	if(StringUtil.trim(chatMsgInput.text).length) {
		var msg:Object = {
			text: chatMsgInput.text,
			sender: yourName
		};
		netGroup.post(msg);
		msgRecieved(msg);
		chatMsgInput.text = "";
	}
}
 
private function netConn_onNetStatus(event:NetStatusEvent):void {
	log(event.info.code);
	if(event.info.code == "NetConnection.Connect.Success") {
		connectBtn.enabled = false;
		developerKeyInput.enabled = false;
		yourNameInput.enabled = false;
		log("My Peer Id = "+netConn.nearID);
		var groupSpec:GroupSpecifier = new GroupSpecifier("swfever");
		groupSpec.serverChannelEnabled = true;
		groupSpec.ipMulticastMemberUpdatesEnabled = true;
		groupSpec.multicastEnabled = true;
		groupSpec.postingEnabled = true;
		var groupId:String = groupSpec.groupspecWithAuthorizations();
		log("Group Id = "+groupId);
		netGroup = new NetGroup(netConn,groupId);
		netGroup.addEventListener(NetStatusEvent.NET_STATUS, netGroup_onNetStatus);
	} else
	if(event.info.code == "NetGroup.Connect.Success") {
		sendButton.enabled = true;
	}
}
 
private function netGroup_onNetStatus(event:NetStatusEvent):void {
	log(event.info.code);
	if(event.info.code == "NetGroup.Neighbor.Connect") {
		log("NetGroup Neighbor Count = "+netGroup.neighborCount);
		userList_ac.addItem(event.info.neighbor);
	} else
	if(event.info.code == "NetGroup.Neighbor.Disconnect") {
		log("NetGroup Neighbor Count = "+netGroup.neighborCount);		
		userList_ac.removeItemAt(userList_ac.getItemIndex(event.info.neighbor));
	} else
	if(event.info.code == "NetGroup.Posting.Notify") {
		msgRecieved(event.info.message);
	}
}
 
private function log(msg:String):void {
	logText+=msg+"\n";
}
 
private function msgRecieved(msg:Object):void {
	chatMsg+=msg.sender+" : "+msg.text+"\n";
}

源代码下载

  NetGroup_Posting_Demo_src (1.4 KiB, 93 hits)

Stratus升级到2.0Beta: 支持组和MultiCast

由 Jinni 于 January 23rd, 2010 8:49 pm 发布 1条评论

你需要注册一个Developer ID来使用免费的Stratus服务
另外,为了使用组和MultiCast功能,你需要安装Flash Player 10.1AIR 2.0

下图中非常清楚地描述了传统的流直播、Flash Player 10.0以后支持的单点P2P,以及Flash Player 10.1支持的Group和MultiCast后在数据传输方面的区别:

目前主流的在线视频其实可以分为Flash视频 (渐进下载/VOD/直播流)和P2P视频,如PPLive,Sina直播等。
P2P在传输速度和对服务器带宽压力上有较大优势,一般在直播中应用的较多。
但是现有的P2P解决方案基本上只支持IE,并且需要额外安装ActiveX控件且各家的插件互不通用。
Flash + P2P的到来是否会统一在线视频阵线?让我们拭目以待吧!

更多详细信息请访问这里

ASDoc也有可视化工具啦:ASDocr

由 Jinni 于 January 20th, 2010 10:00 am 发布 2条评论

ASDoc是Flex SDK提供的一款命令行工具,可以非常方便地将代码中(符合标准的)注释转化为API文档。唯一遗憾的是ASDoc是一款基于命令行的工具,使用起来并不是特别方便(例如要实现某些特定功能时还要查询参数列表)。

ASDocr
的出现解决了这一问题,借助AIR 2.0强大的本地进程访问能力,ASDocr可以直接和ASDoc进行通讯,并帮助你通过界面进行各种配置。快去体验一下吧。

Mac版下载
Windows版下载

P.S. 这款工具在使用上可能不是特别习惯,记得要先点击右上角的文件图标来创建一个Configuration,才能够开始使用。另外选择文件路径的图标是在最左侧。

P.S.S 我最喜欢的开发者辅助工具之一,Doc?,也已经放出3.0Beta版本。增加了如远程文档,自定义Title等功能。点击这里访问。

Tour de Flex: Planetary Dashboard

由 Jinni 于 January 18th, 2010 8:38 pm 发布 1条评论

Tour de Flex堪称是Flex/AIR开发者的福音,也是我迄今为止看到的最好的开发者参考工具。通过Planetary Dashboard,你可以查看到每秒钟全世界有哪些开发者在使用Tour de Flex,甚至可以看到他们在查看哪些实例。酷!

完全基于Flash的支付流程

由 Jinni 于 January 14th, 2010 9:56 am 发布 3条评论

Ryan Stewart介绍的Social GoldIn-Game Playments确很酷,特别是对国内很多做Social Game的公司来说,值得参考。

目前为止,我们看到的绝大多数Flash游戏/应用的支付都是通过弹出或者跳转到其他网页,用户完成支付,再回到游戏中的流程。而Social Gold推出的解决方案,可以让你完全在Flash中安全地完成整套支付流程。

由于天朝锁国,我还是照例将Youtube视频转移到Youku:

AIR 2.0 Beta 2即将开放下载

由 Jinni 于 January 14th, 2010 9:07 am 发布 0条评论

根据AIR TeamBlogAdobe Labs最近将放出AIR 2.0 Beta2的下载。
敬请关注。