Swarmを使ったワールドランキングの実装②です。


本記事ではアプリへSwarmを実装させていきます。


Swarmへのユーザー登録~アプリの登録、SDKのダウンロードまでは
Swarmを使ったワールドランキングの実装①を参照してください。


では始めましょう。
※基本的にはSwarmのDocumentation内にある情報を元に進めています。


①Swarmに登録したアプリのApp ID,App Keyを取得しましょう。
App ID,App Keyをアプリ内に入れることでSwarmと連携します。
まずSwarmへログインしてください。


#Swarm
http://swarmconnect.com/


ログインが完了したらApp Detailsへ進み
App ID,App Keyを取得します。


うつ病miwawaの日記帳

②リーダーボードへ登録するためLeaderboard IDを取得します。

App Keyを取得したら、今度はLeaderboards画面へ行きLeaderboard IDを取得します。
任意のリーダーボードへ登録するためにLeaderboard IDが必要になります。


うつ病miwawaの日記帳

③プロジェクトを作成しましょう。

1.Eclipseでプロジェクトを作成しましょう。


今回は下記の形でサンプルを作ってます。
※apiレベル8(Android2.2)で作ってます。
-----------------------------------------------
プロジェクト名 SampleSwarm    *適当でいいっす
Javaファイル  MainActivity.java *アクティビティです
レイアウト   main.xml      *初期名称的な感じで
-----------------------------------------------



2.SDKを解凍しプロジェクトへ実装します。
※SDKをDLしていない場合はSwarmを使ったワールドランキングの実装①を参照してください。


SDKを解凍すると、
docs/extras/res/Swarm.jar
の3つのフォルダとjarがあると思いますが使うのはresフォルダとSwarm.jarだけです。


まず、Swarm.jarをプロジェクトのlibsへ配置しビルドパスを通してください。
ビルドパスって?な方は下記サイト様の「JARファイルを読み込んで利用する」部分が参考になります。
http://techbooster.jpn.org/andriod/environment/2768/


ビルドパスを通したらresフォルダをプロジェクトのresフォルダに上書きします。



3.次にAndroidManifestです。
<application></application>の間に下記のactivityとserviceを追記します。
Swarmを使うためのお約束です。


<activity android:name="com.swarmconnect.SwarmMainActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateHidden" />
<service android:name="com.swarmconnect.NotificationService" android:process=":swarm"/>


Swarmに登録したり参照したりするために下記のパーミッションを追加します。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


4.次はmain.xmlです。

今回はサンプルとしてボタンを5つ配置して
Swarmに登録したリーダーボードのRankin1,Ranking2へスコア登録するボタンと
各リーダーボードを参照するボタン、すべてのリーダーボードを表示するボタンを実装します。



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android "
android:id="@+id/view1"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/send_ranking1"
android:text="ranking1へ100スコア登録"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/send_ranking2"
android:text="ranking2へ1.1スコア登録"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/show_ranking1"
android:text="ranking1を参照"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/show_ranking2"
android:text="ranking2を参照"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/show_Leaderboards"
android:text="Leaderboardsを表示"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>



5.最後にjavaです。
説明はコメントを見てください。
赤字部分は各AppID、AppKey、Leaderboard IDに直してください。


import com.swarmconnect.Swarm;
import com.swarmconnect.SwarmActiveUser;
import com.swarmconnect.SwarmActivity;
import com.swarmconnect.SwarmLeaderboard;
import com.swarmconnect.SwarmLeaderboard.GotLeaderboardCB;
import com.swarmconnect.delegates.SwarmLoginListener;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


//extends AvtivityをSwarmActivityに変えます。
//public class MainActivity extends Activity {
public class MainActivity extends SwarmActivity {


//リーダーボードに登録したり参照するためにSwarmLeaderboardを用意します。
public static SwarmLeaderboard swarm_leaderboard;

Button btn;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


//initの第2引数にAppIDを第3引数を登録したAppKeyを
Swarm.init(this, 2689, "ced642681bd5690e933c5d137ebc16a4", mySwarmLoginListener);


btn = (Button)findViewById(R.id.send_ranking1);
btn.setOnClickListener(btnListener);
btn = (Button)findViewById(R.id.send_ranking2);
btn.setOnClickListener(btnListener);
btn = (Button)findViewById(R.id.show_ranking1);
btn.setOnClickListener(btnListener);
btn = (Button)findViewById(R.id.show_ranking2);
btn.setOnClickListener(btnListener);
btn = (Button)findViewById(R.id.show_Leaderboards);
btn.setOnClickListener(btnListener);

}


//Swarmへのログイン処理********************************************************************
private SwarmLoginListener mySwarmLoginListener = new SwarmLoginListener() {

// This method is called when the login process has started
// (when a login dialog is displayed to the user).
public void loginStarted() {
Log.w("Exception","Exception");
}

// This method is called if the user cancels the login process.
public void loginCanceled() {
}

// This method is called when the user has successfully logged in.
public void userLoggedIn(SwarmActiveUser user) {
// Load our Leaderboard
}

// This method is called when the user logs out.
public void userLoggedOut() {
}

};

//********************************************************************


//ボタン処理********************************************************************
//SwarmLeaderboard

private OnClickListener btnListener = new OnClickListener() {
public void onClick(View v) {

switch(v.getId()){

//Ranking1にスコア100を登録
case R.id.send_ranking1:
//Ranking1のリーダーボードに登録する
//Ranking1のLeaderboard IDをコールバックで取得する
SwarmLeaderboard.getLeaderboardById(4623, new GotLeaderboardCB() {
public void gotLeaderboard(SwarmLeaderboard lb) {
//返ってきたLeaderboard IDをセットしたらsubmitScore()で登録
swarm_leaderboard = lb;
swarm_leaderboard.submitScore(100, null, null);
}
});
break;

//Ranking2にスコア1.1を登録
case R.id.send_ranking2:
//Ranking2のリーダーボードに登録する
//Ranking2のLeaderboard IDをコールバックで取得する
SwarmLeaderboard.getLeaderboardById(4625, new GotLeaderboardCB() {
public void gotLeaderboard(SwarmLeaderboard lb) {
//返ってきたLeaderboard IDをセットしたらsubmitScore()で登録
swarm_leaderboard = lb;
swarm_leaderboard.submitScore((float) 1.1, null, null);
}
});
break;

//Ranking1のスコアを参照
case R.id.show_ranking1:
//Ranking1のリーダーボードを参照する
//Ranking1のLeaderboard IDをコールバックで取得する
SwarmLeaderboard.getLeaderboardById(4623, new GotLeaderboardCB() {
public void gotLeaderboard(SwarmLeaderboard lb) {
//返ってきたLeaderboard IDをセットしたらshowLeaderboard()で参照
swarm_leaderboard = lb;
swarm_leaderboard.showLeaderboard();
}
});
break;

//Ranking2のスコアを参照
case R.id.show_ranking2:
//Ranking2のリーダーボードを参照する
//Ranking2のLeaderboard IDをコールバックで取得する
SwarmLeaderboard.getLeaderboardById(4625, new GotLeaderboardCB() {
public void gotLeaderboard(SwarmLeaderboard lb) {
//返ってきたLeaderboard IDをセットしたらshowLeaderboard()で参照
swarm_leaderboard = lb;
swarm_leaderboard.showLeaderboard();
}
});
break;

//全リーダーボードを参照
case R.id.show_Leaderboards:
//全リーダーボードを参照する場合はshowLeaderboards()でOK
//ダッシュボードならshowDashboard()
Swarm.showLeaderboards();
break;

default:
break;
}

}
};

//swarm_leaderboardに送られてきたLeaderboard IDをセットするコールバック****************************
GotLeaderboardCB callback = new GotLeaderboardCB() {
public void gotLeaderboard(SwarmLeaderboard leaderboard) {

if (leaderboard != null) {

// Save the leaderboard for later use
swarm_leaderboard = leaderboard;
}
}
};
//************************************************************************************
}



以上です。


ではアプリからSwarmへ登録してみましょう。
最初にログイン画面がでます。


うつ病miwawaの日記帳

特にID登録をしなければPlay as Guestでいいです。
ゲスト用IDが割り振られます。
※一度ログインしてしまえばログイン画面は次からでません。
ゲスト用だと一定の日が過ぎるとログイン解除されます。


次にスコアを送信してみましょう。
問題なければ下記の画像のようにSubmitの表示がでます。


うつ病miwawaの日記帳

登録したリーダーボードも表示してみましょう。

Ranking1 ちゃんと100が入っています。1ユーザーで5つ以上は表示されてませんね


うつ病miwawaの日記帳

Ranking2 ちゃんと1.1が入っています。1ユーザーで5つ以上は表示されてませんね


うつ病miwawaの日記帳

両方のリーダーボードも表示させてみます。


うつ病miwawaの日記帳


Swarm側はどうでしょうか?Total Entriesも増えています。
ユーザーの詳細がみたければLeaderboard Nameをクリックしてください。


うつ病miwawaの日記帳


Swarmはこんな感じです。
個人的には意外ととっつきやすい感じでいけたかと思います。
ネットランキング以外にも使い道はあるようですので
興味があるかたは試してはいかがでしょうか。

ではではお疲れ様でした。


プロジェクトもおいときます

>ここ