アプリ開発日記

Lobiのランキング機能を導入してみた

またまた長らく放置してしまった...
これからはしっかり更新しよう。

今回はLobiさんのSDKをUnityで導入してみた話。
ランキング機能というものを実装しようと思ったのがきっかけです。
今回開発しているアプリではAndroidでもiPhoneでも同じランキングを使いたくて調べた結果、
一番最初に目に留まったものがLobiだったので、使ってみました。
まだ開発中ですが、なんとか導入はできそう!!
以下、素人の私が詰まって悩んだ点をちらほら紹介します。
(素人の詰まった点なのでたいしたことないかもです。)

まずは、Lobiさんのドキュメントに従い、SDKのパッケージをUnityにインポートし、
Lobiのアプリ管理画面にて、アプリの登録(名前とかアイコンとかだけ)とランキングの設定を行いました。

次にiOSアプリに実際のコードを書いたのですが......

どこから手をつければよいのか......

という状態でした。
とりあえず、Unityでボタンを作成し、押されたときに動くメソッドの中に、

//ランキング画面の表示
LobiRankingBridge.PresentRanking();

を挿入し、確認。
うまくいきました。
しかし、自分がやりたかったのは、バックグラウンドでのデータのやり取りで、Lobiへの画面遷移ではなかったので、
とりあえずデータをやり取りするメソッドを入れました。
メソッドは下記の3つ。

①LobiCoreAPIBridge.SignupWithBaseName (name, "SignupWithBaseNameCallback", "user"); 
//ランキング登録するユーザーアカウントの作成(アカウントの識別を必要としなくても必須?)
②LobiRankingAPIBridge.SendRanking(name, "SendRankingCallback", "POINT", highscore);
//得点の送信(引数は自分の設定による)
③LobiRankingAPIBridge.GetRanking(....);
//ランキング一覧取得(引数は7こぐらいあるけど、それはドキュメントを見てください)

これらをボタンが押されたら実行するようにし、データのやり取りを行いました。
ここで詰まった点がいくつか。

①エラーがでてビルドできない
原因はそれぞれのメソッドの引数でした。ドキュメントでは各メソッドに"id"というものが書いてあったのですが、
それがあるとうまく行かず、結局削除しました。

②ランキングが更新されない。
これは単純な話で、Lobiでのランキングの更新設定で、「降順」「昇順」みたいのが逆になってただけでした。

③ランキング一覧取得後のデータを取り出せない。
一覧取得後のデータはJson形式で返ってくるのですが、ネストが深いものをどのように展開し、値を取得すればよいのかわかりませんでした。
結果敵には下記の方法でできました。(iOSでできたものがAndroidでできなかったので方法は2種類書きます。)

(1)iOS
var jsonData = MiniJSON.Json.Deserialize(message) as Dictionary<string,object>;
var jsonData2 = jsonData["result"] as Dictionary<string,object>;
var jsonData3 = jsonData2["self_order"] as Dictionary<string,object>;
var jsonData4 = jsonData2["orders"] as List<object>;
for (int i = 0; i < 30; i++) {
if (jsonData4 [i] != null) {
label [i] = target_top_ranking [i].GetComponent<UILabel> ();
var jsonData5 = jsonData4 [i] as Dictionary<string,object>;
label [i].text = jsonData5 ["rank"].ToString () + ". " + jsonData5 ["display_score"].ToString ();
}
}

②Android
var jsonData = MiniJSON.Json.Deserialize(message) as Dictionary<string,object>;
Dictionary<string,object> jsonData2 = (Dictionary<string,object>)jsonData["result"];
Dictionary<string,object> jsonData3 = (Dictionary<string,object>)jsonData2["self_order"];
List<object> jsonData4 = (List<object>)jsonData2["orders"];
for以下はiOSと一緒

MiniJSON.Json.Deserialize(message)
この部分のMiniJsonは調べてみてください。messageはランキング一覧取得のメソッドのコールバック関数に渡される引数です。
Dictionary型にキャストしては参照し、って言うのを繰り返し使いました。

本日は長くなってしまったのでここまでで終わろうと思います。
そのうちご意見をいただけるようにフォームを作ろうと思いますので、そのときにご意見をください!!
そのうちとかいうとまた遅くなりそうなので、2014/8/17に作成します!!
素人の為にいろいろ教えていただけるとありがたいです!!
ではまた!!