ファンページタブで実行するフォトコンテストfbアプリに取り組んでいます。他のユーザーが投票できるように、ユーザーは写真を共有できる必要があります。iframe
の画像リンクが特定の写真のhttp://example.com/image.php?id=1であると仮定すると、共有を押すと、 を通じてこのリンクが共有されますiframe
。ホストアプリ自体につながります。必要なのは、fb アプリのタブ ページの URL 全体を http://example.com/image.php?id=1Iframe
で共有することです。それは何らかの方法で可能ですか?手伝ってくれてありがとう。
2 に答える
したがって、キャンバスアプリに焦点を当てた@Lixの回答に「代替」を与えるために、ここではページタブアプリのアナログな方法を示します。
なんらかの理由で、Facebook はページ タブ アプリに対して別のことを行うことにしました。キャンバス アプリとは異なり、GET パラメーターをアプリの facebook.com アドレスに追加してアプリに渡すことはできませんが、使用する必要があります。app_data
そのためのパラメーター。
フォームでアプリを呼び出し/リンクします。parameterhttps://www.facebook.com/YourPage?v=app_1234567890&app_data=foo
の値として入力したものは何でも、Facebook POST が initial(!) で iframe に読み込まれることをアプリで確認できます。app_data
signed_request
したがって、を解析してsigned_request
(または PHP SDK に任せて)、app_data
そこに値を見つけます。複数の単一の値を渡したい場合は、JSON でエンコードされたデータをそこに置くこともできます。署名されたリクエストから app_data 値を読み取った後、再度デコードする必要があります。
ドキュメントではparameterについて簡単に言及していapp_data
ますが、原理自体は非常に単純です。
これらのリンクを共有 する場合、上記の形式でアドレスを使用すると、Facebook は URL からパラメーターを削除し、リンク全体を Facebook ページへの単なるリンクとして扱う傾向があることがわかりました。ページの画像と説明、さらに app_data パラメータはもちろん、ページ タブ アプリも渡しません。
これを回避する最も信頼できる方法は、Facebook のページ タブに直接リンクするのではなく、独自のアプリの URL にリンクすることです。スクレーパーが訪問すると、関連する OG 情報を配信します。実際のユーザーがアクセスすると、ページ タブ アプリにリダイレクトし、app_data
上記のパラメーターを介して必要なデータを渡します。リダイレクトは、サーバー側 ( User-Agent ヘッダーを介してサーバー側でスクレイパーを検出する方法に関する情報)、または JavaScript を介してクライアント側 (スクレイパーは「話す」ことはありません) で行うことができます。
もちろんそうだ。必要なのは、アプリケーション キャンバス URL から情報を抽出できることだけです。キャンバス URL が次のような場合:
https://apps.facebook.com/ImadBakir
次に、次のように、そこにさらに情報を配置できます。
https://apps.facebook.com/ImadBakir?photo_id=123
ユーザーはそのリンクを共有し、アプリケーションでそのphoto_id
パラメーターを解析し、必要な HTML 変更を加えて、ページとアプリケーションの読み込み時に iframe 内に正しい画像を表示できます。
URL パラメーターの解析に関しては、JavaScript で行うことを想定して、次の投稿で詳細を読むことができます:
JavaScript でクエリ文字列値を取得するにはどうすればよいですか?