Deeplinking usando GWT Historia de emergencia dentro de un marco flotante Facebook lienzo
Pregunta
Me gustaría a lo profundo del enlace directo a una página de aplicación GWT dentro de un marco flotante Facebook lienzo.
La primera parte es sencilla mediante el testigo de la historia de GWT con URLs como:
http://www.example.com/MyApp/#page1
lo que abriría page1 dentro de mi aplicación.
Facebook Apps utilizar una URL aplicación como:
http://apps.facebook.com/myAppName
que enmarca el lienzo de devolución de llamada URL
http://www.example.com/MyApp/
¿Hay una manera de especificar una URL de devolución de llamada de la lona (o URL marcador) que se llevará al usuario a una página específica en lugar de la página de índice?
¿Por qué? Tu puedes preguntar. Además de todos los beneficios de los enlaces profundos ...
-
Quiero que el "Ir a la aplicación" url para llevar a los usuarios a una página de índice de material de marketing (la URL de devolución de llamada de lona)
w /
-
Quiero que el "URL marcador" para tomar (probabilidades de regresar) a los usuarios a una página de registro y derivación de descargar el contenido de marketing (y ese enorme archivo SWF).
Solución
Esto puede parecer un truco, pero aquí va.
Facebook permite a la aplicación a arreos de parámetros a la URL? X = 123
Así que estoy marcando la ubicación de la ventana para ver si contiene mi parámetro especial 'página' y la carga de la página. A continuación se muestra mi solución teniendo en cuenta que estoy usando la clase PlaceManager GWT + GWT-presentador.
La url profunda aplicación termina siendo 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();
}