ドメインもブラウザも超えて、ログインなしでユーザを判別する「ExSO」でwebを進化させる

via:別ドメイン間でのSharedObjectの共有 – loftimg.jp/blog

このページを、違うブラウザでアクセスしてみてください。
さて、どうでしょう。アクセス回数が表示されましたね。で、URLから分かるとおり、これはFlashファイルを見ている状態です。

※普通の人ってブラウザを切り替えて使ったりしないもんかなぁ?

これはどういうことでしょうか。違うブラウザで見ているのにカウントが継続されています。クッキー? 違います。SharedObjectです。つまり、このFlashにとっては、どんなブラウザを使っていようとあなたはあなた、と識別しているんです(※当たり前ですがパソコンを変えるとデータは継続されません)。externalなSharedObjectなので個人的にExSOと呼んでます。

何をやっているかというと、SharedObjectにあなたのアクセス回数を保存しているだけです。保存先はサーバじゃなくって、あなたのPCです。「あなたの」っていう言い回しはイヤな感じですね。あんさんの? ユニークユーザーの、です。

きっかけは、ブログパーツ

別ドメインでSharedObjectを共有できたらどんなに嬉しいことか。と、この3ヶ月ほど考え続けていました。サイトで使うなら別にたいした話じゃありません。でも、ブログパーツで使えるとなると話は別です。
たとえばポイントあつめゲームのブログパーツがあったとして、あるブログで頑張っても、別のブログの同じパーツを見たときとか、違うブラウザで見たときにはポイントが0になってしまうと、やる気がないですよね。

ヤマダデンキのポイントをビックカメラでも使えたらどんなに素晴しいだろう、っていうかそれをSuicaに入れて、コンビニで使えたら? アマゾンで使えたら? といった、リアルで当たり前に起こっている進化をwebに取り戻すことを、ずっと考えてました。

やりかた

まず、読み込み元ファイルを作ります。
下で ryownet になっているのはサンプルなので、適宜名前を変えましょう(hoge とか mydata とか)。では sharedobject.fla を作り、メインタイムライン1に記述:

Security.allowDomain("*")
function getSharedObject():SharedObject{
return SharedObject.getLocal("ryownet","/")
}
//trace("sharedObject swf loaded")
//上のtraceは読み込みが完了したら一応表示するため。ムービープレビューで見れるよ

では書き出して、このswfobject.swfをブログパーツを置いてあるドメインにアップします。せっかくだからcrossdomain.xmlと同じ階層に置くと分かりやすいかも。

次にメインのパーツswfに記述します:

var ldr:Loader = new Loader()
var info:LoaderInfo = ldr.contentLoaderInfo
info.addEventListener(Event.INIT,LoaderInit)
function LoaderInit(e:Event):void{
var swf_root = ldr.content
addChild(swf_root)
//注:addChildしないとldr.contentのメソッドを呼べない
var so:SharedObject = swf_root.getSharedObject()
if(so){
var obj:Object = so.data
if(obj.num == undefined){
obj.um = 0
}else{
obj.num++
}
try{
so.flush()
}catch(e){
trace("書き込みエラー")
}
}
}
ldr.load(new URLRequest("http://YOURDOMAIN/sharedobject.swf"));

これで広がりのあるブログパーツを作れるようになりましたね!!

ちょっと考えるだけでも、「ブログバトラーは客を待つだけじゃなくて自分のデータを持ち出して戦いにいける」とか「いろんなブログに貼ってある世界の国旗がランダム表示されるパーツをどれだけコンプリートしたか」とか、上のみたいなアクセスカウンタとかゲーム得点カウンタとか、いろいろできそうです。何より、今までwebが気にも留めなかった「ブラウザが変わってもユーザを一意に認識する」というあたりまえのパーソナライズが、これで出来るようになりました。
ブラウザ戦争が分けてしまったユーザの多様化を、技術で取り戻すときが来たんです。

作る側から考えても、機能としてユーザ側のインセンティブになりますよね。

進化のその先

ブログパーツは、これからは「どのブログのパーツを読んでもデータは継続していく」ことが当たり前になっていくと思います。

さらには、SOの保存先を分かりやすくgetLocal("hoge&quot,&quot/&quot)にすれば(たとえば保存先を / だけにする)、ローカルのSOデータとオンラインのデータが連携できます。つまり、webの続きのAIRアプリとデータを連携できる、ということ。こりゃあ可能性広がりまくりんぐです!!

どんな風に広がりんぐかというと、こっちのページにパンプキンハントというサンプルパーツを用意しています。

かんたんに使えるセットはこちら。(CS3 .fla形式)

第三者クッキー

ここまで書いといて、プライバシー視点から見たときのことを考え直してみました。

これって第三者クッキー(トラッキングクッキー)に入るのかな。だとしたらプライバシー問題から、大手やECサイトでは採用されない…?
高木先生にかかるとアウトなラインでしょうか。