DeePlinging usando o token de história do GWT em uma tela iframe do Facebook

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Gostaria de links profundos diretamente para uma página do aplicativo GWT em uma tela iframe do Facebook.

A primeira parte é simples usando o token de história da GWT com URLs como:

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

que abriria a página1 no meu aplicativo.

Os aplicativos do Facebook usam um URL de aplicativo como:

http://apps.facebook.com/myAppName

que enquadra meu URL de retorno de chamada de tela

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

Existe uma maneira de especificar um URL de retorno de chamada de tela (ou URL de marcador) que levará o usuário a uma página específica em vez da página de índice?

Por quê? você pode perguntar. Além de todos os benefícios dos links profundos ...

  • Quero que o URL "vá para o aplicativo" leve os usuários a uma página de índice com material de marketing (o URL de retorno de chamada de tela)

  • Quero que o "Bookmark URL" leve os usuários (provavelmente retornando) para uma página de login e ignorando o download do conteúdo de marketing (e esse enorme arquivo SWF).

Foi útil?

Solução

Isso pode parecer um hack, mas aqui vai.

O Facebook permite que o aplicativo entre nos parâmetros ao URL? X = 123

Portanto, estou verificando o local da janela para ver se ele contém meu parâmetro 'página' especial e carregando essa página. Abaixo está minha solução, pois estou usando a classe Placemanager da GWT + GWT-Presentador.

O aplicativo URL profundo acaba sendo 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();
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top