2009-05-22

Google Friend Connect API の initOpenSocialApi をもっとよく知る

おはようございます。なかじまんです。

はじめにお知らせです。

Google Developer Day 2009 は 6月9日(火) です。Google Developer Day 2009 Japan ハッカソンの募集 もはじまっています。ハッカソンは 10日(水) と 11日(木) です。昨年はあっという間に定員に達しましたのでお早めに。

本題です。

Google Friend Connect API (GFC API) の initOpenSocialApi メソッド は、ユーザのアイデンティティに変化があったとき、コールバックするという仕様なのですが、そのコールバックのタイミングとか状態の関係がどうも分かりにくいです。

そこで、次のソースコードを、様々な条件下で動かして、initOpenSocialApi メソッドの振る舞いを確認してみました。

google.friendconnect.container.loadOpenSocialApi({
site: '03382920006806842951',
onload: function() {
console.log(arguments);
console.log(document.cookie);
console.log(opensocial.hasPermission());
}
});

コールバックのタイミング

ページをロードしたとき、コールバックします。このコールバックは、GFC API が使える状況が整ったというタイミングと言い換えることができます。このコールバック後でないと、一部の GFC API は正しく動作しません。

サインインしたとき、コールバックします。サインインとは renderSignInButton メソッドのボタンや requestSignIn メソッドを指します。サインアウトしたときも同様です。サインアウトとは requestSignOut メソッドを指します。

requestSettings メソッドで、プロフィールや設定を変更したときも、コールバックします。なお requestInvite などその他のメソッドでは、コールバックしませんでした。

コールバックの引数

コールバックは、常に2つの引数をとります。1つ目は、セキュリティトークンを表す文字列です。コールバックの度にトークンは変化します。2つ目は、何かよく分からない数値です。コールバックする度に変化しますが、パターンがありそうな気もしますが、その意味や使い道は把握できていません。

cookie と有効期限

サインインしているとき、fcauth{siteId} という cookie にトークンが格納されます。cookie は、サインインのタイミングで変化し、有効期限は1年程度のようです。requestSettings メソッドは cookie 値は変化しませんでした。サインアウトすると cookie は削除されます。

また fcauth{siteId}-s という cookie もあります。fcauth{siteId} と値は同じですが、有効期限はブラウザセッションです。また、fcauth{siteId}-s は、自サイトで明示的にサインイン(requestSettings メソッドも含む)したときのみ格納されます。

サインインの有無

cookie の有無からサインインしているか判断できます。

opensocial.hasPermission は、サインインしていても、サインアウトしていても、常に false でした。パーミッションを表現していないので未実装なのでしょう。ですので、サインインの判断には使えません。

また、GFC API の実例の中には opensocial.DataRequest で VIEWER のプロフィールを取得して、成功したか、失敗したかの結果から、サインインの有無を判断するものもありました。

どうしようか考えてること

↑ということなので、initOpenSocialApi メソッドのコールバックは、何が引き金となって呼び出されたのか、判断することができません。ですが、何回目のコールバックか、cookie の有無とその変化を見て判断できそうな気もします。

もうしばらく検討します。何かよい方法があったらお伝えします。

0 件のコメント: