الارتباط العميق باستخدام GWT History Token داخل Facebook iFrame Canvas
سؤال
أرغب في الارتباط العميق مباشرة بصفحة تطبيق GWT داخل Facebook iFrame Canvas.
الجزء الأول بسيط باستخدام رمز سجل GWT مع عناوين URL مثل:
http://www.example.com/MyApp/#page1
والتي من شأنها فتح الصفحة 1 داخل تطبيقي.
تستخدم تطبيقات Facebook عنوان URL للتطبيق مثل:
http://apps.facebook.com/myAppName
الذي يؤطر عنوان URL لرد اتصال Canvas الخاص بي
http://www.example.com/MyApp/
هل هناك طريقة لتحديد عنوان url لرد الاتصال (أو عنوان url للإشارة المرجعية) والذي سينقل المستخدم إلى صفحة معينة بدلاً من صفحة الفهرس؟
لماذا؟يمكنك السؤال.بالإضافة إلى جميع فوائد الروابط العميقة...
أريد أن يقوم عنوان URL "الانتقال إلى التطبيق" بنقل المستخدمين إلى صفحة فهرس تحتوي على مواد تسويقية (عنوان url لرد اتصال اللوحة القماشية)
أريد أن يقوم "عنوان 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();
}