Deeplinking en utilisant GWT Histoire Token dans un iFrame Facebook Toile
Question
Je voudrais un lien direct vers une page d'application GWT dans un iFrame Facebook Canvas.
La première partie est simple en utilisant le jeton d'histoire de GWT avec des URL comme:
http://www.example.com/MyApp/#page1
qui ouvrirait page1 dans mon application.
Facebook Apps utilisent une URL d'application comme:
http://apps.facebook.com/myAppName
qui encadre mon URL toile Callback
http://www.example.com/MyApp/
Y at-il un moyen de spécifier une URL de rappel de toile (ou l'URL de signet) qui l'utilisateur vers une page spécifique plutôt que la page d'index?
Pourquoi? tu peux demander. En plus de tous les avantages des liens profonds ...
-
Je veux que le "Aller à l'application" URL pour les utilisateurs vers une page d'index w / matériel de marketing (l'URL de rappel de toile)
-
Je veux que le « favori URL » à prendre (probablement retour) utilisateurs vers une page de connexion et de contourner le téléchargement du contenu marketing (et énorme fichier SWF).
La solution
Cela peut sembler être un hack, mais ici il va.
Facebook permet à l'application de virer de bord sur les paramètres à l'url? X = 123
Je vérifie l'emplacement de la fenêtre pour voir si elle contient mon paramètre spécial « page » et charger cette page. Ci-dessous, ma solution étant donné que j'utilise la classe PlaceManager de GWT + GWT-présentateur.
L'application url profonde finit par être 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();
}