飴屋

mixiアプリ/日記8

新しいアプリの開発

たくさんのmixiアプリを使っていると、アプリの設計の際に考慮しておくべきことがいろいろと見えてきます。また、mixiアプリでのマネタイズに関していろいろな意見がWEB上でも見られるようになってきました。FacebookやiPhoneと比較して、mixiがマーケットとしては規模が小さいという意見には考えさせられるところがありました。まぁ、そもそも私の場合、個人での開発なのでmixiの規模でも十分ですし、FacebookやiPhoneよりも知人が多く利用しているサービスなのが開発していて楽しいところでもあります。

さて、最初の小品アプリで学んだことを活かして、今度はもう少し規模の大きいアプリを作ってみようと思っています。サンシャイン牧場の100分の1ぐらいの登録者数を目指すところからやってみたいです。それで時間帯によって度々重くなるサンシャイン牧場をみながら思うのですが、人気アプリがサーバにかける負担ってどのくらいのものなんでしょう。FlashPlayerとアプリサーバとで処理をうまく分散させてやれば負荷も軽減できるのでしょうが、チート行為を防ぐためにはサーバ側に負担を強いる場面も多いと思うのです。その辺のサーバコストとゲームセキュリティとのバランス感覚が、経験不足のため悩ましいです。

Google App Engineを使ってコストを抑えたなんていうお話も興味深いですね。普段Perlを使うことが多いのですが、Pythonで書いてみるのも楽しそうかな。

アプリの活動を通知したい

今回は「mixiアプリを使って、ユーザがどのようなことをしたか」という情報をマイミクに通知する仕組みのことを書こうと思います。この情報はアクティビティと呼ばれ、「ホーム」画面でアプリ更新情報として表示されます。また、ユーザがアプリ管理画面で「専用情報ボックスを表示する」をチェックしたアプリに関しては、専用情報ボックスがホーム画面に表示され、アクティビティをアプリごとに通知してくれるようです。このボックスは3つまでしかおけませんし、何よりユーザがあんまり頻繁にアプリ管理をしてくれないんじゃないかという懸念が大きいので、実用性が薄いと私は思っています。
最新アプリ情報というページにいくとさらに細かく更新情報を眺めることができます。

アクティビティを送信する分、マイミクへの露出は増えるわけなので口コミでアプリを広めるための武器になる機能と考えられます。ですから、アプリによっては頻繁にアクティビティを送信するものがあります。中には「えっ、そんなことまで通知するの!?」とびくりするようなアクティビティが届くこともあります。また、ものすごくアクティビティを送るアプリに登録すると、アクティビティ一覧画面がそのアプリのアクティビティでいっぱいになっていることもしばしばあります。現に先ほど確認した私のホーム画面には、「RockYou! スーパー☆ペット」からのアクティビティばかりが並んでいます。私のペットはマイミクさんからとても大事にされているのですね・・・。
これも度を越してアクティビティがスパム的に利用される危険性を孕んでいるともいえます。mixiアプリは承認制なので一般公開される前にその辺はチェックが入るかもしれませんが、それとは別にアクティビティには送信可能回数の制限があるとのことです。アプリ利用中にマウスを動かすたびにアクティビティを送信する・・・なんていうアプリでも思いつかない限り、制限にひっかかるようなアプリにはならないと思いますけど。

var ap = {};
ap[opensocial.Activity.Field.TITLE] = "アクティビティタイトル";
var activity = opensocial.newActivity(ap);
opensocial.requestCreateActivity(
activity,
opensocial.CreateActivityPriority.HIGH, function(response) {
if (response.hadError()) {
var code = response.getErrorCode();
// エラー処理
} else {
// アクティビティ送信後の処理
}
}
);

私はmixiのデベロッパーセンターの例を参考に上記のようにスクリプトを書きました。
まずはアクティビティに載せる情報を準備します。apという空のオブジェクトに情報を載せていくことにしましょう。

ap[opensocial.Activity.Field.TITLE]
アクティビティのタイトル(というか本文)
ap[opensocial.Activity.Field.MEDIA_ITEMS]
画像を3点まで任意に掲載可能
ap[opensocial.Activity.Field.URL]
タイトルに張られるリンクのURL
ap[mixi.ActivityField.RECIPIENTS]
アクティビティ送信先ユーザの指定

タイトルは単なる文字列です。基本的にはこれだけ指定しておけばマイミクに送るアクティビティの情報としては十分です。opensocial.newActivityメソッドにこの情報を引数として渡すと、opensocial.Activityオブジェクトのインスタンスが返ってきます。この例ではactivityという変数に入れてあります。

できあがったアクティビティ情報をopensocial.requestCreateActivityメソッドに第1引数として渡すとmixiサーバ側に働きかけてアクティビティの送信が完了します。
第2引数はアクティビティの優先度として、「opensocial.CreateActivityPriority.HIGH」定数を渡していますが、2009/11/16現在ではこの優先度は未サポートの機能のようです。
第3引数に関数を渡すと、アクティビティの送信完了後にその関数を呼び出してくれるそうです。「アクティビティを送りました」なんてユーザに通知することも可能ですが、そんなことを表示するアプリはみたことないですね。

アクティビティに画像を掲載する

アクティビティの内容が文字情報だけですと寂しいので、画像をつけられるようにしたいという人も多いと思います。目立つようにアプリのアイコンをアクティビティに添付するアプリも多いようです。画像生成系のアプリでは生成された結果の画像を表示してあげれば、マイミクさんも興味を持ってくれることでしょう。あとはアプリのゲーム中に手に入れたアイテムを表示するなんてのもみかけます。

var mediaItem = opensocial.newMediaItem("image/png",'http://example.com/abc.gif');
ap[opensocial.Activity.Field.MEDIA_ITEMS] = [mediaItem];

opensocial.newMediaItemメソッドに画像のMimeTypeと画像のURLを指定することでopensocial.MediaItemオブジェクトのインスタンスが返ってきます。これが画像一つ分の情報となります。最大3つまでアクティビティに画像を指定できるので、掲載したい数だけ情報を作ってやり、ap[opensocial.Activity.Field.MEDIA_ITEMS]に配列情報として渡してあげましょう。アクティビティの送信手順は先ほどと変わりません。

MimeTypeの指定ができるということは、動画やその他の情報も扱えそうにみえますが、現状ではJPEG、GIF、PNGなどの画像がサポートされているようです。また、アクティビティとして表示される際に、指定の画像は縦横76ピクセルの正方形サイズで表示されるようですので、予めそのサイズに整形しておいてあげるときれいに表示されることになりそうです。

アクティビティのリンク先を変更する

アクティビティを表示するとタイトル情報にリンクがついています。これは標準で「http://mixi.jp/run_appli.pl?id=(アプリID)&owner_id=(送信者ID)」へのリンクとなりますが、場合によってはリンク先を変更したいこともあると思います。無制限にリンク先を指定することは(mixiさんの戦略からか?)できませんが、run_appli.plまたはview_appli.plに対してパラメータ付きでリンクを張ることができます。

var params = {key1l:value1,key2:value2};
var escaped = gadgets.io.encodeValues({
appParams:gadgets.json.stringify(params)
});
ap[opensocial.Activity.Field.URL] = "http://mixi.jp/run_appli.pl?id=(アプリID)&"+escaped;

サンプルではparamsオブジェクトにパラメータの名前と値の組を2つ指定して、run_appli.pl(アプリ実行画面)に渡すようにしています。渡し方には決まった作法があるようで、単純にクエリーに「key1l=value1&key2=value2」とつけるだけではいろいろと面倒なことになるようです。
まずparamsをgadgets.json.stringifyメソッドに渡してやります。これはオブジェクトをテキストデータにシリアライズする処理のようですね。この文字情報をaddParamsというキー名と対にしてgadgets.io.encodeValuesメソッドに渡してあげるとクエリーに渡せる形に整形された情報が返ってきます。
最後にap[opensocial.Activity.Field.URL]にrun_appli.plと自分のアプリのIDと先ほどの情報が加わったURLを持たせて、アクティビティを発行してあげるだけです。なお、URLは絶対パスで記載するようにしましょう。

上記の手順でkey1、key2情報を持ったアプリ実行画面のURLができました。例えば、key1にマイミクのIDを持たせておけば、実行画面でそのマイミクの情報を自動で表示するような仕組みも可能になります。key1とkey2のIDを元に相性占いの結果をいきなり表示させるなんてことも可能です。

var params = gadgets.views.getParams();

addParamsに設定したkey1、key2の情報はアプリ実行時に上記のようにgadgets.views.getParamsメソッドで再びオブジェクトデータ化されます。この例の場合、params["key1"]の中身は"value1"となります。

アクティビティの送信先を変更する

私はまだ使ったことがないのですが、アクティビティを特定の相手に送ることもできるようです。確かに自分とあまり関連のないアクティビティを無秩序に送られてきても、リアクションに困りますもんね。

ap[mixi.ActivityField.RECIPIENTS] = [(送信先ユーザのIDその1),(送信先ユーザのID その2)];

送信したいマイミクのIDの配列をap[mixi.ActivityField.RECIPIENTS]に指定するだけのようですね。指定できるのは2名までのようですので、自分を含めて3人以上に関連するアクティビティの場合は2回以上分けて送信するんでしょうかね。また、見も知らぬ人のIDを指定してアクティビティを送った場合は、どうなるんでしょう?アクティビティには公開範囲というものがあり、開発中のアプリのアクティビティは同じアプリをもっているマイミクにしかアクティビティは送信されないそうです。これが公開中のアプリになるとその制限も外れるとかなんとか。でも、ランダムに登録者を引き合わせるアプリもあるでしょうし、やっぱり誰にでもアクティビティを送れるのかな?

アクティビティは、活動の報告に過ぎないものではありませんが、ここまでいろいろできると、アクティビティを主体としたアプリなんかも考えられそうですね。マイミクの誰かに無作為に送ったアクティビティがないとクリアできないゲームとかどうでしょう。・・・休眠ユーザに送られたらアウトかな。

日記一覧

Last-Modified