5

before_filterを使用してsigned_request、ユーザーがキャンバスアプリを参照したときにFacebookが生成するクエリ文字列を検出しています。

次に、session[:canvas] = trueユーザーがキャンバスにいるのか、ネイティブブラウザーアプリにいるのかに基づいて、異なるアプリロジックが必要な場合に、その設定とテストを行います。問題は、ユーザーが何らかの理由でキャンバスを離れてブラウザーベースのアプリに移動したsession[:canvas]場合でも、変数がtrueに設定されていることです。

キャンバスとネイティブブラウザアプリの違いを検出するためのより良い方法はありますか?

4

3 に答える 3

4

個人的には、Facebook アプリに「エイリアス」URL を使用するのが好きです。たとえば、アプリの設定でfb.mysite.com代わりに使用www.mysite.comし、2 つのドメインが同じ場所を指すように設定します。または、ディレクトリでも同様のことができます。たとえばwww.mysite.com/fb/、同じ場所を指すがwww.mysite.com/、コードが直接アクセスかアプリからかを判断する簡単な方法を提供します。

セッションを使用することもできますが、現在「アプリ モード」(canvas==true) にある場合は、追加の JavaScript チェックを追加する必要があります。JavaScript は、ページが iframe 内にあるかどうかを確認するだけで、そうでない場合は のようなものにリダイレクトしますwww.mysite.com/thispage?app=0。ページでapp=0パラメーターを確認し、存在する場合はセッションをクリアする (または canvas=false を設定する) 必要があります。このようにして、ユーザーが Facebook 内で開始してからサイトに直接アクセスした場合、物事は自動的に正しく調整されます。

于 2011-11-28T14:04:23.107 に答える
0

セッションでこの情報を保存する代わりに、signed_requestパラメーターの存在を確認します。パラメーターがない場合は、ユーザーがFacebookアプリ内にいないことを意味している可能性があります。

于 2011-11-28T03:18:40.157 に答える
0

私は完全に間違っているかもしれませんが、Facebook は GET 要求ではなく POST によってキャンバス コンテンツにアクセスしませんか? リクエストがどこから来たのかを区別する最も簡単な方法ではないでしょうか?

于 2011-12-20T17:05:36.547 に答える