Глубокая ссылка с использованием токена истории GWT в холсте iFrame Facebook

StackOverflow https://stackoverflow.com/questions/2457994

  •  20-09-2019
  •  | 
  •  

Вопрос

Я хотел бы создать глубокую ссылку непосредственно на страницу приложения GWT в холсте iFrame Canvas Facebook.

Первая часть проста: используется токен истории GWT с такими URL-адресами:

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

который откроет страницу 1 в моем приложении.

Приложения Facebook используют URL-адрес приложения, например:

http://apps.facebook.com/myAppName

который создает мой URL-адрес обратного вызова Canvas

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

Есть ли способ указать URL-адрес обратного вызова Canvas (или URL-адрес закладки), который приведет пользователя на определенную страницу, а не на индексную страницу?

Почему?вы можете спросить.Помимо всех преимуществ глубоких ссылок...

  • Я хочу, чтобы URL-адрес «Перейти к приложению» перенаправлял пользователей на индексную страницу с маркетинговыми материалами (URL-адрес обратного вызова Canvas)

  • Я хочу, чтобы «URL-адрес закладки» перенаправлял (вероятно, возвращал) пользователей на страницу входа и обходил загрузку маркетингового контента (и этого огромного SWF-файла).

Это было полезно?

Решение

Это может показаться хаком, но вот оно.

Facebook позволяет приложению добавлять параметры к URL-адресу ?x=123.

Поэтому я проверяю расположение окна, чтобы увидеть, содержит ли оно мой специальный параметр «страница», и загружаю эту страницу.Ниже приведено мое решение, учитывая, что я использую класс PlaceManager GWT + gwt-presenter.

Глубокий URL-адрес приложения в конечном итоге оказывается 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();
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top