飴屋

facebookアプリ/日記3

アクセス権限を取得する

ログイン状況を調べる

前回、facebookアプリを設置するまではよかったのですが、ユーザの友達情報にアクセスしようとしたらActiveなアクセストークンを使えとのお達しがエラーオブジェクトとして返ってきましたので、その辺を解決してみようと思います。

まず、そのアクセストークンとやらがあるかないかを確認する処理です。

FB.getLoginStatus(function(response) {
if (response.session) {
atFirst();
} else {
logIn(atFirst);
}
});

FB.getLoginStatusというメソッドが現在のログイン状況を調べてくれるようです。iframeの中で動かすfacebookアプリは、iframeの中ではfacebook.comとは別のドメイン上で動作することになりますから、facebook上のデータにアクセスするにはいろいろと制約があるのですね。facebookにログインしているかどうかを調べるにもドメインをまたぐ制約を乗り越えなければなりません。ドメイン間での通信が無制限にできてしまうと、セキュリティ的に好ましくないので、facebookではOAuthという枠組みを使って、ユーザの認証を行うことになります。アクセストークンというのはその認証に使われるデータのことですね。

既に認証情報を持っていて、ログインが済んでいることが確認できれば、アプリの動作を開始してもOKです。atFirstという関数で実際のアプリの動作を行うことにしました。

ログインが済んでいない場合は、ログインをしてもらう必要がありますので、次のlogInという関数を呼び出すことにします。

ログインする

function logIn(func) {
FB.login(function(response) {
if (response.session) {
if (response.perms) {
func.call();
} else {
// denied
}
} else {
// failed
}
}, {perms:'user_about_me,friends_about_me,user_photos,friends_photos,publish_stream'});
}

ログインはFB.loginメソッドを使って行われます。最初の引数にはログイン処理後のコールバック関数を指定します。次の引数にはログインに関するパラメータを指定します。このパラメータに「perms」というのをくっつけておくと、アプリがユーザのソーシャルグラフにアクセスするための許諾をついでに申請してくれます。

http://developers.facebook.com/docs/authentication/permissions/

どんな許諾が必要になるかは上記のページに詳しく書いてありました。前回、ユーザの友達情報にアクセスできなかったのは、ここでいうところの「friends_about_me」という項目の許諾を得られていなかったからに違いありません。

コールバック関数にはログインが正常に行われたかどうか、許諾が得られたかどうかなどの情報が渡されますので、それらを適切にチェックして、本処理に戻りましょう。

なお、IE9で権限設定ダイアログを表示しようとしたら、ダイアログのポップアップ可否のアラートが出ました。回避できるなら回避したいですが、一度許諾した権限については二度目は暗黙のうちに許諾がでるようで、ポップアップ警告がでるのは最初の一回だけということになりますね。この辺の作法は他のアプリに倣えば、ユーザに不便はなさそうです。

自分の情報にアクセスしてみる。

function atFirst() {
FB.api('/me', function(response) {
alert(response.name);
});
}

ログイン時に「user_about_me」という項目へのアクセス許諾を得ているので、ユーザ自身の情報をGraph APIを通して取得できるはずです。前回出てきたFB.apiメソッドを叩いてみると無事に自分の名前が返ってきました。では、次回こそ、友達の名前にアクセスしてみたいと思います。

Date: 2011/6/6

日記一覧