自己写代码 - facebook4gwt Demo

GoogleDoc地址:http://docs.google.com/View?id=ddm59qt3_15gxxzj9f6

 

//

 

PC时代,用户和软件,都是孤立的。互联网时代,网站把用户连了起来。而到了现在,用户又在把网站连起来。


Web应用不再是那种只 读的网页,追求用户交互的同时你必然需要关心和你交互的是个什么人。因此越来越多各色Login 按钮出现在各色的网站。
人 类发展的必然就是一旦某种功能成了普遍的需求,就会出现新的分工,新的职业,甚至,新的平台。现在我们有了SNS

这个例子用的是 eclipse3.5+GWT2.0.1+facebook4gwt1.0.8。

1.在Facebook 上注册应用。

进 入http://www.facebook.com/developers/createapp.php 创 建新的应用,我取了个名字叫fb 4gwtdemoFacebook 什么都好,就是屏蔽了face这 个单词让我有些不爽,有点天朝的风范。然后这里能看到一个API Key和Secret以后有用,其他都不用管。在Eclipse中创建gwt 工程取名facebook 4gwtdemo , 什么都不改先Run一下,个人觉得这是个好习惯。本地server的链接是http://127.0.0.1:8888/Facebook4gwtdemo.html?gwt.codesvr=127.0.0.1:9997 , 回到刚才注册的页面,选到Connect,把这个地址填写到Connect URL。


这样呢,一会儿利用Facebook 登陆验证之后就会转到这个页面还 可以继续调试。


2.添加facebook 4gwt

首先肯定要下载 这个库了,地址在此http://code.google.com/p/facebook4gwt/downloads/list , 当前版本是1.0.8。我在工程目录下新建了一个lib目录,把下下来的facebook4gwt-1.0.8.jar放在了这里。然后再eclipse 里面选中工程属性->Java Build Path->Libraries,Add External JARs ,添加这个 jar。

现在eclipse已经可以找到facebook 4gwt 里面的类了,但是还没完。打 开facebook4gwtdemo.gwt.xml,在module名下添加
<inherits name="com.reveregroup.gwt.facebook4gwt.Facebook4gwt" /> , 看起来就像

    <!-- Other module inherits                                      -->
    <inherits name="com.reveregroup.gwt.facebook4gwt.Facebook4gwt" />

然后在war下 面,和html文件同一个目录下创建一个xd _receiver.htm 。里面写

<! 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">
<head>
<title> xd </title>
</head>
<body>
<script
     src ="http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.js"
    type="text/javascript"></script>
</body>
</html>

这 个是Facebook 提供的Javascript库。
只 有这样,facebook 4gwt 才真正可以用了。


3. 开始动手改代码

该开始改代码了,先改那个自动生成的Facebook 4gwtdemo .html, 现在重点是Facebook Connect,gwt 的问题就尽量简化,把 html里那个table删掉世界也就清净了。然后改EntryPointFacebook 4gwtdemo .java, 把类里面的东西全删了,然后再添加一个onModuleLoad () 方法。在这里面添加一个Connect with Facebook 的按钮,一个登录用户的头像。

Facebook 4gwtdemo 里 先创建一个String存放API Key,把刚才注册的得到的那一大串拿过来。
再添加一个LoginButton ,这个类是facebook 4gwt 里面的,在 com.reveregroup.gwt.facebook4gwt下面。
然后再添加一个Image对象,用来显示用户头像。

    private static final String APIKey = "782c84738b7d7f000ed6 af 4 xxxxxxxxx ";//此处换成你的API Key
    
    private LoginButton loginButton = new LoginButton ();
    private Image image = new Image();

然后在onModuleLoad 里调用Facebook .init (APIKey ); 然后把loginButton 和image添加到RootPanel 。然后调用Facebook .init (APIKey );

    public void onModuleLoad () {
        RootPanel.get().add(loginButton);
        RootPanel.get().add(image);
        Facebook . init ( APIKey );
    }

现在试一下,已经可以看到Facebook Connect按钮了。点了之后弹出Facebook 登录框,登录之后回到刚才在 Connect URL设置的地址也就回到了调试的页面。

继续,时间有点晚了写快一点。
onModuleLoad 里添加

        Facebook . addLoginHandler (new FacebookLoginHandler () {

            @Override
            public void loginStatusChanged ( FacebookLoginEvent event) {
                 updateUserInfo ();
            }
            
        });


Facebook 4gwtdemo 中 添加函数updateUserInfo

    private void updateUserInfo () {
        if ( Facebook . isLoggedIn ()) {
            Facebook.APIClient().users_getLoggedInUser(new AsyncCallback < FacebookUser >() {

                @Override
                public void onFailure ( Throwable caught) {
                    // TODO Auto-generated method stub
                    
                }

                @Override
                public void onSuccess ( FacebookUser result) {
                    image.setUrl(result.getPic());
& nbsp ;   & nbsp ;           }
     & nbsp ;          
            }, UserField .PIC);
        }
    }

OK,很好。跟进去看了看,facebook 4gwt 就是把Facebook 提供的Javascript接口 用native函数的方式封装了一遍,这样就不用自己写那种被注释掉的代码。Facebook 的 API很大一部分都是取用户的信息,这些函数都被统一到一起,然后用一个UserField 枚 举类型来定义。看了下这样子的话便于facebook 4gwt 的实现,UserField 里面有一份枚举到字符串的 映射,然后这些字符串可以配合native函数动态去调用Facebook 提供的Javascript接 口,callback函数也以参数的形式传递给Javascript接口,这样就实现了Javascript的接口的gwt 封装。


BTW, 在LoginButton 的构造函数传入一个true作参 数,这样当你登录之后这个LoginButton 会自动变 成LogoutButton

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值