記載されているdocumentationの和訳と、調べていて分かったノウハウを紹介します。we.ドキュメント全体の目次はこちらFacebook関連情報はFacebookページで共有しています。小ネタ日本時間の7/18日朝、Facebook公式のシェアボタンが動作しなくなったという騒ぎがありました。送信ボタンの成り立ちをまとめてみます。linkの和訳をご覧ください。Sharesページ(http://www.facebook.com/shared.php)のフィールドに入力し、URLのプレビューを友だちに送ったり、自分のプロフィールに投稿できます。Facebook上のコンテンツに対しても同様で、コンテンツ横にあるShareをクリックすることで、友だちに送信したり自分のプロフィールに投稿できます。」と紹介されています。ここではブックマークレットも紹介されていて、これは今でも動作します。Everywhere」では「Timeの記事ページからPhotobucketの動画ページまで、インターネット上のあちこちに置かれたシェア用のリンクを利用できます。」という具合に、外部サイトに設置するタイプのシェアリンクが初めて紹介されました。当時の見た目のキャプチャも紹介されています。Linksで紹介されている方法と変わりません。余談ですが、この記事の内容を信じるとすれば、「シェアプロジェクトのマネージャーであるクリスの生産性は、友だちのプロフィール上でシェアされる動画のせいで34.75%悪化した」んだそうです。共有こそがFacebook体験の要ですね。Web」では、いよいよ見覚えのあるシェアボタンが紹介されています。これ以前のシェアボタンではシェア数の表示はありませんでした。いいね!ボタンいいね!の誕生は「いいね!ボタンの歴史」で紹介した通りです(企画から実装、デザインの流れ、ローカライズの意識、どういう思想からいいね!に落ち着いたのかなど伝わってくるのでオススメです)。quoraでの回答が正しければ、企画は2007年から始まりつつも、シェアボタンと競合するという理由から2009年まで公開されることはありませんでした。公開後も、統合前のいいね!は今ほど強力ではなく、リンクがニュースフィードに流れただけです。シェアボタンと統合する方針は2010年5月22日に発表され、12月23日、不具合の為かシェアボタンが一時的に利用できなくなりましたが、結局その後2年は機能し続けます。2011年2月には、いいね!ボタンでも見出しと宣伝文、サムネイル付きでニュースフィードに流れるようになり、共有時にコメントも入力できるなど、挙動がシェアボタンと似てきました。友だちが何を気に入るのかは皆興味があるという前提で、いいね!したものも大きくニュースフィードに流れるようになったんだと認識しています。個人的には、気に入った記事をいいね!しつつ、共有の為にシェアし直すという必要が減って楽になりました。送信ボタン2011年4月下旬、送信ボタンがローンチされました。この送信ボタンがシェアボタンの後継にあたると思っているので、このときの印象はOklahomerに投稿した通りです。結果として共有される』という流れだと思うので、共有目的で使うSendボタンとLikeボタンを比べるよりは、SendボタンとShareボタンと比べるのが正しい気がする。Sendで誰かに勧めるからと言って、その人自身が興味を持っているとも限らない。Likeして更新をフォローするのとも違ってくる。LikeとShareを統合の流れにしたのも、Shareの本来あるべきだった状態をSendボタンが引き継ぐためだった的な感じなのかなぁとか。使い分けというわけで、使い方としては以下のような分け方だったと思います。いいね!ボタン:個人的に興味のある対象に使う(興味がある対象なので、いいね!したあと変化があるとニュースフィードに流れてくる)。入らないに関わらず、特定の相手とシェアするFacebookが一般公開されたり、初期ユーザも社会人になって友だち関係が入り組んでくれば、特定の相手と共有したいという要求の方が大きくなるはずなので、友だち全員と共有するシェアボタンの後継として送信ボタンが出てきたのは自然な気がしました。今のところ送信ボタンがなかなか使われていない感じはあります。Linksの和訳です。これを利用することで、2012年7月18日にとうとう廃止されてしまったシェアボタンと同等の機能を実装できます。公式ドキュメントのどのページからも、このドキュメントへの導線はありません。リンク全部をごっそり持ってきて管理しているFBDocsで見つからなかったくらい。どこまでサポートが続けられるのかは分かりません。この方法を使う場合は気をつけてください。サイト訪問者にFacebook上でコンテンツを共有させるベストな方法は、いいね!ボタンを使うことです。ワンクリックでコンテンツとの繋がりを持つことができ、友だちのうちで誰が既に繋がっているかを知ることができるため、CTRを上げることができます。外部のJavaScriptを利用できない環境であったり、ボタンのスタイルをカスタマイズしたい場合は、シンプルなシェアリンクを利用できます。Facebookこのリンクのように、シェアダイアログへのシンプルなリンクを作成できます。コードは以下の通りです。Facebook</a>この実装で必要なのは、www.facebook.com/sharer/sharer.phpへのリンクを生成するだけです。これは廃止対象となったシェアボタンで使われていた物と同じです。新規ウィンドウもしくはポップアップを使ってこのURLを開くだけです。JavaScriptを用いて新規ウィンドウを開くのであれば、閲覧中のページURLをlocation.hrefでも取得できます。この実装方法であれば、全てのページで共通して使えるコードになります。experienceいいね!ボタンの代わりにシェアリンクを使うのであれば、一貫性のあるユーザ体験を提供するよう意識してください。多くのユーザはすでにいいね!ボタンに慣れていて、これを押したときに何が起こるべきか知っています。それと同様に、ユーザは廃止されたシェアボタンにも慣れ親しんでいます。ここで紹介するシェアリンクはシェアボタンと全く同じというわけではありません(たとえばシェア数がリンク横に表示されません)が、以下のポイントを押さえることでシェアボタンと似たような動作にすることはできます。Facebookアイコンのあるボタン画像を使うことで、ルック&フィールを近づけるクリック時には新規ウィンドウでsharer.phpを開くサイズは横626px、高さ436pxにするImagesFacebookのエッジサーバにある画像を利用することができます。これらの画像は、ブラウザにキャッシュさせてページのロード時間を短縮するため、Expiresヘッダを遥か先の時刻に指定してあります。Sprite画像の一部にするなどの理由で、自分のサーバに置いて利用することも可能です。その際は、以下の画像のうち欲しい物を右クリックで保存してください。Categoriesの和訳です。Centerチュートリアルをご覧ください。6:20変更分までの和訳です。Centerガイドラインに準拠している場合、Facebookユーザはカテゴリ選択を通じてアプリを見つけられるようになります。アプリを見つけやすくするには、以下の要領でカテゴリを設定してください。teamがより適したカテゴリに再分類します。Center上ではマージして表示される場合があります。ルールに従って遊び、楽しむためのアプリ。これらのゲームは、数多くのゴール、ルール、チャレンジを含み、インタラクティブであるべきです。ライフスタイルのトレンドや週間に関するアプリ。ファッションやゲストのもてなし、インテリア、不動産を含みます。天気を追ったり、それに基づいて計画を立てるためのアプリゲームカテゴリは、以下のサブカテゴリをサポートします。反射神経面でのチャレンジもしくはアクションを扱うゲームで、多くの場合、対戦ではないもの。Updatesの和訳です。これを用いることで、Facebook上で更新されたアプリユーザの情報について通知を受けることができます。APIで実装例を紹介していますので、そちらもご覧ください。9:39更新分までの本文です。APIを提供しています。これにより、都度Facebookサーバへ問い合わせるのではなく、データをキャッシュしておいて必要に応じて更新できるようになります。データのキャッシュとこのAPIを併用することで、アプリの信頼性やロード時間の向上が期待できます。POSTリクエストを送信して、変更一覧を渡します。大体の場合、この通知は変更が起きてから数分の間に渡されます。以下は購読登録のステップです。POST(変更データの受け取り用)を受け付けるエンドポイントURLを設定します。POSTリクエストを送信し、確認用リクエストを受け取ります。Objects以下のオブジェクトを購読可能です。APIのユーザオブジェクトの特定のフィールドやコネクションに変更があったときに通知を受けることができます。ユーザがアプリに対して許可しているパーミッションに変化があった時に通知されます。対象となるパーミッションはPermissionsドキュメントをご覧ください。pictureなどの一般公開プロパティに変化があった時に通知を受けられます。対象となるプロパティはhttps://graph.facebook.com/<PAGE_ID>で得られるものと同じです。注意:ユーザオブジェクトの全プロパティやコネクションが購読対象となるわけではありません。verifiedプロパティは購読対象外であることに気をつけてください。accountsの購読はまだできません。将来的には対応するプロパティを増やす予定です。興味のある方はこのページを時々チェックしてください。対してリクエストを送信することでできることは3つあります。DELETEメソッドのどれになるかという点です。購読削除いずれの場合も、アプリのアクセストークンが必要となります。取得にはアプリのアプリIDとアプリのシークレットキーを使います。Subscription購読を追加するには、以下のパラメータと共にPOSTリクエストを送信します。アップデートの通知を受けたいオブジェクトを指定します。permissionsを指定できます。ここで指定するタイプのオブジェクト全部に対する変更通知を受けることになります。ここでuserを指定すれば、アプリ利用ユーザ全員が対象となりますし、pageを指定すれば、アプリをタブに追加しているFacebookページ全部が対象となります。objectで指定したオブジェクトのプロパティもしくはコネクションをカンマ区切りで指定します。ニュースフィードの変更通知を受けるには、name,picture,friends,feedを指定します。更新通知を受けるコールバックURLです。アプリ側が指定するトークンで、購読確認用のリクエスト受信時に送られてきます。PubSubHubbubの仕様に基づいたパラメータです。FacebookがPOST送信を受け付けると、アプリのコールバックURLに対してGETリクエストを送信し、URLが有効で更新通知を受け付けるよう実装されていることを確かめます。この確認手順については後述します。購読追加を完了するには、コールバックURLは確認用のリクエストに対し、正しくレスポンスを返す必要があります。それぞれのオブジェクトに対して一個の購読紙か追加できないことに気をつけてください。該当オブジェクトを購読中の場合は、既存の登録内容が上書きされます。SubscriptionsGETリクエストを送ることで、JSONエンコードされた購読内容一覧が返されます。SubscriptionsDELETEリクエストを送ることで全購読を解除できます。objectパラメータを指定すれば、そのオブジェクトに対する購読のみ解除できます。ServerコールバックURLに指定したエンドポイントは、GETとPOST双方のリクエストを捌けなくてはなりません。購読追加時の確認手順ではGETリクエストが送信され、購読追加完了の後、変更通知はPOSTリクエストで送信されます。変更の過程で、コールバックURLに対して以下のパラメータがGETリクエストで渡されます。文字列subscribeが常に渡されます。アプリからverify_tokenで渡された文字列まずアプリ側はverify_tokenをチェックし、hub.challengeの値を返すべきです。これにより、悪意あるアプリのDDoS攻撃を防ぎます。PHP開発者への注意:PHPでは、クエリパラメータ名のドットとスペースがアンダースコアに置き換えられます。$_GET["hub_verify_token"]を用いる必要があります。詳しくはPHPのマニュアルをご覧ください。POSTリクエストが送られます。content-typeはapplication/jsonで、更新内容のJSONエンコードされた物がbodyで渡されます。}]}ここでは実際のデータが渡されないことに注意してください。更新後の値を取得するには、通常の手順でAPIを用いてアクセスします。常時アクセスできるデータである場合、更新通知された直後に最新データを取得し、次回ユーザがログインした際の読み込み時間を短縮したいと思うでしょう。Facebookは変更内容を要約し、5秒に一回、もしくは未通知の更新が1000個を越えた段階で、まとめてコールバックURLに対して送信します。それだけの量に対応できるように実装してください。通知に失敗した場合、Facebookはすぐに再通知を試み、徐々に頻度を落としながら24時間リトライを続けます。全部のレスポンスで、通知内容のSHA1シグネチャを含むX-Hub-SignatureをHTTPヘッダで送信しますが、これにはアプリのシークレット鍵がキーに用いられます。変更に失敗した場合のエラーは以下のようになります。Implementationsgithubでサンプルを公開していますので、そちらもご覧ください。Graphのビルトインアクションとして追加されたいいね!アクションを紹介しています。Platformが順次ビルトインアクションとして取り込んでいる印象です。ションからビルトインアクションへの切り替えを強制されますが、Facebook上で最適に表示・拡散されるなどの利点があります。12:09更新分までの本文です。Graphのビルトインアクションで利用できるようになりました。Graphアクションとしてのいいね!がどのようにユーザ体験に結びつくのかをデザインすることができます。これはモバイルでもウェブでも機能する為、アプリ上のコンテンツ妥当性を向上させつつ、ディストリビューションの拡大を期待することができます。Likes以下の条件を満たす限り、アプリはユーザの代理としてビルトインのいいね!アクションを投稿することができます。Graphオブジェクトページを保有していて、OGPメタタグを正しくマークアップしているアプリが実装し、なおかつコンテンツに紐づいているいいね!ボタンを、ユーザが意図的にクリックした開発者は、クリックできるタイプのいいね!ボタンをデザインすべきです。ブランドガイドラインに従い、このいいね!ボタンはアプリのブランドを使うべきで、Facebookブランドを使ってはいけません。カスタマイズしたいいね!ボタンを利用しているアプリは、ビルトインのいいね!投稿によるFacebook上でのディストリビューション増加を期待することができます。Graphアクション投稿が表示されるのと同じ場所(リアルタイムフィード、タイムライン、アクティビティログ)に同じように表示されます。ビルトインのいいね!アクションは以下の手順で実装します。Graphセクションで、ドロップダウンで表示されるビルトインのLikeを選択します。Graphオブジェクトに紐づけるいいね!ボタンを作成します。認証済みでpublish_actionsパーミッションを許可しているユーザがボタンをクリックしたら、ビルトインのいいね!アクションを投稿します。Graphアクションと同じで、実装後に提出し、許可される必要があります。ユーザ未認証の場合であれば、これまで通りいいね!ボタンのプラグインを利用すべきです。POSTリクエストを送信します。Graphオブジェクトの型(og:type)はどれでも大丈夫です。ID]/og.likes成功すると、以下のようにいいね!アクションのIDを返します。}すでにいいね!したオブジェクトに対して再度いいね!アクションを投稿しようとすると、以下のエラーが返る点に気をつけてください。}}ただし、前回のいいね!が削除済みであれば再度いいね!することが可能です。DELETEリクエストを送信します。action」と読んでいます。Graph投稿されて共有されるような、ソーシャルクッキングアプリを想像してください。action」にあたり、そのアクションを通じてrecipeオブジェクトが生成されます。ソーシャルクッキングアプリ上で友だちがrecipeを見て、それに紐づくいいね!ボタンを押すと、Facebookの通知欄にそれが流れます。writeアクションを通じてrecipeオブジェクトを生成したユーザの通知欄には、友だちがrecipeをいいね!したことが流され、友だちのアプリ上でのアクティビティが把握できます。action」を適切に設定します。Graphオブジェクトを設定します。その後、Advancedをクリックします。Actionフィールドに、このオブジェクトを生成するアクションを入力します。Changesをクリックします。Graphアクションを通常通り投稿します。先述した通り、開発者は独自にいいね!ボタンをデザインすべきです。Graphに対して投稿してください。actionが指定されていない場合、Facebookの通知欄には何も流れません。返され方が変わります動画の削除機能はドキュメントの誤りで、実はサポートされてませんでした。