私はFacebook Canvasアプリケーションを作成していますが、それ以上のものはdemo appです。Facebook auth.sessionイベントとページの変更
デモと同じように、最初のページの読み込み時に自分のサイトにPOSTされたsigned_request
からユーザーデータを取得できます。また、デモで示唆されているように、私は、ユーザーの変更にページをリロードするには、以下のスニペットを使用します。ここでは
var Config;
function facebookInit(config) {
Config = config;
FB.init({...});
FB.Event.subscribe('auth.sessionChange', handleSessionChange);
...
}
function handleSessionChange(response) {
if ((Config.userIdOnServer && !response.session) ||
Config.userIdOnServer != response.session.uid) {
goHome();
}
}
function goHome() {
top.location = 'http://apps.facebook.com/' + Config.canvasName + '/';
}
Config
は、サーバーからの情報が移入されたオブジェクトです。
ユーザーがリンクを使用してアプリケーションをナビゲートすると問題が発生します。 AJAXを使用すると、ページは実際にリロードされず、すべて正常に動作します。しかし、標準のリンクを使用すると、ユーザーは標準のGETリクエストでアプリケーションの別のページに移動します。この場合、私はユーザーに関する情報を取得する方法を知らないので、Config.userIdOnServer
は未定義であり、ページのリロードがトリガーされます。
もちろん、私はhandleSessionChange
への呼び出しを削除するか、AJAXリンクだけで1ページのアプリケーションを作成することでこれを避けることができますが、私はFacebookの流れについて何か基本的なものを見逃しています。