Kotlin
Database
NCMB
mBass
NIFCLOUD

Kotlinでデータベースを使おう!③(ランキングを作る・アクセス権限)

【Kotlin×mBaaS】シリーズ概要

  • Kotlinで ニフクラ mobile backend (通称:mBaaS)を使ってSwiftで開発を始めたい人向けのドキュメントです。
  • ニフクラ mobile backend のAndroid(Java SDK)用ドキュメントKotlin用に書き換えて動かしてみたものをまとめました。
  • 初心者でもわかりやすいよう心掛けて作っていますが、わかりにくい部分がありましたらコメントをいただければ訂正しますのでお気軽にご意見をお願いします^^*
  • 今回は<データストア編③>としてランキングを作る・アクセス権限設定です!

事前準備のお願い

  • 事前に ニフクラ mobile backend の登録とアプリの新規作成をし、KotlinでmBaaSを始めよう!をご覧いただき、必要な初期設定(SDKのインストールなど)をAndroid Studio上で行った上でご利用ください。

Kotlinでデータベースを使おう!

ランキングを作る

Androidアプリでランキングを実装する場合の使い方について解説します。

スコアの保存

  • 通常のオブジェクトの保存方法と同じようにプレイヤー名とスコアを設定してデータストアのHighScoreクラスに保存します。
Kotlin
// HighScoreクラスのインスタンスを作成
val score = NCMBObject("HighScore")
// 名前とスコアをセット
score.put("Name", "name")
score.put("Score", 0)
// データストアに保存
score.saveInBackground { e ->
    if (e != null) {
        // 保存に失敗した場合の処理
    } else {
        // 保存に成功した場合の処理
    }
}

ランキングの取得

  • 各プレイヤーのスコアが保存されるHighScoreクラスから、スコアの降順データを検索することで、簡単にランキングを取得できます。
Kotlin
// HighScoreクラスを検索するNCMBQueryを作成
val query = NCMBQuery<NCMBObject>("HighScore")
// Scoreの降順でデータを取得するように設定
query.addOrderByDescending("Score")
query.setLimit(5)
query.findInBackground { objects, e ->
    if (e != null){
        // 検索失敗時の処理
    } else{
        // 検索成功時の処理
    }
}
  • ゲームのにオンラインランキングはこんなに簡単に実装できてしまうんですね!!

アクセス権限設定

データストアのACL機能を利用して各データのアクセス権限を会員、ロールごとに設定する方法を説明します。

  • ACLを設定する場合は、NCMBAclクラスを利用します。
Kotlin
//ACLオブジェクトを作成
val acl = NCMBAcl()
//読み込み(検索)・書き込みを全開放を設定
acl.publicReadAccess = true
acl.publicWriteAccess = true

val obj = NCMBObject("test")
//オブジェクトにACLを設定
obj.acl = acl
obj.save()
  • 会員やロールを対象にACLを設定することも可能です。このとき、会員やロールは登録が済んでおりobjectIdを持っている必要があります。
  • 一部会員管理クラス(userクラス)の知識が必要です。
Kotlin
val sharedNote = NCMBObject("Note")
sharedNote.put("content","This note is shared!")
// NCMBACLのインスタンスを作成
val groupACL = NCMBAcl()
val user = NCMBUser()
user.userName = "user"
user.setPassword("password")
//上記ユーザー名とパスワードで新規登録ログインを実施
user.signUp()
// 引数で渡された会員userへの読み込み権限を設定する
groupACL.setReadAccess(user.objectId, true)
// 引数で渡された会員userへの書き込み権限を設定する
groupACL.setWriteAccess(user.objectId, true)
//ACLをオブジェクトに設定する
sharedNote.acl = groupACL
sharedNote.save()

参考