Facebookアプリ開発に挑戦(その5・Permissionsの取得)

  • 投稿日:
  • by
  • カテゴリ:

Graph APIでFacebookからデータを取得する場合、「Permissions」が必要になることが多いです。
今回は、Permissionsについて解説します。

1.Permissionsについて

Graph APIを使うと、Facebookからユーザーのデータを得ることができます。
しかし、無制限にデータを得ることができてしまうと、プライバシー上問題が生じることがあります。
そこで、アプリケーションがユーザーに許可を求める際に、許可して欲しい操作をユーザーに提示し、許可を得る仕組みになっています。
これが、Permissionsの基本的な考え方です。

たとえば、ウォールの情報を読み取るアプリケーションを作る場合、アプリケーションの許可を求める際に、「read_stream」というPermissionsも許可してもらうように指定します。
すると、「アプリの許可」のダイアログボックスに、「ニュースフィードの投稿へのアクセス」の許可を求めるメッセージが表示されます。

「ニュースフィードの投稿へのアクセス」の許可を求めるメッセージ

なお、個々のAPIで必要なPermissionsは、それぞれのAPIの解説のページに記載されています。
また、Permissionsの一覧は、Facebook Developersのサイトの「Permissions」のページにあります。

2.Permissionsを得る

Permissionsを得るには、FB.login関数でユーザーに許可を求める際に、必要なPermissionsを指定します。
書き方は以下のようになります。

FB.login(
  function(response) {
    if (response.session) {
      ユーザーがアプリケーションを許可したときの処理
    }
    else {
      ユーザーがアプリケーションを許可しなかったときの処理
    }
  },
  { perms : '必要なPermissions' }
);

なお、複数のPermissionsが必要な場合は、「必要なPermissions」の部分に、それらのPermissionsをコンマで区切った文字列を指定します。
たとえば、フィードの読み込みだけでなく、投稿も許可してもらうことが必要だとします。
この場合は、「read_stream」のほかに、「publish_stream」というPermissionsも必要です。
そこで、上のリストの10行目を以下のように書きます。

{ perms : 'read_stream,publish_stream' }

3.Permissionsのチェック

アプリケーションに許可されているPermissionsは、FB.getLoginStatus関数で調べることができます。

この関数でを実行すると、コールバック関数が呼び出され、「response」というオブジェクトがパラメータとして渡されます。
そのオブジェクトの「perms」というプロパティに、Permissions等の情報を含んだJSONの文字列が代入されます。
JSONをオブジェクトに変換すると、その中に「extended」というプロパティがあり、許可されているPermissionsの配列が代入されます。

上記のことから、以下のようにFB.getLoginStatus関数を使って、アプリケーションが許可されているときだけ、必要な処理を行うことができます。

FB.getLoginStatus(function(response) {
  var perms_a = eval("(" + response.perms + ")");
  var perms = {};
  for (var i = 0, j = perms_a.extended.length; i < j; i++) {
    perms[perms_a.extended[i]] = true;
  }
  if (response.session && perms.必要なPermisson && ・・・) {
    ・
    ・(アプリケーションが許可されているときの処理)
    ・
  }
}):

2~6行目は、JSONの文字列を変換した後、「perms.Permissions名」がtrueかどうかで、それぞれのPermissionsが許可されているかどうかを調べられるようにする処理です。
たとえば、「read_stream」のPermissionsが許可された場合、「perms.read_stream」の値がtrueになります。

7行目は、アプリケーションが許可されていて、なおかつ必要なPermissionsが得られているかどうかを判断する処理です。
許可されていれば、「アプリケーションが許可されているときの処理」の部分に処理が進みます。