mixiアプリをちょっとかじってみた - 全日本学生ゲーム開発者連合(全ゲ連

mixiアプリをちょっとかじってみた
黒河 優介
発表者について
全ゲ連第二回で、Wiiリモコン使ったゲーム
について発表した人
とある会社の社蓄
でも、ソーシャルアプリは業務とは全く関係な
い
mixiアプリとは?
mixi上で動かすことが出来るアプリです
全画面はもちろん、ガジェットのようにページ
の一部のみ表示のアプリも作れます。
mixi上の情報を使ったアプリも作れます。
なぜmixi?
ぶっちゃけ、GREEとかモバゲーの方が、今
元気じゃね?
法人じゃないとアプリ作らせてくれない。。。
mixiは個人でも作れる環境を提供してくれて
ます!!
といいつつ、個人で作成できるのはPCアプリの
みです。(携帯向けは法人じゃないと・・・・ry)
mixi アプリ制作に必要なもの
携帯電話+携帯のアドレス
mixiアカウント
mixi アプリ開発者登録
Webサーバー(HTTPサーバー)
mixi アプリに求められる知識
必須
XML
HTML
JavaScript
あるとベター
Flash(ActionScriptなど)
CGIなどの知識
その他Web系知識
mixi アプリの仕組み①
Iframeで区切られたCanvas上に、自由な
HTMLを書き込める。
htmlはもちろん、JavaScript、FlashなどWeb
ブラウザ上で表現可能なら何でもあり
mixi アプリの仕組み②
Gadget XMLという中に、表示したいHTML
やJavaScriptなどをCData(XML中の文字列
データ)として表記
JavaScriptで用意されたAPIを用いて、mixi
上のデータにアクセス
Opensocialという規格に準拠
OpenSocialについて
ソーシャル アプリケーションの共通 API です
JavaScriptとHTMLを使用して、SNS上のア
プリが作れます
1つのAPIで多様なサイトに対応
GREE,モバーゲー,mixi , goo Home , Yahoo ,
MySpace、OpenPNEなど
残念ながらFacebookは対応しておらず・・・
うだうだ言わず、作成してみる
まずは、開発者登録
mixiにログイン後、http://developer.mixi.co.
jp/appli/pc/pc_prepare/developer_account_regist_pc にアク
セスして、開発者登録
そして、アプリ登録
http://developer.mixi.co.jp/appli/com/lauch/register にアクセ
スして、アプリ登録。
登録内容は修正可能なので、適当でもOK
Hello World
hello.xml
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Hello, world!">
<Require feature="opensocial-0.8" />
</ModulePrefs>
<Content type="html"><![CDATA[
<div>Hello, World!</div>
]]></Content>
</Module>
1.hello.xmlを
Webサーバーに
アップ。
2.ガジェットURLの
項目にアップした
hello.xmlのURLを
登録
実行結果
Hello World解説
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Hello, world!">
<Require feature="opensocial-0.8" />
</ModulePrefs>
<Content type="html"><![CDATA[
<div>Hello, World!</div>
]]></Content>
</Module>
実際に、ユーザーに表示されるも
の
ヘッダー部分、このアプリのタイト
ルなどの情報の他に、このアプリ
がどの機能を利用するかなどを
書きます
コンテンツ部分。アプリが実際に
表示する表示設定が書いてあり
ます。Content領域は複数指定
が可能です。(詳細は後ほど)
mixiアプリ(PC)動作時の概要図
ユーザー
アプリに
アクセス
mixi
サーバー
アプリ
サーバー
HTTPで、
Gadget
XMLを
要求
キャッシュ上の
Gadget XMLから
表示物を埋め込む
Gadget XMLから
表示物を埋め込む
Gadget
XMLを
返します
次のアプリの前に・・・
キャッシュを消しましょう!!
mixiサーバー内にGadgetXMLのキャッシュが残
るので、アプリケーション変更時に必要!
キャッシュのクリアはアプリの設定変更から
出来ます。
キャッシュクリア
画面によって表示物をわける
<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Hello, world!">
<Require feature="opensocial-0.8" />
<Require feature="views" />
</ModulePrefs>
<!-- Canvasに表示する内容 -->
<Content type="html" view="canvas"><!
[CDATA[
<div>Hello, Canvas!</div>
]]></Content>
</Module>
<!-- HOMEに表示する内容 -->
<Content type="html" view="home"><!
[CDATA[
<div>Hello, html!</div>
]]></Content>
<!-- プロフィールに表示する内容 -->
<Content type="html" view="profile"><!
[CDATA[
<div>Hello, Profile!</div>
]]></Content>
画面によって表示内容を分ける
ことを明示します
どの画面で表示するかを
指定します
アプリ画面実行結果
ホーム画面実行結果
プロフィール画面実行結果
プロフィールデータを利用してみる
<Content type="html"><![CDATA[
<div>Hello, <span id="target"></span>!</div>
<!-- 以下JavaScriptコード -->
<script type="text/javascript">
/** @brief EntryPointとなる関数
*データリクエスト用のオブジェクトの作成⇒
* 取得したい情報・コールバック関数を指定してデータのリクエストを行います
*/
function init() {
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER), "viewer");
req.send(OnRequestComplete);
}
/** @brief opensocialのデータリクエスト完了後に呼び出されます
* @param [in] data mixiからとってきたデータが引数として渡されます
*/
function OnRequestComplete(data) {
var viewer = data.get("viewer").getData();
var name = viewer.getDisplayName(); /*< 閲覧者の名前をname変数に代入 */
document.getElementById(“target”).innerHTML = name; /*< 実際に名前をHTMLに挿入*/
}
/* JavaScriptのEntryPointの登録を行います */
gadgets.util.registerOnLoadHandler(init);
</script>
]]></Content>
実行結果
mixi のデータ利用のイメージ図
opensocial
ライブラリ
Userコード
DataReque
st
オブジェクト
サーバー
サーバーに
データ要求
Data Requestオブ
ジェクトを渡します
DataRequest
オブジェクトに
指定されている
コールバック関
数を呼び出す
サーバーから
データ応答
ViewerとOwner
Mixiアプリでは他人のアプリを見ることが出
来る
他人のアプリを見たとき、見た人の情報は
Viewerとして取得可能
そのアプリを持っている人をOwnerとして、その
人のプロフィールをOwnerとして取得可能
友達のプロフィールを使う
/** @brief マイミクリストをゲット
*/
function GetMyMiku(){
var ip = {};
ip[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
ip[opensocial.IdSpec.Field.GROUP_ID] = "FRIENDS";
var idSpec = opensocial.newIdSpec(ip);
var req = opensocial.newDataRequest();
req.add(req.newFetchPeopleRequest(idSpec), "friends");
req.send(CallBackMyMiku);
}
/** @brief Myミクリストの取得が終わったときに呼び出されます
*/
function CallBackMyMiku(data){
var friends = data.get("friends").getData();
friends.each(EachFriend);
}
/** @brief マイミク一人一人処理するための関数
*/
function EachFriend(friend){
var id = friend.getId();
var nickname = friend.getDisplayName();
var thumbnailUrl = friend.getField(opensocial.Person.Field.THUMBNAIL_URL);
document.getElementById("friends").innerHTML +=
"ID : " + id + "<br/>" +
"表示名 : " + nickname + "<br />" +
"アイコン: " + thumbnailUrl + "<br />";
}
/* 初期化 */
gadgets.util.registerOnLoadHandler(GetMyMiku);
実行結果
アクティビティとは?
マイミク(友達)にmixiアプリをどのように楽し
んでいるか 送りつける
単に文字列だけでなく、画像付でアプリの状
況を送りつけることも可能
あて先を指定して特定のユーザーにのみ、
送ることも可能
具体的には
コード
<![CDATA[
<script type="text/javascript">
function postActivity(activity_msg) {
var parms = {};
parms[opensocial.Activity.Field.TITLE] = activity_msg;
var activity = opensocial.newActivity(parms);
opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH,
activityResultCallback);
var panel = document.getElementById("activity_panel");
}
function activityResultCallback(status) {
if (status.hadError()) {
alert("Error Creating activity.");
}
}
function startActivity() {
postActivity("アクティビティのテストです!クリックして!");
}
gadgets.util.registerOnLoadHandler(startActivity);
</script>
<div id="activity_panel"></div>
]]>
他に出来ること一覧
mixiサーバーにデータを保存
PCアプリで言う HDDに保存みたいなもの
持ち主のID、アクセス用のキー、保存する文字
列でセット
ユーザーにメッセージを送信する
外部サーバーからデータを取得する
HTTPでアクセス(GET、POSTなど大体サポート)
マイミクを招待
同級生・コミュニティの情報を利用