Facebook開発者向けドキュメントの日本語訳とTips

http://developers.facebook.com/docs/ に記載されているdocumentationの和訳と、調べていて分かったノウハウを紹介します。
Life is tough, so are we.
ドキュメント全体の目次はこちら
Facebook関連情報はFacebookページで共有しています。

シェア / いいね! / 送信ボタンの歴史

日本時間の7/18日朝、Facebook公式のシェアボタンが動作しなくなったという騒ぎがありました。仕事終わったら対処法まとめようかなぁと思っていたら他の人がやっていたので、ここではシェア / いいね! / 送信ボタンの成り立ちをまとめてみます。
シェアボタン廃止後も残されている公式な代替方法はShare linkの和訳をご覧ください。


capture

シェア

Facebook内外のコンテンツをシェアする機能が公式に発表されたのは、つい最近結婚したクリス・ヒューによる2006年10月27日公式ブログ記事「Sharing is Daring」です。ここでは、「記事、画像、動画、その他なんでもあなたがクールだと思うもののURLをMy Sharesページ(http://www.facebook.com/shared.php)のフィールドに入力し、URLのプレビューを友だちに送ったり、自分のプロフィールに投稿できます。Facebook上のコンテンツに対しても同様で、コンテンツ横にあるShareをクリックすることで、友だちに送信したり自分のプロフィールに投稿できます。」と紹介されています。ここではブックマークレットも紹介されていて、これは今でも動作します。

その直後(10月31日)の記事「Share Is Everywhere」では「Timeの記事ページからPhotobucketの動画ページまで、インターネット上のあちこちに置かれたシェア用のリンクを利用できます。」という具合に、外部サイトに設置するタイプのシェアリンクが初めて紹介されました。当時の見た目のキャプチャも紹介されています。この当時の動き自体はShare Linksで紹介されている方法と変わりません。
link
余談ですが、この記事の内容を信じるとすれば、「シェアプロジェクトのマネージャーであるクリスの生産性は、友だちのプロフィール上でシェアされる動画のせいで34.75%悪化した」んだそうです。共有こそがFacebook体験の要ですね。

肝心のシェアボタンの公開がいつだったのかハッキリとは分からなかったのですが、機能誕生からちょうど3年後、2009年10月27日「Keeping Count of Sharing Across the Web」では、いよいよ見覚えのあるシェアボタンが紹介されています。これ以前のシェアボタンではシェア数の表示はありませんでした。
share

いいね!ボタン

いいね!の誕生は「いいね!ボタンの歴史」で紹介した通りです(企画から実装、デザインの流れ、ローカライズの意識、どういう思想からいいね!に落ち着いたのかなど伝わってくるのでオススメです)。quoraでの回答が正しければ、企画は2007年から始まりつつも、シェアボタンと競合するという理由から2009年まで公開されることはありませんでした。公開後も、統合前のいいね!は今ほど強力ではなく、リンクがニュースフィードに流れただけです。

シェアボタンと統合する方針は2010年5月22日に発表され、12月23日、不具合の為かシェアボタンが一時的に利用できなくなりましたが、結局その後2年は機能し続けます。

2011年2月には、いいね!ボタンでも見出しと宣伝文、サムネイル付きでニュースフィードに流れるようになり、共有時にコメントも入力できるなど、挙動がシェアボタンと似てきました。友だちが何を気に入るのかは皆興味があるという前提で、いいね!したものも大きくニュースフィードに流れるようになったんだと認識しています。個人的には、気に入った記事をいいね!しつつ、共有の為にシェアし直すという必要が減って楽になりました。

送信ボタン

2011年4月下旬、送信ボタンがローンチされました。この送信ボタンがシェアボタンの後継にあたると思っているので、このときの印象はOklahomerに投稿した通りです。
send

『Aさんが対象に興味を持つから「Like/いいね!」を押す → Aさんの興味のある物として友達Bさんのニュースフィードに流れる → 結果として共有される』という流れだと思うので、共有目的で使うSendボタンとLikeボタンを比べるよりは、SendボタンとShareボタンと比べるのが正しい気がする。
Sendで誰かに勧めるからと言って、その人自身が興味を持っているとも限らない。なので、Likeして更新をフォローするのとも違ってくる。
LikeとShareを統合の流れにしたのも、Shareの本来あるべきだった状態をSendボタンが引き継ぐためだった的な感じなのかなぁとか。

使い分け

というわけで、使い方としては以下のような分け方だったと思います。
  • いいね!ボタン:個人的に興味のある対象に使う(興味がある対象なので、いいね!したあと変化があるとニュースフィードに流れてくる)。
  • シェアボタン:気に入る / 入らないに関わらず、とにかく皆とシェアする
  • 送信ボタン:気に入る / 入らないに関わらず、特定の相手とシェアする
Facebookが一般公開されたり、初期ユーザも社会人になって友だち関係が入り組んでくれば、特定の相手と共有したいという要求の方が大きくなるはずなので、友だち全員と共有するシェアボタンの後継として送信ボタンが出てきたのは自然な気がしました。が、今のところ送信ボタンがなかなか使われていない感じはあります。。

Share Links

Share Linksの和訳です。これを利用することで、2012年7月18日にとうとう廃止されてしまったシェアボタンと同等の機能を実装できます。ただし、公式ドキュメントのどのページからも、このドキュメントへの導線はありません。リンク全部をごっそり持ってきて管理しているFBDocsで見つからなかったくらい。。
なので、どこまでサポートが続けられるのかは分かりません。この方法を使う場合は気をつけてください。


以下、和訳内容です。

サイト訪問者にFacebook上でコンテンツを共有させるベストな方法は、いいね!ボタンを使うことです。ワンクリックでコンテンツとの繋がりを持つことができ、友だちのうちで誰が既に繋がっているかを知ることができるため、CTRを上げることができます。外部のJavaScriptを利用できない環境であったり、ボタンのスタイルをカスタマイズしたい場合は、シンプルなシェアリンクを利用できます。

Simple example

Share on Facebook

このリンクのように、シェアダイアログへのシンプルなリンクを作成できます。コードは以下の通りです。

<a href="https://www.facebook.com/sharer/sharer.php?u=example.org" target="_blank">
  Share on Facebook
</a>

この実装で必要なのは、www.facebook.com/sharer/sharer.phpへのリンクを生成するだけです。これは廃止対象となったシェアボタンで使われていた物と同じです。

新規ウィンドウもしくはポップアップを使ってこのURLを開くだけです。JavaScriptを用いて新規ウィンドウを開くのであれば、閲覧中のページURLをlocation.hrefでも取得できます。この実装方法であれば、全てのページで共通して使えるコードになります。

var sharer = "https://www.facebook.com/sharer/sharer.php?u=";
window.open(sharer + location.href, 'sharer', 'width=626,height=436');

User experience

いいね!ボタンの代わりにシェアリンクを使うのであれば、一貫性のあるユーザ体験を提供するよう意識してください。たとえば、多くのユーザはすでにいいね!ボタンに慣れていて、これを押したときに何が起こるべきか知っています。それと同様に、ユーザは廃止されたシェアボタンにも慣れ親しんでいます。ここで紹介するシェアリンクはシェアボタンと全く同じというわけではありません(たとえばシェア数がリンク横に表示されません)が、以下のポイントを押さえることでシェアボタンと似たような動作にすることはできます。
  • Facebookアイコンのあるボタン画像を使うことで、ルック&フィールを近づける
  • クリック時には新規ウィンドウでsharer.phpを開く
  • サイズは横626px、高さ436pxにする

Images

Facebookのエッジサーバにある画像を利用することができます。これらの画像は、ブラウザにキャッシュさせてページのロード時間を短縮するため、Expiresヘッダを遥か先の時刻に指定してあります。

既に持っているCSS Sprite画像の一部にするなどの理由で、自分のサーバに置いて利用することも可能です。その際は、以下の画像のうち欲しい物を右クリックで保存してください。

画像 説明
18x18px
22x22px
25x25px
39x39px
18x18px, RTL
22x22px, RTL
25x25px, RTL
39x39px, RTL

App Center Categories

App Center Categoriesの和訳です。App Center全般についてはApp Center、App Center登録までの詳細な手順についてはApp Centerチュートリアルをご覧ください。


以下は、2012年7月9日 6:20変更分までの和訳です。
アプリがApp Centerガイドラインに準拠している場合、Facebookユーザはカテゴリ選択を通じてアプリを見つけられるようになります。アプリを見つけやすくするには、以下の要領でカテゴリを設定してください。
  • アプリが何で、何をするのか、を反映しているカテゴリを選ぶ
  • 多くの人にとって意味が通じるカテゴリ分けをする

注意:選択したカテゴリにアプリが属さない場合、Facebook Plarform teamがより適したカテゴリに再分類します。以下に紹介されているカテゴリは、App Center上ではマージして表示される場合があります。

Category Description
Books 本を見つけ、評価し、購入するためのアプリ
(例: Scribd, Kobo, Nook by Barnes & Noble, Goodreads)
Business 仕事を見つけたり共有するのを助けるアプリ、専門技能について学ぶアプリ、その他
(例: BranchOut, LinkedIn)
Communication チャット、ビデオ、ステータス投稿、その他を通じて、人々が係わり合い、対話するのを助けるアプリ
(例: Skype, Zoosk, Twitter)
Education コースを受講したり、教科書を購入したり、チューターを見つけることにより、新しいスキル習得を助けるアプリ
(例: Chegg, Khan Academy)
Entertainment ショーを探したり、映画を評価したり、セレブネタを追ったり、一般的な娯楽に関するアプリ
(例: Netflix, Hulu)
Fashion 服、流行、スタイルを共有するアプリ
(例: Pose, Pinterest)
Finance お金、支出、投資に関して学んだり記録したりするのを助けるアプリ
(例: PayPal)
Food & Drink レシピを共有したり、新しいレストランを発見したり、どこで食べたかを記録するのを助けるアプリ
(例: Foodspotting, Foodily)
Games ルールに従って遊び、楽しむためのアプリ。これらのゲームは、数多くのゴール、ルール、チャレンジを含み、インタラクティブであるべきです。
Health & Fitness 健康管理に関するアプリ
(例: Runkeeper, Nike, Endomondo)
Lifestyle ライフスタイルのトレンドや週間に関するアプリ。ファッションやゲストのもてなし、インテリア、不動産を含みます。
(例: Causes, Horoscope, Calendar)
Local ユーザの周りの建物や施設を探すアプリ
(例: Yelp, Foursquare)
Music 音楽を聴いたり、バンドを見つけたり、プレイリストを作ったり、ミュージシャンの話題を追ったりするのを助けるアプリ
(例: Spotify, Pandora, SoundCloud)
Navigation 地図や移動手段を提供して、ユーザが行きたい場所へ到着するのを助けるアプリ
(例: MotionX)
News ニュース記事を読んだり、時事ネタを理解したり、重要な話題を共有するアプリ
(例: Washington Post Social Reader, The Guardian, Huffington Post)
Apps for Pages Facebookページの管理や改善を助けるアプリ
(例: Static HTML, BandPage, Wildfire Iframes for Pages)
Photo 写真や絵画の閲覧、共有、編集を助けるアプリ
(例: Instagram, iPhoto)
Productivity タイムマネジメントや効率化に関わるアプリ
(例: DropBox, SlideShare, Wunderlist)
Reference 色々な話題について、全般的な情報や追加の情報を提供するアプリ
(例: Bing)
Shopping 服、室内着、服飾品その他の購入に使うアプリ
(例: Etsy, Fab.com, Groupon, LivingSocial)
Sports スポーツを観戦したり、学んだり、その話題を追うためのアプリ
(例: ESPN, NFL Fan Zone)
Travel 世界中の色々な場所の発見に関わるアプリ
(例: TripIt, TripAdvisor, Gogobot)
Utilities バッテリーの寿命を監視したり、ウェブ検索を簡単にするなど、日々の生活に関わるアプリ
(例: Norton Safe Web, Bump, RockMelt)
Video 動画、映画の予告、ビデオクリップの作成、発見、閲覧を助けるアプリ
(例: Social Cam, Viddy)
Weather 天気を追ったり、それに基づいて計画を立てるためのアプリ


ゲームカテゴリは、以下のサブカテゴリをサポートします。

Subcategory Description
Action & Arcade 短いステージと、シンプルで直感的な操作性を持ち、短時間でレベルアップするゲーム
(例: Diamond Dash, Bubble Island, Bejeweled Blitz)
Adventure  反射神経面でのチャレンジもしくはアクションを扱うゲームで、多くの場合、対戦ではないもの。
(例: Wild Ones, Backyard Monsters)
Board 交互のターンで遊ぶゲーム
(例: Words with Friends, RISK: Factions, Farkle)
Card カードを用いるゲーム
(例: Uno, Poker)
Casino 運任せのゲーム
(例: Bingo Blitz, Slotomania)
Family ほどほどの難しさで、家族向けのゲーム
(例: Ice Age Village)
Puzzle 理詰めでパズルを解いたり、迷路を脱出するようなゲーム
(例: Hidden Chronicles, Tetris Stars)
Simulation 現実もしくは架空の世界を模したゲーム
(例: Cityville, The Sims, Café World)
Sports スポーツをプレイしたり、そのチームを管理するのを模したゲーム
(例: FIFA Superstars, Madden NFL Superstars)
Strategy 注意深い思考力と計画性で勝つゲーム
(例: Empires & Allies, Social Empires, Chess with Friends)
Trivia 名称、事実、できごとなどを記憶し、それを試されるゲーム
(例: Family Feud, Who Wants to Be A Millionaire?)
Word 単語を正しく、もしくは創造的に使うことを試されるゲーム
(例: Scramble With Friends, Scrabble)

Real-time Updates

Real-time Updatesの和訳です。これを用いることで、Facebook上で更新されたアプリユーザの情報について通知を受けることができます。Facebook Night vol.7 発表内容まとめ 3:Batch RequestとReal-time Update APIで実装例を紹介していますので、そちらもご覧ください。


以下、2012年6月21日 9:39更新分までの本文です。

Introduction

Facebook上での変更を購読できるよう、Graph APIはReal-time Updates APIを提供しています。これにより、都度Facebookサーバへ問い合わせるのではなく、データをキャッシュしておいて必要に応じて更新できるようになります。データのキャッシュとこのAPIを併用することで、アプリの信頼性やロード時間の向上が期待できます。

購読対象に変更があった場合、Facebookはアプリ側が指定したコールバックURLに対してHTTP POSTリクエストを送信して、変更一覧を渡します。大体の場合、この通知は変更が起きてから数分の間に渡されます。

以下は購読登録のステップです。

  1. FacebookからのHTTP GETリクエスト(確認用)とHTT POST(変更データの受け取り用)を受け付けるエンドポイントURLを設定します。
  2. https://graph.facebook.com/<app-id>/subscriptionsへHTTP POSTリクエストを送信し、確認用リクエストを受け取ります。

Objects

以下のオブジェクトを購読可能です。

  • userGraph APIユーザオブジェクトの特定のフィールドやコネクションに変更があったときに通知を受けることができます。
  • permissions – Get notifications when your users change the permissions they afford your applications. The available permissions are listed in the scope table in the permissions API reference. ユーザがアプリに対して許可しているパーミッションに変化があった時に通知されます。対象となるパーミッションはPermissionsドキュメントをご覧ください。
  • page - Facebookページのタブにアプリをインストールしている場合、そのFacebookページのname, category, pictureなどの一般公開プロパティに変化があった時に通知を受けられます。対象となるプロパティはhttps://graph.facebook.com/<PAGE_ID>で得られるものと同じです。

注意:ユーザオブジェクトの全プロパティやコネクションが購読対象となるわけではありません。verifiedプロパティは購読対象外であることに気をつけてください。ユーザオブジェクトのコネクションの中で購読できるのは、feed, friends, activities, interests, music, books, movies, television, likes, checkins, location, eventsです。home, tagged, posts, photos, albums, videos, groups, notes, inbox, outbox, updates, accountsの購読はまだできません。

将来的には対応するプロパティを増やす予定です。興味のある方はこのページを時々チェックしてください。


Subscription APIs

https://graph.facebook.com/<app-id>/subscriptions?access_token=... に対してリクエストを送信することでできることは3つあります。違いは、送信するリクエストがPOST, GET, DELETEメソッドのどれになるかという点です。

  • POST: 購読の追加もしくは変更
  • GET: 購読対象オブジェクトとフィールドの一覧取得
  • DELETE: 購読削除

いずれの場合も、アプリのアクセストークンが必要となります。取得にはアプリのアプリIDとアプリのシークレットキーを使います。

https://graph.facebook.com/oauth/access_token?client_id=<APP_ID>&client_secret=<APP_SECRET>&grant_type=client_credentials

Add or Modify a Subscription

購読を追加するには、以下のパラメータと共にPOSTリクエストを送信します。

  • object - アップデートの通知を受けたいオブジェクトを指定します。user, page, permissionsを指定できます。ここで指定するタイプのオブジェクト全部に対する変更通知を受けることになります。例えばここでuserを指定すれば、アプリ利用ユーザ全員が対象となりますし、pageを指定すれば、アプリをタブに追加しているFacebookページ全部が対象となります。
  • fields - objectで指定したオブジェクトのプロパティもしくはコネクションをカンマ区切りで指定します。ユーザのname, picture, friends, ニュースフィードの変更通知を受けるには、name,picture,friends,feedを指定します。
  • callback_url - 更新通知を受けるコールバックURLです。
  • verify_token - アプリ側が指定するトークンで、購読確認用のリクエスト受信時に送られてきます。PubSubHubbubの仕様に基づいたパラメータです。

FacebookがPOST送信を受け付けると、アプリのコールバックURLに対してGETリクエストを送信し、URLが有効で更新通知を受け付けるよう実装されていることを確かめます。この確認手順については後述します。購読追加を完了するには、コールバックURLは確認用のリクエストに対し、正しくレスポンスを返す必要があります。

それぞれのオブジェクトに対して一個の購読紙か追加できないことに気をつけてください。既に該当オブジェクトを購読中の場合は、既存の登録内容が上書きされます。

List Subscriptions

GETリクエストを送ることで、JSONエンコードされた購読内容一覧が返されます。

[
  {
    "object": "user",
    "callback_url": "http://www.xyz.com/sub_endpoint?xyz_token=123",
    "fields": ["email", "friends", "name", "picture"],
    "active": true
  },
  {
    "object": "permissions",
    "callback_url": "http://www.xyz.com/sub_endpoint?xyz_token=123",
    "fields": ["email", "read_stream"],
    "active": true
  },
  {
    "object": "errors",
    "callback_url": "http://www.otherdomain.com/sub_endpoint?xyz_token=456",
    "fields": ["canvas"],
    "active": true
  }
]

Delete Subscriptions

DELETEリクエストを送ることで全購読を解除できます。objectパラメータを指定すれば、そのオブジェクトに対する購読のみ解除できます。


Your Callback Server

コールバックURLに指定したエンドポイントは、GETとPOST双方のリクエストを捌けなくてはなりません。

購読追加時の確認手順ではGETリクエストが送信され、購読追加完了の後、変更通知はPOSTリクエストで送信されます。

Subscription Verification

購読の追加 / 変更の過程で、コールバックURLに対して以下のパラメータがGETリクエストで渡されます。

  • hub.mode - 文字列subscribeが常に渡されます。
  • hub.challenge - ランダム文字列
  • hub.verify_token - アプリからverify_tokenで渡された文字列

まずアプリ側はverify_tokenをチェックし、hub.challengeの値を返すべきです。これにより、悪意あるアプリのDDoS攻撃を防ぎます。

PHP開発者への注意:PHPでは、クエリパラメータ名のドットとスペースがアンダースコアに置き換えられます。そのため、上記のパラメータへのアクセスには、$_GET["hub_mode"], $_GET["hub_challenge"], $_GET["hub_verify_token"]を用いる必要があります。詳しくはPHPのマニュアルをご覧ください。

Change Notifications

購読対象のオブジェクトに変更があった際には、FacebookサーバからコールバックURLに対してHTTP POSTリクエストが送られます。content-typeはapplication/jsonで、更新内容のJSONエンコードされた物がbodyで渡されます。
{
"object": "user",
"entry": 
[
    {
        "uid": 1335845740,
        "changed_fields": 
        [
            "name",
            "picture"
        ],
       "time": 232323
    },
    {
        "uid": 1234,
        "changed_fields": 
        [
            "friends"
        ],
       "time": 232325
    }
]
}

ここでは実際のデータが渡されないことに注意してください。更新後の値を取得するには、通常の手順でAPIを用いてアクセスします。常時アクセスできるデータである場合、更新通知された直後に最新データを取得し、次回ユーザがログインした際の読み込み時間を短縮したいと思うでしょう。

Facebookは変更内容を要約し、5秒に一回、もしくは未通知の更新が1000個を越えた段階で、まとめてコールバックURLに対して送信します。それだけの量に対応できるように実装してください。通知に失敗した場合、Facebookはすぐに再通知を試み、徐々に頻度を落としながら24時間リトライを続けます。

全部のレスポンスで、通知内容のSHA1シグネチャを含むX-Hub-SignatureをHTTPヘッダで送信しますが、これにはアプリのシークレット鍵がキーに用いられます。

Other Examples

購読追加 / 変更に失敗した場合のエラーは以下のようになります。

{
"i":1234,
"o":"errors",
"u":4,
"f":["canvas"],
"d":{
    "url":"http:\/\/www.example.com",
    "suf":"onethefarm\/",
    "e":"HTTPErrorException",
    "c":"500"
    }
 }

Sample Implementations

githubでサンプルを公開していますので、そちらもご覧ください。

Built-in Like

Built-in Likeの和訳です。6月21日にOpen Graphのビルトインアクションとして追加されたいいね!アクションを紹介しています。独自のOpen Graphアクションを定義する際には一般的で簡潔な動詞を指定するよう勧められていますが、そうして色々なアプリで定義された利用頻度の高いアクション を、Facebook Platformが順次ビルトインアクションとして取り込んでいる印象です。ビルトインアクションとして登録された場合、それまで独自で定義していたアク ションからビルトインアクションへの切り替えを強制されますが、Facebook上で最適に表示・拡散されるなどの利点があります。


以下、2012年7月3日 12:09更新分までの本文です。

今日、ウェブ上のFacebookユーザによって最も利用されているアクションである「いいね!」が、Open Graphのビルトインアクションで利用できるようになりました。開発者はカスタマイズしたいいね!ボタンを作ることで、Open Graphアクションとしてのいいね!がどのようにユーザ体験に結びつくのかをデザインすることができます。これはモバイルでもウェブでも機能する為、アプリ上のコンテンツ妥当性を向上させつつ、ディストリビューションの拡大を期待することができます。


Publishing Built-in Likes

以下の条件を満たす限り、アプリはユーザの代理としてビルトインのいいね!アクションを投稿することができます。

  1. アプリ上のコンテンツを閲覧しているのがFacebookユーザで、なおかつ、アプリを認証済みでpublish_actionsパーミッションを許可している
  2. アプリ上のコンテンツはOpen Graphオブジェクトページを保有していて、OGPメタタグを正しくマークアップしている
  3. アプリが実装し、なおかつコンテンツに紐づいているいいね!ボタンを、ユーザが意図的にクリックした

開発者は、クリックできるタイプのいいね!ボタンをデザインすべきです。ブランドガイドラインに従い、このいいね!ボタンはアプリのブランドを使うべきで、Facebookブランドを使ってはいけません。すでにカスタマイズしたいいね!ボタンを利用しているアプリは、ビルトインのいいね!投稿によるFacebook上でのディストリビューション増加を期待することができます。

ビルトインのいいね!アクションを投稿すると、他のOpen Graphアクション投稿が表示されるのと同じ場所(リアルタイムフィード、タイムライン、アクティビティログ)に同じように表示されます。



attachment


ビルトインのいいね!アクションは以下の手順で実装します。

  1. アプリ設定ページのOpen Graphセクションで、ドロップダウンで表示されるビルトインのLikeを選択します。

    attachment2
  2. ユーザがいいね!できるOpen Graphオブジェクトに紐づけるいいね!ボタンを作成します。
  3. 認証済みでpublish_actionsパーミッションを許可しているユーザがボタンをクリックしたら、ビルトインのいいね!アクションを投稿します。

ビルトインのいいね!アクションの実装は他のOpen Graphアクションと同じで、実装後に提出し、許可される必要があります。ユーザ未認証の場合であれば、これまで通りいいね!ボタンのプラグインを利用すべきです。

Open Graphオブジェクトに対してビルトインのいいね!アクションを投稿するには、ユーザアクセストークンとオブジェクトのURLをパラメータに指定して、以下のようにHTTP POSTリクエストを送信します。このとき、Open Graphオブジェクトの型(og:type)はどれでも大丈夫です。

curl -X POST \
     -F 'access_token=USER_ACCESS_TOKEN' \
     -F 'object=OG_OBJECT_URL' \
     https://graph.facebook.com/[User FB ID]/og.likes

成功すると、以下のようにいいね!アクションのIDを返します。

{ “id”:”396528780387583” }

すでにいいね!したオブジェクトに対して再度いいね!アクションを投稿しようとすると、以下のエラーが返る点に気をつけてください。

{
  "error": {
    "message": "(#3501) User is already associated to the object
object on a unique action type Like. Original Action ID:
396497300390731",
    "type": "OAuthException",
    "code": 3501
  }
}

ただし、前回のいいね!が削除済みであれば再度いいね!することが可能です。投稿済みのいいね!アクションを削除するには、いいね!アクションのIDを指定して、以下のようにHTTP DELETEリクエストを送信します。

curl -X DELETE \
     -F 'access_token=USER_ACCESS_TOKEN' \
     https://graph.facebook.com/[Like Action Instance ID]


Notifications for Built-in Likes

ビルトインのいいね!アクションは、ユーザが作成したコンテンツをOpen Graphを通じて投稿するようなアプリで特に有効で、私たちはこれらのOpen Graphアクションを「creation action」と読んでいます。例えば、ユーザが「レシピ(recipe)」を「書く(write)」ことができ、しかもそれらのアクションがOpen Graph投稿されて共有されるような、ソーシャルクッキングアプリを想像してください。ユーザによって実行されるアクションであることから、ここではwriteが「creation action」にあたり、そのアクションを通じてrecipeオブジェクトが生成されます。

ソーシャルクッキングアプリ上で友だちがrecipeを見て、それに紐づくいいね!ボタンを押すと、Facebookの通知欄にそれが流れます。writeアクションを通じてrecipeオブジェクトを生成したユーザの通知欄には、友だちがrecipeをいいね!したことが流され、友だちのアプリ上でのアクティビティが把握できます。



attachment3



ビルトインのいいね!アクションでの通知を有効にするには、オブジェクトの「creation action」を適切に設定します。

  1. アプリ設定画面のOpen Graphセクションで、ユーザが生成するコンテンツを表すOpen Graphオブジェクトを設定します。その後、Advancedをクリックします。
  2. Creation Actionフィールドに、このオブジェクトを生成するアクションを入力します。
    attachment4
  3. Save Changesをクリックします。
  4. アプリを利用しているFacebookユーザがコンテンツを生成したときは、アプリは今指定したOpen Graphアクションを通常通り投稿します。
先述した通り、開発者は独自にいいね!ボタンをデザインすべきです。ユーザによって生成されたコンテンツを誰かが見ていいね!ボタンを押したら、ビルトインのいいね!アクションをOpen Graphに対して投稿してください。Open Graphオブジェクトにcreation actionが指定されていない場合、Facebookの通知欄には何も流れません。
記事検索