2011-12-22 9 views
6

私は、Facebookアプリケーションで開いたグラフオブジェクトとして "book"を定義しました。書籍は論理的な単位であり、ユーザーはアプリ内でさまざまな方法で書籍を閲覧することができます。しかし、私のアプリには単一の本に対応する単一のURLはありません。開いているグラフオブジェクトは、ユーザーの表示可能なページに対応する必要がありますか?

オープンなグラフのメタデータをFacebookの背後に吐き出すURLを持つことができると思いました。たとえば、http://www.example.com/opengrpah/object_book.php?id=3265は、書籍のタイトル、著者、およびその他の情報を返しますが、実際にはユーザーが見ることはできません。

しかし、Facebookがオブジェクトに関連するアクションにオブジェクトURLを使用しているようです。書籍に関連するアクション(ブックの追加など)を作成すると、ティッカーのリンクをクリックすると、実際のアプリページではなくobject_book.php URLに移動します。したがって、メタデータは表示されますが、有用なものはありません。

これは仕様です。確かに、オブジェクトは、ユーザーが見ることのできる単一のページに対応する必要はありません。あるURLからオブジェクトデータを取得することはできませんが、アプリケーションのコンテキスト内でそのオブジェクトをユーザーに表示させることはできますか?

+0

私はここで同じ問題に遭遇しています。結局、どうしたのですか? – ksol

+0

ksol、私は答えを見つけられませんでした。私はオブジェクトごとに1ページを持つように私のアプリを再構築しています。私はそれが間違ったデザインだと思うが、タイムラインを利用できるようにするためにはそれを行う必要がある。 – Garth

+0

少なくとも、今私たちが望むものを達成する方法がないように見えます。私は全てのOGオブジェクトに特定のコントローラーを使用してしまいました。その後、JS経由でリダイレクトを行います。今のところ唯一の方法だと思われます – ksol

答えて

2

Open Graph Object URLから実際のアプリページにリダイレクトするのはどうですか?または、Open Graphメタデータを提供するためにアプリケーションページを設計する方法はありますか?

これは難解な解決策になると思います。

+0

リダイレクトは技術的に実現可能ですが、醜いので避けたいです。アプリケーションにOpen Graphメタデータを提供するには、オブジェクトごとに固定ページを持たないAJAXアプリケーションなので、完全な再設計が必要です。 私はOpen Graphの明白な暗黙の仮定によって、オブジェクトページがユーザーページにマップされることに少し驚いています。 Webが静的であった1995年には意味をなさないでしょうが、現在は動的コンテンツではありません。 – Garth

+0

あなたのコメントによると、あなたのアプリケーション内のあなたのオブジェクト(書籍かもしれない)は、特定の「URL」でアクセスできないと思います。右?そうなら、それはあなたのデザインが間違っていることを意味します。 あなたのコメントで述べたFacebookのデザイン決定はまったく正しいと思います。「オブジェクト」は特定のURLによってアクセスできる必要があり、そのオブジェクトに関するメタデータをそのURLハンドラに渡すことができます。 AJAXは、オブジェクトのURLを指定する必要がないという意味ではありません。 –

+0

Semun、AJAXは、オブジェクトにユーザーがアクセス可能なURLを提供する必要がないことを絶対に意味します。たとえば、私のアプリケーションでは、書籍のリストはページに表示されますが、個々の書籍はAJAX呼び出しによって読み込まれるページ上のフローティングdivに表示されます。別の例として、ゲームには開いたグラフオブジェクトとして存在するはずのオブジェクトが多数存在する可能性がありますが、それに対応するユーザーの表示ページはありません。 – Garth

0

私はFB Canvas Appであるため、同じ問題が発生しました。オブジェクトのog:urlがhttp://apps.facebook.com/our_namespace/?my_first_obj=0のようなものであれば、FBは読み込まれたオブジェクトの代わりにアプリケーション自体を見ていますアプリ。それが最終的に人々の着陸を望むところですが、あなたの状況と同じように適切なメタタグを提供するアプリケーションへの直接URLを提供しなければなりませんでした。私は単にそれらのページの頭の中でこれを置く:

誰かがそのページに直接送信されている場合、彼らはすぐに私たちのキャンバスアプリケーションにリダイレクトされますが、Facebookのスクレーパーは、まだオブジェクトに関する正しいメタデータを取得することができますので、
<script> 
    try { 
     if (top.location.href === window.location.href) { 
      window.location.replace("http://apps.facebook.com/our_namespace/"+window.location.search); 
     } 
    } catch(e) {} 
</script> 

0

私は同様の問題を抱えていました。私はオブジェクトのために2つのレイヤーを使いました。一つは "マスター"オブジェクトで、実際にはオブジェクト(あなたの場合は本、私の目標)です。 次に、別の「ユーザー」オブジェクトがあります。これは、実際にはマスターオブジェクトとユーザーの間の関連付けです。このユーザオブジェクトにはmysite/user/objectのようなURLがあり、それはfbグラフに "add"アクションを付けて公開したものです。

関連する問題