Deeplinking utilizzando GWT Storia simbolici all'interno di un Facebook iFrame Canvas
Domanda
Vorrei deep link direttamente a una pagina applicazione GWT all'interno di un Facebook iFrame tela di canapa.
La prima parte è semplice utilizzando token di Storia di GWT con URL del tipo:
http://www.example.com/MyApp/#page1
che aprirebbe page1 nel mio app.
Applicazioni Facebook utilizzare un URL un'applicazione come:
http://apps.facebook.com/myAppName
che incornicia la mia tela Callback URL
http://www.example.com/MyApp/
C'è un modo per specificare una tela callback URL (o bookmark url) che avrà l'utente ad una pagina specifica, piuttosto che la pagina indice?
Perché? si può chiedere. Oltre a tutti i vantaggi di legami profondi ...
-
Voglio il "Go To Application" url di prendere gli utenti a una pagina di indice w / materiale di marketing (l'url tela callback)
-
Voglio il "URL segnalibro" per prendere (probabile ritorno) gli utenti a una pagina di login e di bypass scaricando il contenuto di marketing (e che enorme file SWF).
Soluzione
Questo può sembrare un hack, ma qui va.
Facebook consente all'applicazione di virare su parametri all'URL? X = 123
Così sto controllando la posizione finestra per vedere se contiene la mia speciale 'pagina' parametri e caricare la pagina. Qui di seguito è la mia soluzione, dato che sto usando classe PlaceManager GWT + di GWT-presentatore.
Il profondo url applicazione finisce per essere 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();
}