Facebook API v2.1リリース Facebookアプリは作成日時点の最新バージョンのAPIしか使えない

8.12
2014

v2.1

つい先週まで、Facebook API v2.0の話題だったというのに、もうv2.1がリリースされてしまいました。
v2.1における変更点が複数ありますが、詳細についてはすでにまとめているサイトも多いので適当にググってください。

Graph API v2.1出ました : Facebook開発者向けドキュメントの日本語訳とTips
http://facebook-docs.oklahome.net/archives/52179589.html

今回の変更で大きいモノだけピックアップします。
v2.1

Few weeks ago, we were talking about API v2.0. But now, v2.1 has been released.
There is some changes about v2.1 from v2.0, you will be able to find these details on Google search.

Graph API v2.1出ました : Facebook開発者向けドキュメントの日本語訳とTips
http://facebook-docs.oklahome.net/archives/52179589.html

In this article, picked up big changes.

なお、原文は以下です。

Facebook Platform Changelog
https://developers.facebook.com/docs/apps/changelog

friends APIで友達の数を取得できるようになった

friend4

先日、「Facebook API v2.0で、フレンド数やフレンド一覧を取得する方法」という記事を書きましたが、この仕様、v2.1のタイミングで実装され、合わせてv2.0にも遡及して適用されたものだったんですね。
なるほど。

FQL形式でのデータ取得および、REST APIが完全に廃止

その昔、FacebookのAPIはFQL形式で呼び出していました。また、その後REST API(厳密には、当時は「REST」はついていなかった)と呼ばれるAPIが登場。
さらにその後で、Graph APIと呼ばれるものが登場し、その中でv1.0、v2.0、v2.1と進化してきています。

初期のFQL形式またはREST APIについては、先日までは一応動いてましたが、公式のdocsでは結構前から利用は非推奨となっており、今回ついに動作しなくなったようです。

ファンゲート廃止及びポリシーの変更

これは先日先行して「Facebookページの「ファンゲート」 終 了 のお知らせ(2014/11/5まで)」という記事にまとめました。

大きく二つの要素があります。

  1. プラットフォームポリシーで、「ページへのいいね!」に対してインセンティブを与えることが禁止された(ポリシー変更)
  2. signed_requestのlikedフィールドの返り値が常にtrueになるためアプリの「ファンゲート」機能が使えなくなる(仕様変更)

この2つは別の話で、
1のポリシー変更は、11/5から適用されます。
2の仕様変更の方は、8/7以前に作成していたアプリは11/5に適用。8/7以降に作成したアプリは即日適用されます。

Facebookアプリの作成日以降のバージョンのAPIしか利用できない

さて、細かい仕様変更については一旦置いておいて、このFacebookのバージョニングについて改めてまとめておきます。

Facebook Platform Versioning
https://developers.facebook.com/docs/apps/versions#versioning

上記のサイトにある通り、v2.0以降については、新バージョン(今回ならv2.1)がリリースされるても、その日から2年間、旧バージョン(今回ならv2.0)が使えます。これは移行のための猶予期間のようなものです。
ただしこれは、あくまでもその「新バージョンがリリースされた日」よりも前に作成されたアプリの場合の話です。

ややこしい話なのですが、「新バージョンがリリースされた日」を起点に、その日よりも前に作成したアプリでは古いバージョンと新しいバージョンの両方が使えますが、「新バージョンがリリースされた日」よりも後に作成したアプリでは、古いバージョンは利用できずに新しいバージョンのみが利用できる形となります。

versioning

つまり、Facebookアプリは作成日の時点で最新のバージョンのAPIを利用することになり、過去のバージョンのAPIは利用できません。
ただし、作成日以降に新しいバージョンのAPIがリリースされた場合は、その移行猶予期間が2年間あります。

この辺は、「APIのバージョン指定をしない場合は、自動的に最も古いバージョンのAPIが呼び出される」というような表記もあるので混乱しそうですが、ここで言う「最も古いバージョン」は、あくまでもアプリ作成時点の最新バージョンがキャップとなります。

なお、利用しているアプリが現在どのバージョンのAPIを利用しているかが、HTTPヘッダで返ってくるようになりました。
ためしにFirefoxのプラグイン、Live HTTP headersで確認。

api-ver-header

今後は、施策の度にFacebookアプリを作成しているようなケースでは、昨日まで想定していた仕様が今日作ったアプリでは使えなくなるということも考えられるので、仕様を検討する前に、まずは先に空のFacebookアプリを作成することから始めるようにしないといけません。

例えば、先日8/7よりも以前に企画・設計をし、仕様も含めてFIXしたキャンペーンのアプリを作成した日が8/8だとすると、下手をすれば死人が出ますw

サポート期間内であれば古いバージョンのAPIも使えるようにしてくれればいいんですけどね・・・。

このルールだと、以下にたくさんのアプリをストックしておくか、ということにもなりかねず、大量の空アプリを作ってストックしておいて、運悪くバージョン変更の憂き目にあった会社に対してそれを有料で売るようなビジネスが成立しますね。

誰かやってみてください。

Hereinafter is official changelog docs.

Facebook Platform Changelog
https://developers.facebook.com/docs/apps/changelog

You can now get the number of friends from “friends API”

friend4

Few days ago, I wrote an article “How to get the number or list of friends by Facebook API v2.0.
This was implemented by API v2.1, and was also applied to API v2.0 at the same time.
Hmmm…

The FQL and REST APIs are no longer available in v2.1

In past, we had used the FQL for getting the data from Facebook, and then the REST APIs had been available.
Then, the Graph API was released. It has changed to v2.1 from v1.0.

The FQL and REST APIs had worked until Graph API v2.1 was released.
But facebook did not recommend to use the FQL and REST APIs from long before.
Finally, they don’t work any more.

“Like Gating” function died, Platform Policies was changed

I wrote an article ““Like-gating” for facebook page will die on November 5th 2014.“, few days ago.
This is important, so write here once again.

  1. Platform Policies was changed, you can no longer incentivize users to like a page. (Policy Change)
  2. It has been always “true” that “liked” field in the response from “signed_request”, so “Like Gating” no longer work. (Spec Change)

The change #1 is different from the change #2.
Change #1(Policy change) will be applied at November 5th 2014.
If the app was created before August 7th, change #2(Spec change) will be applied at November 5th 2014.
But if the app was created after August 7th, change #2 will be already applied.

Facebook app can use only the API that is the latest version at the time it was created

Well, let’s see the “versioning” of facebook, again.

Facebook Platform Versioning
https://developers.facebook.com/docs/apps/versions#versioning

As above, after API v2.0, if new version API(This time, v2.1) is released, you can use old version API(This time, v2.0) in two years from the date that new version was released. This is the time for migration.

But this is the case of that the app had been created before the date that new version api was released.

On basis of “The day that new version api was released”, if the app was created before that day you can use either old version or new version.
If it was created after that day, you can use only new version.

versioning

Therefore, facebook apps can use only the API that is the latest version at the time it was created, cannot use the old version.
If further new version API is released after apps had been created, there will be the time for migration for two years.

It’s confusing me, because of there is the description that “if the api version was not called the oldest version would be called” in docs.
But, “the oldest version” means “the oldest version of that the app can use”.

And now, HTTP header reply the response what version was called by your app.
I tried this by “Live HTTP headers” extension of Firefox.

api-ver-header

From now, it will be possible to happen that the app created today does not work by the specification that was thinking yesterday, in case of that you create the app each time.
You should create the new facebook app first, before thinking about specification.

For example, if you were planning some specification of App before August 7th and you created that app after August 8th, you will be dead.

I hope that Facebook allow to use the old version API it has nothing to do with the creation date of the application.

In this rule, we should create many apps even if we won’t use.
And, someone can start the new business that sell the stocked app to the app developer that is in trouble over API version change.
Why don’t you?