新浪UED

使用新浪微博Flash SDK开发应用

by flashache / 前端开发,博客 / 2010-12-10
使用新浪微博Flash SDK开发应用

为了广大的flash草根开发者更容易上手flash sdk开发新浪微博的应用,在此给大家详细介绍使用flash sdk的开发流程。

1、创建自己的应用
使用微博帐号登录http://open.t.sina.com.cn/,点击“我的应用”,右侧有一个醒目的按钮“创建应用”。
填入相应要求的应用属性并点击“创建”即可。这里需要说明的是:“域名绑定”。大家都知道,Flash的网络应用,请求接口会受到crossdomain.xml的跨域请求限制。你的应用如果是air桌面应用,则无需设置域名绑定,因为他不受跨域限制,如果你的应用是网络应用,则需要查看下将来上线的域名是否在这个白名单中http://api.t.sina.com.cn/crossdomain.xml
通常情况下,如果你使用的是新浪SAE平台http://sae.sina.com.cn/则不用设置跨域,如果是你自己的域名,则一定要绑定域名,绑定的域名既是你将来要使用的上线域名,否则你的应用将无法获取到数据。
创建完成后你会获得App Key和App Secret,这两个会在sdk中使用

2、获得flash sdk的代码包
打开Flash SDK演示站点http://flashsdk.sinaapp.com/api.html, 右上角有一个Source 下载按钮,点击下载到本地硬盘(也可以使用svn去checkout https://weibosdk.googlecode.com/svn/trunk/)

3、创建Flash工程(此处以Flash IDE为例)
建立一个工程目录,例如HellowFlashSDK,创建Main.fla(Actionscript 3.0)
舞台上放一个按钮,命名为btnLogin,用途是用于登录的触发的。这里要说明的是,网络应用建议使用sdk 的第一种登录方式(详见演示站点)。这种登录方式会弹出一个授权框,由于安全机制,需要用户使用点击按钮的方法来触发。不能直接调用。

4、关联sdk代码包
从第一步获得的代码包里面有两个目录,bin目录是weibo-flash-sdk.swc,可以在Flash IDE中设置Library path关联这个swc代码包,或者更简单的就是直接将src目录下面的com整个拷贝到你的工程目录中。

5、动手编码
创建一个Main.as

package  {
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;

	public class Main extends MovieClip {

		private var _btnLogin:SimpleButton;

		///构造函数
		public function Main() {
			init();
		}

		///初始化函数
		private function init():void
		{
			_btnLogin = this["btnLogin"];
			_btnLogin.addEventListener(MouseEvent.CLICK,onLoginClick);
		}

		///点击登录按钮后触发登录
		private function onLoginClick(e:MouseEvent):void
		{

		}
	}
}

设置Main.fla的文档类为Main.as

6、使用Flash SDK
Flash sdk使用的是内置的事件机制,通常每个接口调用都有对应的事件抛出,包括正确和错误两种情况。
说明几个问题:

  • 由于使用的是Flash IDE(我用的是CS5),所以在你测试工程的时候(Ctrl + Enter),由于登录在浏览器中完成,swf无法将浏览器的cookie信息给发过去后台,所以虽然登录能成功但是将无法在本地调用到接口的数据。只能上传到线上,如果有绑定域的,需要传到绑定的域服务器,或者设置host去模拟。在此就不多说了。
  • 对于Flash Developer的开发者,可以设置Test Movie的环境是Play in popup,并且在内部的浏览器登录新浪微博,这样既可以模拟登录,也可以请求到数据。
  • 对于Flash Builder或Flex Builder的开发者,则没有这样的问题,可以实现正确调用到数据。

详见代码注释:

package  {
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import com.sina.microblog.MicroBlog;
	import com.sina.microblog.events.*;	

	public class Main extends MovieClip {
		///sdk的调用对象实例
		private var _mb:MicroBlog;

		private var _btnLogin:SimpleButton;

		///构造函数
		public function Main() {
			init();
		}

		///初始化函数
		private function init():void
		{
			_btnLogin = this["btnLogin"];
			_mb = new MicroBlog(); ///创建实例
			_mb.addEventListener(MicroBlogEvent.LOGIN_RESULT,onLoginResult); ///侦听登录完成后的事件
			_mb.addEventListener(MicroBlogEvent.LOAD_FRIENDS_TIMELINE_RESULT,onUserTimelineResult);///侦听调用获取用户好友发的微博接口结果事件
			_mb.addEventListener(MicroBlogErrorEvent.LOAD_FRIENDS_TIMELINE_ERROR,onUserTimelineError);///侦听调用获取用户好友发的微博接口错误事件
			_mb.source = "2105610709";///设置请求来源,就是创建工程时的app key
			_mb.debugMode = true;///设置为调试模式,如果没有此属性请update svn或者重新下载最新版本的sdk源码,记得上线版本去掉
			_btnLogin.addEventListener(MouseEvent.CLICK,onLoginClick);
		}

		///点击登录按钮后触发登录
		private function onLoginClick(e:MouseEvent):void
		{
			_mb.login();
		}

		///登录成功
		private function onLoginResult(e:MicroBlogEvent):void
		{
			_mb.loadFriendsTimeline(); ///登录成功后我们可以开始调用接口了,此处测试一个获取登录用户好友发的微博接口
		}

		///成功获取当前登录用户好友发的微博
		private function onUserTimelineResult(e:MicroBlogEvent):void
		{
			trace(e.result);
		}

		///获取当前登录用户好友发的微博发生错误
		private function onUserTimelineError(e:MicroBlogErrorEvent):void
		{
			trace(e.message);
		}
	}
}

一个注意点:
侦听MicroBlogEvent.LOGIN_RESULT,需要在设置source之前,原因是,如果你的用户在同一个浏览器中的另一个地方已经登录了,一旦设置source,sdk就会去获取用户的当前信息,会抛出登录的事件。

总结:
详细接口调用和另两种登录方式,可以参见演示app和asdoc文档。
Enjoy~

文章评论

  1. emilmatthew 说:

    给力,谢谢!

  2. 匿名 说:

    hi你好,我做个MySinaTest.swf放到网上提示 不能从 http://api.t.sina.com.cn/statuses/friends_timeline.xml 加载数据。。MySinaTest.swf 是小游戏,固定要传播到很多网站上不同域名,那么 这个跨域怎么解决?谢谢

    • 匿名 说:

      很多不同域并且不在信任域里面,现在只能是创建多个app,申请到很多个app key,并且绑定域名才行。

    • 匿名 说:

      多个域,并且在非信任域下,现在只能是创建多个应用,并且绑定域名才行。

  3. jovey 说:

    想个问题,如果做的应用是放在web上的,在游客未登录微博的情况下,就没办法调用loadUserInfo来获取用户信息吗?
    情况是这样的,我想做个web上的widget,类似QQ微博秀,但在开发的过程中发现,如果web客户端没有帐号登录,就没法调用到我的个人信息,这样我的个人信息也没办法显示在widget中。有没有什么解决方案啊?

  4. jovey 说:

    怎么发不了评论啊?有问题也没人给解决!

  5. 匿名 说:

    如果是多个域,并且在非信任域下,现在只能是创建多个应用,并且绑定域名才行。

  6. 评购网 说:

    您好,用你这个例子报错,怎么办? 放在绑定域名测试也不行。
    打开 URL ‘http://api.t.sina.com.cn/statuses/friends_timeline.xml’ 时出错
    onUserTimelineError:Error #2032: 流错误。 URL: http://api.t.sina.com.cn/statuses/friends_timeline.xml

  7. 木南 说:

    学习了,正好用来研究开发应用呢

  8. ic_win 说:

    您好,我在使用Adobe Air创建一个微博运用的时候遇到了问题,我已经将详细的信息发到了你的邮箱,请尽快帮我解决一下,好吗?

  9. 匿名 说:

    为什么我点击按钮的时候没有反应不会跳到授权页面呢?期待你的回答。我不是用IDE,而是代码直接写
    在main.fla。之后导出swf

  10. frogcjn 说:

    很给力!

  11. Justin 说:

    不错,就是想问一个问题,我用FD调试的时候,点击登录总是打开IE,如果使用FD内部的浏览器登录呢?求教~

  12. Justin 说:

    不错,就是想问一个问题,我用FD调试的时候,点击登录总是打开IE,如果使用FD内部的浏览器登录呢?求教~

    期待你的回答,谢谢~

  13. Justin 说:

    不错,真给力!我是用FD调试的,但是每次点击登录都打开IE,如果使用FD内部浏览器登录呢?求教了,谢谢~

  14. 匿名 说:

    我看了为什么还是不懂呢?能给的代码再详细点吗?

  15. zhucm 说:

    使用这种方式成功登录后,如何获取当前用户的信息呢?LOGIN_RESULT事件中的result值为空的,没有返回用户的信息

  16. 匿名 说:

    顶,想我的测试为什么会报错:40022:Error: source paramter(appkey) is missing,求解答。谢谢。

  17. mFqweibo 说:

    按照楼主的做法我做了一次,为什么点击按钮后,弹出的页面报错【HTTP500内部服务器错误】“
    网站无法显示该页面

    该网站正在进行维护。
    该网站有程序错误。”

    楼主帮我解答一哈啊,吐血了 啊啊啊啊啊 啊

  18. HAKU2012 说:

    怎么了,帮助不是退休了吧,怎么发表了文章之后,自己就隐身了。

  19. InnoReviews 说:

    Usually I do not read article on blogs, however I wish to say that this write-up very compelled me to try and do it! Your writing taste has been surprised me. Thank you, very great article.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

* 验证图片 刷新验证码

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>