Opensocial入門を読んで見た(第五章)四回目

   

今日、「1億人のユーザーを抱える『FarmVille』の開発と運用・・・Zynga 」の連載を見ました。

Facebookアプリの『FarmVille』は僅か5週間という開発期間の中で、11名のスタッフによって制作されました。今、インストール数では1億1000万人以上、3100万人が毎日遊ぶというゲームみたいです。

いくつか今後の参考になる部分がありました。
1、開発は以下のプログラミング言語で作られています。

  • サーバー側にPHP
  • クライアント側にFLASHを採用。
2、スケーラビリティに関してはネットワークレイヤーを置く。
スケーラビリティとは、コンピュータシステムの持つ拡張性。システムの利用者や負荷の増大に応じて、柔軟に性能や機能を向上させられることを意味する。

3、その他
ロード時間の短縮には
リモートコールの徹底した排除や、
ソーシャルネットワークラッパーの中の遅いFacebook APIの呼び出しや、
DBラッパーの中のSQLなどをキャッシュすることで対処しています。

ZyngaではNagiosやMuninを使って常にサーバーの負荷を監視しています。ロード時間/トラフィックのグラフ、Memcacheの解放回数などをチェックしているようです。

OpenSocial入門 ~ソーシャルアプリケーションの実践開発
OpenSocial入門 ~ソーシャルアプリケーションの実践開発

mixiアプリ内でFlashを使ってみよう

上記の記事にも書いてあるように、実際に利用者の方に見てもらう画面はFlashで作ればより動的に表現をすることができます。
利用方法は簡単に以下の3点です。
1、Flashに対応するためには、Gadgets XMLファイル内で設定が必要です。その際にはタグのfeatureを使います。
[cc lang=”javascript”]



[/cc]

2、次にの中にパラメータを記載
[cc lang=”javascript”]
type="application/x-shockwave-flash" wmode="opaque"
base="http://your.server.host/flash/"/>
[/cc]
注意点
mixiアプリ内でFlashコンポーネントを使用する際に、他のマイミクにmixiアプリの利用を勧めるための招待機能を利用すると、表示上の問題が発生する場合があります。
これを回避するために、wmode属性値として、”transparent”もしくは”opaque”を記述します。
上記の対応により、招待機能のポップアップ画面がFlashコンポーネントよりも手前に表示されるようになります。

3、実際にmixiアプリにFlashを埋め込む
[cc lang=”javascript”]

[/cc]
gadgets.flash.embedFlash()の引数は以下の通りです。
  1. swfファイルのURL
  2. Flashコンテンツを埋め込む先となるDOM要素またはID文字列
  3. 対象Flashコンテンツが必要とする「Flash player」の最小バージョン
  4. Flashコンテンツが埋め込まれる際に指定したいパラメータを持つオブジェクト
第二引数としてDOM要素をしていることになるため、あらかじめタグの[CDATAセクションのなかに「div」を仕込んでおくか、動的要素に生成しておくことが求められます。

情報を共有しよう。

※抜粋
mixiアプリは、Persistence APIを利用することで、情報の永続化および共有を行うことが可能となります。その際、特に共有に関して、扱われる情報の持ち主が誰なのか、という点を考慮した処理を記述することになります。つまり、永続化された情報の取得に関して「誰の情報を取得するか」という指定が必要となるということです。

1、情報の永続化
[cc lang=”javascript”]
var exp = “1 var result = 2;
var req = opensocial.newDataRequest();
req.add(req.newUpdatePersonAppDataRequest(opensocial.IdSpec.personId.VIEWER,"exp",exp),"response1");
req.add(req.newUpdatePersonAppDataRequest(opensocial.IdSpec.personId.VIEWER,"result",result),"response2");

req.send(function(data){
if(data.hadError()){
var msg =data.getErrorMessage();
//要求を失敗した際のエラー
}else {
var response1 = data.get("response1");
if(response1.hadError()){
var code = response1.getErrorCode();
var msg = response1.getErrorMessage();
//永続化に失敗したときのエラー処理
        }
// response2についても同様の処理
}
});
[/cc]

永続化で利用するのは「req.newUpdatePersonAppDataRequest」です。
  • 第一引数には会員を特定するためのID(ほとんどの場合VIEWER)
  • 第二引数には永続化する情報のキー文字列
  • 第三引数は永続化する情報の文字列

これらの引数を呼び出した結果を、「opensocial.DataRequest.add()関数」に渡して、send()でにリクエストを送ります。

2、永続化された情報を取り出す。

[cc lang=”javascript”]
var req = opensocial.newDataRequest();
req.add[req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), “viewer”);
var keys =[“exp”,”result”];
var idSpecPrams = {};
idSpecParams[opencioal.IdSpec.Field.USER_ID] = opensocial.idSpec.PersonId.VIEWER;
var idSpec = opensocial.newIdSpec(idSpecParams);
req = add(req.newFetchPersonAppDataRequest(idSpec,keys),”stored”); //この際、取得対象とする情報のキー名(stored)を指定します。
req.send(function(data){
var viewer = data.get(“viewer”),getData();
var stored = data.get(“stored”).getData();
var obj = stored[viewer.getId()];
var exp = obj[“exp”];
var result = obj[“result”];
//expおよびresultを画面に表示
});
[/cc]

永続化された情報を取り出す際には「誰の情報を取得する」かを指定する必要があります。今回はVIEWERを対象としています。今回は変数(idSpecParams)で対象となるVIEWERを設定し、それを引数に新しいopensocial.idSpec()オブジェクトを生成します。

Persistence APIにて提供されるnewFetchPersonAppDataRequest()関数を使うことで、永続化された情報を取得することができます。第一引数に対象者を、第二引数に永続されている情報を特定するキー文字列を指定しています。(今回は情報が2つあるので配列で”exp””result”を入れている)

後はsend()で指定しているコールバック関数を使い、取得した永続化情報を取り出しています。
永続化されている全ての情報を取得したい場合には、全てのキー文字列を配列で渡す方法の他に、「*」を指定することも可能です。
[cc lang=”actionscript”]
req = add(req.newFetchPersonAppDataRequest(idSpec,”*”),”stored”);
[/cc]


3、永続化された情報を削除する。

[cc lang=”actionscript”]
var req = opensocial.newDataRequest();
req.add(req.newRemovePersonAppDataRequest(
opensocial.IdSpec.PersonId.VIEWER, keys), “stored”);
req.send(function(data) {
var response = data.get(“stored”).getData();
if(response.hadError()){
//エラーの出た際の処理
});
[/cc]
【mixiアプリの場合】
newRemovePersonAppDataRequest()関数の第1引数には、 opensocial.IdSpec.PersonId.VIEWERのみ指定することが可能となっています。

第二引数には削除対象のキー文字列の配列、あるいは全てのキーを表す「*」を指定します。




Related Posts Plugin for WordPress, Blogger...