在Facebook iFrame Canvas中使用GWT历史令牌进行深层链接

时间:2010-03-16 20:45:28

标签: facebook gwt

我想直接深入链接到Facebook iFrame Canvas中的GWT应用页面。

第一部分很简单,使用GWT的历史记录标记,其URL为:

http://www.example.com/MyApp/#page1

会在我的应用中打开page1。

Facebook Apps使用以下应用程序网址:

http://apps.facebook.com/myAppName

框架我的Canvas回调网址

http://www.example.com/MyApp/

有没有办法指定画布回调网址(或书签网址),这会将用户带到特定网页而非索引页?

为什么呢?你可能会问。除了深层链接的所有好处......

  • 我希望“转到应用程序”网址将用户带到带有营销材料的索引页面(画布回调网址)

  • 我希望“书签网址”将(可能会返回)用户带到登录页面并绕过下载营销内容(以及那个巨大的SWF文件)。

1 个答案:

答案 0 :(得分:4)

这可能看起来像是一个黑客,但在这里。

Facebook允许应用程序将参数添加到网址?x = 123

所以我正在检查窗口位置,看它是否包含我的特殊“页面”参数并加载该页面。以下是我的解决方案,因为我正在使用GWT + gwt-presenter的PlaceManager类。

应用程序深层网址最终为http://apps.facebook.com/myAppName?page=page1

    EventBus eventBus = injector.getEventBus();

    // Load PlaceManager so it can start listening
    PlaceManager placeManager = injector.getPlaceManager();
    String currentPlace = History.getToken();

    String place = Window.Location.getParameter( "page" );
    if (place != null && !place.isEmpty()) {
        // send user to the place on the URL line
        eventBus.fireEvent( new PlaceRequestEvent( new PlaceRequest( new Place (place) ) ));

    } else if ("".equals(currentPlace)) {
        // Nothing in URL, load default GWTpage
        eventBus.fireEvent( new PlaceRequestEvent(new PlaceRequest( IndexPresenter.PLACE)));

    } else {
        // fire a body to the Place Manager to activate the requsted Place
        placeManager.fireCurrentPlace();
    }