0

ページタブ内で実行される Facebook アプリを開発する必要があります。このページを気に入ったユーザーのみがアプリを使用できる (したがって、承認する) 必要があります。

signed_requestパラメーターを使用すると、特定の facebook ユーザーがページを気に入ったかどうかを知るのはかなり簡単です。

var isFan = false;
if (req.facebook.signedRequest && req.facebook.signedRequest.page){
    isFan = req.facebook.signedRequest.page.liked;
}

これはうまく機能しています。ここで、ユーザーがページを気に入ったら、それを承認する「LAUNCH THIS APP」ボタンを表示します。

$('#authApp').click(function(){

                FB.login(function(response) {

                    if (response.authResponse) {
                        window.location = window.location;
                    }
                }, {scope: 'user_likes,user_photos'});
                return false;
            });

ご覧のとおり、アプリが正常に承認された場合は、ページをリロードします。

ただし、ページがリロードされると、signed_request.pageパラメーターが欠落しています。したがって、非ファン向けの html マークアップが表示されます。

これは、アプリを承認した後にリロードすると、signed_request がどのように見えるかです。

{

アルゴリズム: 'HMAC-SHA256'、コード: '...'、issued_at: 1348003786、user_id: '100...' }

その直後にページを更新すると。すべて問題なく、ページ情報が再び表示されます。

{ アルゴリズム: 'HMAC-SHA256'、有効期限: 1348009200、issued_at: 1348004248、oauth_token: 'AA..'、ページ: { id: '490...'、like: true、admin: true }、ユーザー: { country : 'ec'、ロケール: 'en_US'、年齢: {分: 21 } }、user_id: '100...' }

これは、これが機能するはずの方法ですか?

これを回避するための推奨される方法は何ですか?

ありがとう!

4

1 に答える 1

1

ただし、ページがリロードされると、signed_request.pageパラメーターが欠落します。

もちろん、これは、iframeへの初期ロード時にのみアプリに渡されるためです(iframeに送信されたmethod = postのフォームを介して)。

ページのリロード後に含まれるデータを取得する場合は、次の2つのオプションがあります。

  • 自分のセッションに入れて、いつでもそこからアクセスできるようにします。

  • アプリをiframe内にリロードするだけでなく、Facebookページ全体をリロードします(JavaScript、top.location)。次に、アプリがiframeに再度読み込まれ、signed_requestも2回目に投稿されます。

于 2012-09-19T09:31:51.663 に答える