最近准备恢复编写飞信系列文章,请关注。 所有飞信2010分析系列文章中所有的测试代码请在这里下载: SSISignV4Test.zip
2010年12月28日 | 分类: Air 应用程序开发 | 标签: , , ,

昨天折腾了一个晚上,终于把我写的美女时钟桌面 的air应用程序给发布出去了,在发布的过程中还出现了点问题(下文有说明),不过总算解决了累死我了。 Air应用程序的部署和发布不是一般的麻烦,想来很多和我一样的Air初学开发者在部署Air应用程序可能都不知道怎么做,于是我写了这篇文章,希望能对你有所帮助。 如果你想发布一个Air程序,需要两个步骤,打包和部署。下面对这两个步骤都做详细的说明。本文以上次发布的 美女时钟桌面 作为示例。

一、打包Air应用程序

步骤1. 生成签名文件(数字证书, CA)

Air的应用程序签名(CA)是强制,不签名无法打包应用程序,签名基于RSA不对称加密,生成一对公钥和私钥,使用私钥加密应用程序,同时公布把公钥打包到应用程序中,可以防止其他用户修改发布的Air应用程序然后再发布。 一般来说,获得签名文件的方法有两种:

  • 1) 可以向安全的证书管理机构如VeriSign或Thawte获取证书,这种证书是安全的,并且Air安装程序可以自动联网获取证书信息,如签名者,颁发机构,有效期等。如果联网能查到当前Air安装程序的信息,表明这个程序是未被修改的,原始程序。当然这个需要交纳一定的费用,如果你是开发一个完整的应用程序,并且能保证随时更新,还是建议你使用这种方式获取签名文件。
  • 2) 使用 ADT 创建自签名证书,您可以生成有效的 AIR 安装文件,但由于无法验证自签名证书的可靠性,因此该证书只能向用户提供有限的安全保证。当安装自签名 AIR 文件时,发行商信息将对用户显示为“未知”。ADT 生成的证书有效期为五年。如果只是测试Air应用程序,推荐这种方式。

这里采用第二种方式发布,简单,免费,方便。 首先请确保 命令 AdobeAIRSDK/bin/adt.bat (linux下为adt)在环境变量中,然后执行以下命令:

adt -certificate -cn solosky -o solosky.net 1024-RSA SigningCert.p12 god!1#$

参数说明如下:

  • -certificate 当前命令为生成签名文件
  • -cn solosky 分配的作为新证书公共名称,必须。这里是solosky
  • -o solosky.net 被分配作为证书颁发组织名字。可选。这里是solosky.net
  • 1024-RSA 用于证书的密钥类型,即“1024-RSA”或“2048-RSA”,必须,这里是1024-RSA
  • SigningCert.p12 保存证书的文件名字,必须,这里是SigningCert.p12
  • god!1#$ 签名私钥,以后签名程序的时候需要输入这个密码,必须,这里是god!1#$

执行完毕后会在当前目录生成一个SigningCert.p12的签名文件,请妥善保管好这个文件,以后更新程序的时候需要使用相同的签名文件签名程序,否则无法完成更新操作; 更多关于adt签名的信息请参考这里对 AIR 应用程序进行签名

步骤2. 打包Air应用程序

生成签名文件之后,接下来就可以直接打包为.air的安装文件了。 首先用cd命令进入air应用程序目录,然后执行以下命令

adt -package  -storetype pkcs12 -keystore ../shells/SigningCert.p12 -keypass god!1#$ girlclock-1.0.air girlclock-air.xml .

参数说明如下:

  • -package 当前命令为打包air应用程序
  • -storetype pkcs12 签名密钥类型,保持不变
  • -keystore ../shells/SigningCert.p12 签名文件地址,切记一定不要放在应用程序目录下,否则签名文件也会打包到应用程序。。。
  • -keypass god!1#$ 签名文件的私钥,创建签名文件的时候输入的密码,运行之后仍需输入一次
  • girlclock-1.0.air 输出的air发布程序名,一般都以air为后缀
  • girlclock-air.xml 应用程序的描述文件
  • . 打包的目录,.表明是当前目录,切记别忘记最后面的一点

命令执行完毕,在当前目录会生成girlclock-1.0.air的air部署文件,整个打包过程完成; 更多关于adt打包信息请参考 使用 AIR Developer Tool (ADT) 打包 AIR 安装文件

如何生成exe可执行程序

你还可以指定target native参数,生成本地的可执行文件(window下为exe,linux为deb或者rpm,MacOS为dmg),但这就丧失的air的跨平台性。 如下命令将会生成girlclock-1.0.exe文件:

adt -package  -storetype pkcs12 -keystore ../shells/soloskyAirSign.p12 -keypass god!1#$  -target native girlclock-1.0.exe girlclock-air.xml .

如果生成本地可执行文件,请注意以下几点:

  • 1. 这种发布文件无法通过下面的网页部署方式部署;
  • 2. 可以直接把可执行文件发布出去,用户下载可执行文件,第一次运行时会自动检测Air运行时环境,如果没有会自动下载安装,满足安装条件后会自动安装到系统中,并在开始菜单中创建快捷方式,系统程序卸载工具中创建卸载方式;
  • 3. 如果你的应用程序需要支持NativeProcess(即supportedProfiles配置为extendedDesktop),则必须采用这种方式打包和部署,我在这里纠结了很久;
  • 4. 无法支持Air的Update框架,但有开源的解决方案(请google之);

二、部署应用程序

因为Air应用程序运行需要Air运行时环境,所以部署起来有点复杂,这里提出了三种部署方式,建议在发布air应用程序的时候,这三种方式都采用,尽量让所有的用户都能顺利的安装上air应用程序;

1. Web部署

这种方式只适合打包类型为.air类型的应用程序的部署。 直接把.air的文件提供给用户下载是不行的,因为Air应用程序运行需要Air运行时环境,所以假如用户没有安装air运行时环境,就无法运行.air的应用程序。好在air官方发布了一个统一的安装包,可以在网页上直接安装air应用程序,并且会自动检测用户是否安装air运行时环境,如果没有会自动下载安装,提供了无缝的安装体验,非常的方便,只不过部署起来比较麻烦:

  • 1. 先从官方网站下载 air安装包文件(Adobe AIR Badge Installer),并解压;
  • 2. 建立web目录,把生成的.air应用程序文件(girlclock-1.0.air),以及解压之后的安装包文件里面的AIRInstallBadge.swf,swfobject.js,expressinstall.swf四个文件复制到web目录下;
  • 3. 为你的应用程序截图,调整大小为205×170像素,重命名为snap.png也复制到web目录中;
  • 4. 新建一个文件deploy.html,复制下面的内容到这个文件里,然后修改部分参数,保存(当然你也可以复制到你的发布页中,注意一定要包含swfobject.js脚本);
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>美女时钟桌面 v1.0 在线安装</title>
    <script type="text/javascript" src="swfobject.js"></script>
    </head>
    <body>
    <div id="flashcontent" style="width:215px; height:180px;">
    <strong>请升级你的Flash Player。</strong>
    程序安装需要 Flash Player 6.0.65 或者更高版本的Flash Player。
    </div>
    <script type="text/javascript">
    // <![CDATA[
    
    // version 9.0.115 or greater is required for launching AIR apps.
    var so = new SWFObject("AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
    so.useExpressInstall('expressinstall.swf');
    
    // 下面的参数在网页安装air应用程序的是必须的
    so.addVariable("airversion", "2.5"); // 修改为运行你的air应用程序需要的最低运行时环境版本
    so.addVariable("appname", "GirlClock"); // 修改为应用程序名,将会在安装界面上显示给用,仅支持英文....
    so.addVariable("appurl", "http://labs.solosky.net/air/girlclock/girlclock-1.0.air"); //你的.air打包文件的绝对地址,必须以http或者https开头
    
    // 下面的参数在网页启动air应用程序是必须的,但安装时是可选的,
    so.addVariable("appid", "net.solosky.girlclock"); // 应用程序Id,命名方式类型于java的包命名方式(ex. com.gskinner.air.MyApplication)
    so.addVariable("pubid", ""); // publisher id
    
    // 这个参数是可以为airy应用提供在线升级支持
    so.addVariable("appversion", "1.0"); //你的应用程序版本
    
    // 下面的参数是可选的
    so.addVariable("image", "snap.png"); // 应用程序截图(205x170像素),推荐设置
    
    //下面的参数请根据自己需要修改
    so.addVariable("appinstallarg", "installed from web"); // passed to the application when it is installed from the badge
    so.addVariable("applauncharg", "launched from web"); // passed to the application when it is launched from the badge
    so.addVariable("helpurl", "help.html"); // optional url to a page containing additional help, displayed in the badge's help screen
    so.addVariable("hidehelp", "false"); // hides the help icon if "true"
    so.addVariable("skiptransition", "false"); // skips the initial transition if "true"
    so.addVariable("titlecolor", "#00AAFF"); // changes the color of titles
    so.addVariable("buttonlabelcolor", "#00AAFF"); // changes the color of the button label
    so.addVariable("appnamecolor", "#00AAFF"); // changes the color of the application name if the image is not specified or loaded
    
    so.write("flashcontent");
    
    //更多参数请参见 http://www.adobe.com/devnet/air/articles/badge_for_air.html
    // ]]>
    </script>
    </body>
    </html>

    现在整个目录的内容如下图:air-web-deploy-dir

  • 5. 将web目录下面的所有文件上传到你的网站服务器上,然后输入deploy.html查看是否出现安装提示。如下图:air-web-deploy-preview

更多关于air无缝安装包(Adobe AIR Badge Installer)请参考 Getting started with the custom install badge

2. 本地程序部署

使用上面的打包方法打包为本地应用程序,如indow下为exe,linux为deb或者rpm,MacOS为dmg,可以直接双击执行,但不包含air运行时环境,当用户运行应用程序的时候会自动自动检测系统是否已经安装air运行时环境,如果没有会自动下载并安装。 这种类型的发布程序部署比较简单,直接发布出去即可,

3. 包含air运行时环境部署

这种方式可以直接把air运行时环境和air应用程序打包在一起,而不用考虑用户是否已经安装了air运行时环境。但由于包含了air运行时环境,所以有点大,大概20M左右的大小,对于无法联网或者自动安装失败的用户可以尝试使用这种方式发布。 网上的方案比较多,这里还是推荐 梦宇工作室 编写的 AirLauncher 来打包air应用程序。 遗憾的是仅支持windows。原理很简单,就是启动进程调用adl命令启动程序,但没有命令行窗口。

  • 1. 首先建立pack目录,然后把应用程序的所有文件都复制到pack目录中;
  • 2. 在pack目录中建立AdobeAIRSDK目录,并把AIRSDK目录下面的bin和runtimes复制到pack/AdobeAIRSDK下;
  • 3. 复制AirLauncher.exe到pack目录下,并修改应用程序描述符为application.xml;双击运行AirLauncher.exe看能否启动air程序,如果能,工作完成了大部分href=”http://flexlessons.googlecode.com/files/ResHacker%203.5.zip”>ResHack修改;整个文件目录结构如下图:air-pack-deploy-dir
  • 4. 你可以重命名AirLauncher.exe为你的应用名称,如girlclock.exe,程序图标可以使用
  • 5. 打包pack目录下的所有文件为.zip文件,并发布这个压缩文件到网页上即可。

你可以在这里查看AirLauncher的作者更详细的打包教程:用WinRAR制作脱离AIR运行时的AIR程序安装包

上面三种方式都可以完成air应用程序的部署,推荐使用Web部署和本地部署,包含air运行时环境部署也建议一并发布,如果每一种方式不可用,可以尝试其他的安装方法。尽量让每个用户都能用上你写的air应用程序。

6 条评论 (2,161 浏览)
2010年12月26日 | 分类: Air 应用程序开发 | 标签: ,

最近看上了air,这个东西真不错,可以用js+html开发桌面程序,简直就是给我定制的。平时没做桌面应用程序,就是因为写GUI太痛苦了,air可以用css+html来做界面,并且可以用我最喜欢的js来开发桌面程序,太爽了,呵呵~

这个程序是很久就准备写的东西,看到air不错,于是就拿来写,还不错,虽然效率不咋地,写起来很自在。
美女时钟桌面,可以从搜道网(http://www.sodao.com)上每隔1分钟下载一个时钟美女(就是一个美女拿了个牌子上面写了当前的时间,很有创意),然后把这个美女贴在桌面上,嘿嘿,搜道的美女都还挺漂亮的,慢慢看吧,1天1440个美女够你看的了。。O(∩_∩)O~
girlclock-1.0

一些说明
1.更新时间推荐设置为2分钟,1分钟可能会出现更新滞后的情况;
2.可以选择把美女图片保存到某个目录下;
3.可以拖动美女图片和美女信息到合适的位置,点击预览按钮查看效果;
4.如果拖动出现问题,可以点击重置按钮恢复原始位置;
5.设置自动保存,下次启动自动读取上次设置;
6.如果出现图片位置和预览不符,可以尝试更改不同的墙纸平铺方式试试;

下载和安装
下载美女时钟桌面 v1.0
程序运行需要air运行时环境,下载完毕后,双击girlclock-1.0.exe即可安装。如果没有Air运行时环境,安装程序会自动下载Air运行时环境并安装。
如果下载Air运行时环境过慢,你可以点击这里下载air运行时环境手动安装,安装完毕之后再双击girlclock-1.0.exe安装美女时钟程序。

反馈和建议
如果你在安装和使用的过程中遇到了什么问题或者有好的建议,请在下面留言或者给我发邮件solosky772[at]qq.com,我会在第一时间回复你。

图片版权归搜道网(http://www.sodao.com)所有。

PS:
代码和界面都比较点烂,练手的作品,如果有时间会全部重写代码。但为了学习,公布全部的代码,高手别砸砖呀O__O”…
你可以在这里下载源代码。

下载地址
美女时钟桌面 v1.0 下载
air运行时环境 下载
美女时钟桌面 v1.0 源代码 下载

7 条评论 (1,265 浏览)
2010年8月1日 | 分类: 飞信哪些事儿 | 标签:

重要前提: 使用飞信号登陆

是的,只要有使用飞信号登陆就可以绕过2008验证码。其实,在飞信登陆的过程中,第一步获取自适应的配置,和第二步SSI登录,这两步可做可不做。
SSI登录那一步有两个目的:
1、获取飞信的URI,我最近发现,其实URI后面的p值没有太多的含义,随便写都可以,主要是飞信号。
2、获取SSIC。SSIC主要是WEB部分,如获取头像,设置头像等需要验证身份必须要SSIC。如果不进行这些操作,SSIC可以不需要;
上面两点,如果都不需要,SSI就可以不做。而在2008的客户端中,验证码的出现是在SSI的过程中,如果不做,就可以绕过验证码。

从上面的分析可以看出,如果你有飞信号,就可以不SSI登录,也就绕过了验证码。至于用户的Uri可以自行构造:
sip:{飞信号}@fetion.com.cn;p=1234,后面p的值可以随便写。

另外在SIPC验证的过程中,第二步用户验证的那个包,有个A字段,里面有SSIC,直接去掉就可以了

R fetion.com.cn SIP-C/2.0
F: 123456789
I: 1
Q: 2 R
A: Digest algorithm="SHA1-sess",response="49A3741AC50CDFABD704240E19B2A7C1",cnonce="479940A21881CD5C307D47F21586F38C",salt="2764D001"
L: 298

<args><device type="PC" version="0" client-version="3.5.1170" /><caps value="simple-im;im-session;temp-group;personal-group;im-relay" /><events value="contact;permission;system-message;personal-group;compact" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>
29 条评论 (2,759 浏览)
2010年8月1日 | 分类: 飞信哪些事儿 | 标签:

飞信2010分析 – SIPC验证 文章里,简单的提到了飞信使用HTTP传输模式。
HTTP模式是所有传输方式中效率最低,是在其他传输方式都建立失败后才会采用HTTP传输模式,可见飞信在网络环境适应上下了很大的功夫的。

在第一步获取自适应的配置中,曾经提到下面几个参数:
含义 位置 结果举例
SIPC-PROXY /config/server/sipc-proxy 221.130.46.141:8080
SIPC-SSL /config/server/sipc-ssl-proxy 221.130.46.141:443
HTTP-TUNNEL /config/server/http-tunnel HTTP://221.130.46.141/ht/sd.aspx
飞信建立连接主要就是这三个传输方式。

来看下飞信的建立连接的顺序:
第一步: 尝试连接建立 SIPC-PROXY连接 。 即SIPC服务器端口为8080的连接。 这是最稳定的,效率最高的传输方式。
第二步: 如果第一步失败,则尝试建立SIPC-SSL连接。 即SIPC服务器端口为443的连接。 和SIPC-PROXY连接方式完全一致,就是端口变了。虽说是SSL端口,却仍然没有加密;
第三步: 如果第二步失败,则尝试建立HTTP-TUNNEL连接。 即HTTP代理连接。 采用长连接的模式,效率比较低,而且不太稳定。不过只要能访问HTTP,就可以连接上飞信服务器。
第四步: 如果第三步建立失败,则飞信客户端和飞信服务器建立连接失败。

可以看出如果要分析HTTP模式,则需要把SIPC-PROXY和SIPC-SSL的IP和端口堵上。一般都是相同的IP不同的端口,可以使用防火墙来完成。
HTTP分析可以使用HTTPAnalyzer帮助分析。 在我的飞信资源整合那篇文章中有这两个工具的下载。

在分析之前,还是简单的介绍长连接模式。因为HTTP模式下就是使用了长连接的方式。
我们知道HTTP是一个请求-回复类型的协议。在发起一个请求之后,服务器需要返回一个回复。可以理解为是单向的,请求只能是浏览器发送,服务器只能被动的接受请求处理请求,并不能主动的和客户端发送消息。
在Socket通信模型中,客户端和服务器的通信是双向的,客户端可以主动的向服务器发送信息,服务器也可以主动的向客户端发送信息。这在即时通信里面很有必要,假如其他用户主动的发消息给你,服务器可以在第一时间内主动的发消息通知你。
飞信是需要双向通信的模式,但HTTP服务器是不能主动的给客户端发送信息的。于是产生了长连接的技术,也就是Comet,来模拟服务器主动给客户端发送消息。
长连接其实很简单,客户端主动的发起一个HTTP请求给服务器,服务器收到这个请求后,会查看是否有消息可以返回给客户端,如果有把消息放入回复体内,立即返回给客户端。如果没有,就阻塞掉这个请求,不返回,直到服务器有可以返回的消息或者超时才结束这个请求。客户端检查这个请求,如果是超时,就立即发起另外一个请求,如果不是超时,就处理服务器的返回的数据,处理完了继续发起下一个请求。
这样服务器就始终保留了一个客户端的连接,如果收到消息后就可以立即返回给客户端,完全可以模拟Socket双向的通信模式。

只不过这种模式效率低,而且不太稳定,服务器资源占用率大(因为要维持多个连接),不过在一些特别的情景下需要使用。目前WebQQ和WebFetion等即时通信的WEB都是采用了这样的通信模式。
详细的长连接信息请参见IBM工程师写的文章 – Comet:基于 HTTP 长连接的“服务器推”技术 。

分析很简单的,不罗嗦过程,直接写结果吧。
HTTP模式下,假如HTTP://221.130.46.141/ht/sd.aspx为获取自适应配置返回的HTTP-TUNNEL地址:

下面是一个HTTP请求的例子:

POST /ht/sd.aspx?t=s&i=2 HTTP/1.1
Cookie: ssic=CRIOAAA0L0hiEKIY+8MORa3QNc4OJcB3rACWXefS7rmhOaQ5fifHEGsFh8+wPK91WlYD9M4zEqvgSG/hiReF2X30HurJRVRinJLO12MtuQdrY9lN4fpni9AvwA6Qj/FDkKr0wT8AAA==
Accept: */*
Pragma: xz4BBcV9df9de4e-0cd9-49c5-bf32-6adc28fcee63
Host: 221.130.46.141
Content-Length: 134
Content-Type: application/oct-stream
User-Agent: IIC2.0/PC 4.0.0000
Connection: Keep-Alive
Cache-Control: no-cache

R fetion.com.cn SIP-C/4.0
F: 685592830
I: 1
Q: 1 R
CN: 258dbcc7cc8a1633c677ebb0abaa5168
CL: type="pc",version="4.0.3340"

SIPP
------------------------------------
HTTP/1.1 200 OK
Connection: close
Date: Sun, 01 Aug 2010 03:14:12 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: application/oct-stream
Content-Length: 4

SIPP

就着这个例子,逐步的分析。
请求的方式为POST。
在URL上面有两个参数:
t : 请求的模式,取值有 i,s,d,下面会有详细的说明;
i : 请求的序号,随着请求的次数递增;
还传递了一个Cookie: ssic。 ssic是SSI登录成功后,会在HTTP头中使用标准set-cookie方式返回;
在请求头中还有一个Pragma域,在整个请求中不变,可能是标志唯一的客户端。前面七个字符固定为xz4BBcV,后面是一个GUID,可以随机生成
其他可以保持不变。
阅读全文…

14 条评论 (2,397 浏览)
2010年7月1日 | 分类: 乱七八糟的东东 | 标签:

这个东西是为科技立项做的,但由于种种原因没有验收,就搁在那里。今天和同学的电脑换回来,清理东西的时候才想起,发在这里有兴趣的朋友拿去研究吧··

我用了一周的时间赶出来的,差不都6000++的代码量,平均一天1K左右,我自己都觉得神奇。。也是个半成品,懒得写了,谁有兴趣谁拿去。

使用之前请配置好Gateway.xml里面的网关信息。可以在这里下载源代码。

下面是关于MapleTMS的介绍。

======================MapleTMS==========================

关于程序的介绍
-----------------------------
短消息服务平台是用户通过一条简单短小的消息和服务平台交流信息的平台。在这个消息平台上,运行了很多的小程序,可以给用户提供各种各样的信息。用户可以发送一条短小的消息请求向平台来获取用户感兴趣的信息,例如查询课表信息。

短消息服务平台集成了多种通信网关,如飞信,短信,QQ,MSN,GTalk等即时通信网关,用户可以自由地选择一种通信网关来和短信服务平台交流信息。

短消息服务平台也是一个运行容器,在上面运行了很多的消息小程序,由这些小程序来完成用户消息的交互。开发者可以根据开发文档独立地开发特定应用的消息小程序并部署到短消息服务平台上,来扩展短消息服务平台提供的消息服务。

短消息平台以一种简单的方式来向用户提供信息,彻底地减少了以前获取信息的繁杂步骤,只需简单的一条短消息就可以获取急需和有价值的信息,十分的方便。短消息平台还可以主动地向用户推送信息,让用户和最新的、及时的信息保持同步,可以让用户远离信息延迟,很有应用价值。

程序的组成
---------------------------
程序由两部分组成,消息服务平台和消息网关。消息服务平台为用户提供信息,消息网关是不同聊天客户端的代理,所有的各种类型的聊天客户端的消息都通过消息网关转发给平台,平台发给用户的消息也是通过消息网关转发的。

短消息平台(MapleTMS-Platform)
----------------------------------
目录结构:
	lib - 存放了平台运行所有的依赖的库文件
	bin - 启动脚本
	conf - 存放了平台的配置信息的文件夹
	  └ MapleTMS.xml 平台配置文件
	apps - 存放了消息应用小程序
	 └ Test - 应用项目文件(可以有多个项目文件夹)
	      ├libs - 当前应用所有的消息小程序依赖的库文件
	      ├classes - 应用小程序.class文件存放的位置
	      └Application.xml 项目的部署文件,存放了所有应用小程序的信息和导航信息

消息网关(MapleTMS-Gateway)
----------------------------------
目录结构:
	lib - 存放了平台运行所有的依赖的库文件
	bin - 启动脚本
	Gateway.xml - 网关的配置文件

网关现在已经支持 飞信,MSN。其他仍待实现。

程序启动
----------------------------------
1. 启动短消息平台(启动消息平台.bat)
2. 启动消息网关 (启动消息网关.bat)

如何使用
----------------------------------
比如现在设置了一个飞信网关,飞信号为 23023121,首先提示用户在飞信客户端添加 23023121 为好友,然后飞信网关会自动同意添加好友请求,之后用户就可以随意的给  23023121 发送一条消息, 23023121好友就会发送回欢迎信息,然后根据提示回复相应的编号即可获得相应的服务。
其他类型网关类似。

消息应用小程序的开发和部署
----------------------------------
略,详见 小程序的开发和部署.txt 文件
默认有一个Test消息应用,包含了两个消息小程序:
	HelloInfolet - 这个是经典的HelloWorld演示
	WeatherInfolet - 天气查询,默认是成都,可以输入TQ#城市(如TQ#重庆)查询其他城市的天气

关于版权
----------------------------------
本程序基于Apache Lisence 2.0 发布,你可以自由的分发本程序。请不要用于非法用途。
网关中所使用的开发库版权申明如下
LumaQQ(http://lumaqq.linuxsir.org/main/)  	luma seraph 版权所有
MapleFetion(http://maplefetion.googlecode.com) 	solosky版权所有
jML(http://sourceforge.net/projects/java-jml/)	 jadestorm 版权所有	

关于作者
----------------------------------
Mail:solosky772@qq.com
Site:http://www.solosky.net

最后发几张截图…
阅读全文…

4 条评论 (1,351 浏览)
2010年6月29日 | 分类: 乱七八糟的东东 | 标签:

很久没来我博客写文章,一个是我的确很懒,二个是我也不知道写什么,平时写代码时的遇到问题感觉还不屑写在这上面,于是就搁置了。翻了翻我以前写的飞信系列文章,访问的人还不少,感谢大家的关心。其实我对飞信有很多东西和大家分享,无奈我的确有点懒,而且文笔不咋地,写个文章有时候文笔不通,让大家见笑了。马上放假,我也要去实习了,最近准备开始恢复写飞信系列的文章,对这两个月的无所为感到万分的抱歉….

最近赶学校一大堆报告和作业,也做了点有趣的,很垃圾的东西,我扔在这里,希望逗大家开心下。

下面的作品,完全没技术含量,纯属娱乐,无聊,还有交作业….

接水果的游戏,看看能在3分钟内接到多少分的水果… 【这里可以下载源代码】【全屏

 

抢钱的游戏,纯属脑残,天上掉金币,砸到了就是你的了…  【这里可以下载源代码 】【全屏

最后一个还像点样子,用Flex做的很简单的一个播放器。本来想添加动态歌词的,google了下没有接口,暂时就放弃了…界面很友好的说… 【这里可以下载源代码】【如果不能打开,请点击这里查看】

7 条评论 (958 浏览)
2010年4月25日 | 分类: 乱七八糟的东东 | 标签:

前不久,腾讯体验室推出了QQ概念版。QQ概念版应用微软最新一代客户端展现层技术——WPF,实现多点触摸操作,是腾讯首款NUI(自然用户交互)产品,推出了动感相框、动态背景、多Tab聊天窗口、3D交互、桌面好友等一系列新功能,为您打造完美尊贵的新体验。

qq-concept

下面是官方的演示视频。第一个是多点触控演示,操作很流畅,用户体验超好,触控操作是以后人机交互的趋势,腾讯终于迈出了自主创新的第一步了。

当然如果没有触摸屏,用鼠标操作也可以,只不过用户体验没触控操作好了。

目前QQ概念版还在体验室,没有正式发布,要体验的朋友还得去官方申请体验。

特别说明:QQ概念版只能在win7下运行,如果你用的是XP,和我一样,只能看看视频了。。我这破本本,三年前买的,Win7能跑动,就是硬盘小了,只有80G,还是老老实实的用XP吧。。

官方首页:http://labs.qq.com/labs/gainian.shtml

体验中心:http://exp.qq.com/cgi-bin/present/tec_cgi_present_plan_info?plan_id=133

没有评论 (1,050 浏览)
2010年4月21日 | 分类: 乱七八糟的东东 | 标签:

楼主

刚跟一个金融界的哥们吃饭,他说到:“我刚送了女友一副24K的手镯, 她很喜欢,现在女人真是不好养啊!”
我非常郁闷:“唉,难怪我没有女友,我也就能送个24K的新建文本文档……”
刚跟一个金融界的哥们吃饭,他说到:“我刚送了女友一辆40w的车,她很喜欢,现在女人真是不好养啊!”
我非常郁闷: “唉,难怪我没有女友,我也就能送个40w的灯泡……”

楼主一发,楼下盖楼之势犹如滔滔黄河泛滥不绝..想来园子里朋友都是debug良久,憋屈之极,跃然于纸上…

刚跟一个金融界的哥们吃饭,他说到:“我刚送了女友一2000欧的表,她很喜欢,现在女人真是不好养啊!”
我非常郁闷: “唉,难怪我没有女友,我也就能送个2000欧的电阻……”

哥们是搞电子的??
阅读全文…

没有评论 (1,320 浏览)
2010年4月21日 | 分类: 乱七八糟的东东 | 标签:

没啥目的,想到很多人都在为找免费的图床伤透了脑筋,因为往往图片占据了网站的大部分流量。于是启动了这个项目,希望对像我这样的草根站长提供帮助。。
下面是我googlecode上的项目介绍:

WebCDN可以使用互联网上廉价的、免费的存储空间来帮助你把文件分散地存储到不同的节点,并且生成可以访问的的URL地址。

做过站长的朋友都会知道网站的图片往往是最耗传输流量的,所以很多站长都会选择第三方可以外链的图片存储空间来存储图片。但免费且稳定的图片存储空间不容易找,而且很容易失效,这样又得重新换一个图片存储空间来上传图片,十分的麻烦。 自己做图片存储空间备份又麻烦而且限制太多。

WebCDN可以帮助你解决这些麻烦。WebCDN已经集合了互联网上免费稳定的图片存储空间,把这每个图片存储空间作为一个节点,用户可以启用多个存储节点,当用户上传一张图片,WebCDN会自动的把这张图片分发到不同的存储节点,保证这张图片存储多份。当用户需要访问这个图片时会自动选择最快的节点浏览图片。并且WebCDN会随时检查节点的有效性,当检测到某个节点无效后会自动移除这个节点,保证用户图片的正确访问。WebCDN还可以帮你自动的完成图片备份到本地,减少你备份图片的时间。

当然WebCDN不只是能存储图片,也可以存储其他类型的文件,只要节点支持存储这种类型的文件就可以存储。

WebCDN适合帮助你保存小于2M的文件,较大的文件建议还是采用网盘保存。

WebCDN使用PHP作为开发语言实现的。

目前正在设计中。。

项目地址:http://code.google.com/p/webcdn/ 欢迎有兴趣的朋友加入开发!!

5 条评论 (1,346 浏览)
2010年4月21日 | 分类: 飞信哪些事儿 | 标签:

今天发这篇文章刚好是全国哀悼玉树地震的中遇难的日子,整个互联网都很悲伤。的确,我也是亲身经历过汶川的地震,经历过那种面对死亡的恐惧和重生过后的喜悦。
汶川地震,我们活着,我们是幸运儿。我们每一个在这场大劫中余生的人,都应该有一种获得重生的净化。在自然面前,人的生命是那么的脆弱。活着,比一切都好。这是地震给我最大的感触。
而在地震中不幸遇难的人们,我们应该为他们祈福,愿他们在天堂活得快乐……阿门····
谨以此文纪念在玉树地震以及汶川地震中死去的同胞们!

飞信发送消息用的是SIP协议里面的标准的M请求。飞信给客户端在线的好友和短信在线的好友发送消息的方式是不同的。我们来先看给状态为短信在线或离线的好友发送消息。

注意我这里说的是消息。飞信由于有短信就有点复杂。解释一下:飞信用户可以给飞信好友发送消息(只要是在用户好友列表里面的用户都视为飞信好友,无论是否开通飞信),
1.如果用户在线,消息直接通过聊天服务器中转后直接发送给客户端。
2.如果好友不在线,
a.好友设置为飞信客户端离线时使用手机短信接收飞信消息,给该好友发送的消息就通过飞信的短信服务器直接通过手机短信的方式把消息发送到好友的手机上,
b.用户设置为客户端不在线不用手机接收飞信消息,飞信服务器就保存用户发送的消息,不发送到好友的手机,然后等待好友再次登录客户端后才发送给好友。

现在来说明好友URI为sip:111111111@fetion.com.cn;p=1111,状态为短信在线或者离线或者隐身,发送和接收飞信消息的交互过程。(如何判断好友是客户端在线,还是短信在线,还是离线,请参见我上一篇文章。)
阅读全文…

3 条评论 (4,252 浏览)
Page 1 of 3123