MBaaS徹底入門――Kii Cloudでスマホアプリ開発

第3回 Kii Cloudの基本

この記事を読むのに必要な時間:およそ 4 分

第3回となる今回は,Kii株式会社が提供する「Kii Cloud」について説明します。

Kii Cloudは第2回で解説したMBaaSの一例となるものであり,MBaaSで提供されうる機能のほぼ全てを網羅しています。サンプルコードを交えつつ,それらの機能について解説していきます。

以降で,Kii Cloudの各機能について簡単に解説していきます。なお,より詳細な機能が知りたい場合は,ドキュメントを参照してください。

Kii Cloudのドキュメントは以下になります。

各プラットフォームごとのSDKの提供

Kii Cloudは,REST APIと各プラットフォームをサポートするSDKを提供しています。

執筆時点では,Android,iOS,JavaScript(Web)のSDKを提供しています。今後,Unityなど他のプラットフォームもサポートする予定です。

ユーザ管理

Kii Cloudは,アプリケーション内のユーザ管理機能として,主に以下の機能を提供しています。これらの機能は,ユーザ名,Emailアドレス,携帯電話番号,Facebookアカウントなどをユーザ識別用の情報として使用できます。

  • サインアップ(ユーザ作成)
  • サインイン(ログイン)
  • ユーザ情報の取得
  • グループの管理

以下は,KiiのAndroid SDK(以下,Android Cloud SDK)上で,ユーザ名を識別用の情報として,ユーザのサインアップ処理を行う例です。

// SDKの初期化処理(詳細は次回に説明)
Kii.initialize(<AppID>, <AppKey>, Kii.Site.JP);

// ユーザ名をユーザ識別用の情報として用いる
KiiUser.Builder builder = KiiUser.builderWithName("gihyo_kiicloud");
KiiUser user = builder.build();

try {
    user.register("gihyo_password");
} catch (AppException e) {
    // ネットワークエラー以外
    Log.d("ERROR", String.format("ユーザの作成に失敗しました:%s", e.toString()));
    throw e;
} catch (IOException e) {
    // ネットワークエラー
    Log.d("ERROR", String.format("ネットワークエラーが発生しました:%s", e.toString()));
    throw e;
}

同様の処理をiOS SDK上で行う場合は,以下のようになります。

// SDKの初期化処理
[Kii beginWithID:<AppID> andKey:<AppKey> andSite:kiiSiteJP];
    
// ユーザ名をユーザ識別用の情報として用いる
KiiUser *user = [KiiUser userWithUsername:@"gihyo_kiicloud_ios" andPassword:@"gihyo_password"];

NSError *error = nil;
[user performRegistrationSynchronous:&error];
if (error != nil) {
    // エラー処理
    NSLog(@"ユーザの作成に失敗しました:%@", error);
    return;
}

データ管理

Kii Cloudは,key-valueにより構成されるJSONデータ(Kii Cloudでは「オブジェクト」と呼びます)を管理する仕組みを提供します。⁠バケット」と呼ばれるデータの入れ物に保存されたオブジェクトは,条件を指定したクエリを送信して検索できます。

以下は,Android Cloud SDK上で,オブジェクトを作成した後に,クエリに該当するオブジェクトを取得する例です。

// SDKの初期化処理(詳細は次回に説明)
Kii.initialize(<AppID>, <AppKey>, Kii.Site.JP);

// ユーザの作成
KiiUser.Builder builder = KiiUser.builderWithName("gihyo_kiicloud_data");
KiiUser user = builder.build();
try {
    user.register("gihyo_password");
} catch (AppException e) {
    Log.d("ERROR", String.format("ユーザの作成に失敗しました:%s", e.toString()));
    throw e;
} catch (IOException e) {
    Log.d("ERROR", String.format("ネットワークエラーが発生しました:%s", e.toString()));
    throw e;
}

// ユーザスコープのバケットを作成する(スコープの詳細は後述)
KiiBucket bucket = user.bucket("gihyo_bucket");

// オブジェクトをサーバに作成する
KiiObject data1 = bucket.object();
KiiObject data2 = bucket.object();
data1.set("data_key", "match_query");
data2.set("data_key", "not_match_query");
try {
    data1.save();
    data2.save();
} catch (AppException e) {
    Log.d("ERROR", String.format("オブジェクトの作成に失敗しました:%s", e.toString()));
    throw e;
} catch (IOException e) {
    Log.d("ERROR", String.format("ネットワークエラーが発生しました:%s", e.toString()));
    throw e;
}

// "data_key":"match_query"を含むオブジェクトを取得するクエリを作成する
KiiQuery query = new KiiQuery(KiiClause.equals("data_key", "match_query"));
   	 
// クエリを実行して結果を受け取る
KiiQueryResult<KiiObject> queryResult = null;
try {
    queryResult = bucket.query(query);
} catch (AppException e) {
    Log.d("ERROR", String.format("クエリの実行に失敗しました:%s", e.toString()));
    throw e;
} catch (IOException e) {
    Log.d("ERROR", String.format("ネットワークエラーが発生しました:%s", e.toString()));
    throw e;
}
List<KiiObject> result = queryResult.getResult();

// 結果は1件で"data_key":"match_query"を含んでいる
Log.d("DEBUG", String.format("クエリの結果は%d件です", result.size()));
Log.d("DEBUG", String.format("data_keyの値は%sです", result.get(0).getString("data_key")));

同様の処理をiOS SDK上で行う場合は,以下のようになります。

// SDKの初期化処理
[Kii beginWithID:<AppID> andKey:<AppKey> andSite:kiiSiteJP];
    
// ユーザ名の作成
KiiUser *user = [KiiUser userWithUsername:@"gihyo_kiicloud_ios_data" andPassword:@"gihyo_password"];
NSError *userError = nil;
[user performRegistrationSynchronous:&userError];
if (userError != nil) {
    NSLog(@"ユーザの作成に失敗しました:%@", userError);
    return;
}
    
// ユーザスコープのバケットを作成する
KiiBucket *bucket = [user bucketWithName:@"gihyo_ios_bucket"];
    
// オブジェクトをサーバに作成する
KiiObject *data1 = [bucket createObject];
KiiObject *data2 = [bucket createObject];
[data1 setObject:@"match_query" forKey:@"data_key"];
[data2 setObject:@"not_match_query" forKey:@"data_key"];
NSError *objError = nil;
[data1 saveSynchronous:&objError];
[data2 saveSynchronous:&objError];
if (objError != nil) {
    NSLog(@"オブジェクトの作成に失敗しました:%@", objError);
    return;
}
    
// "data_key":"match_query"を含むオブジェクトを取得するクエリを作成する
KiiQuery *query = [KiiQuery queryWithClause:[KiiClause equals:@"data_key" value:@"match_query"]];
NSError *queryError = nil;
KiiQuery *nextQuery = nil;
NSArray *queryResult = [bucket executeQuerySynchronous:query withError:&queryError andNext:&nextQuery];
if (queryError != nil) {
    NSLog(@"クエリの実行に失敗しました:%@", queryError);
    return;
}
    
// 結果は1件で"data_key":"match_query"を含んでいる
NSLog(@"クエリの結果は%d件です", [queryResult count]);
NSLog(@"data_keyの値は%@です", [[queryResult objectAtIndex:0] getObjectForKey:@"data_key"]);

アクセス制御

Kii Cloudのアクセス制御は,デフォルトではバケットの「スコープ」を元に定義されます。 スコープとは,⁠このバケットを所有しているのが誰か」という概念であり,バケットの所有者がバケット内のデータにアクセスできます。Kii Cloudでサポートするスコープは次の3つです。

アプリケーションスコープ

「あるアプリケーションがバケットを所有している」状態です。そのアプリケーション内でログインユーザ全てが,バケット内のデータにアクセスできます。Twitterのパブリックなタイムラインを想像すると分かりやすいと思います。

グループスコープ

「あるグループがバケットを所有している」状態です。そのグループ内のメンバーのみが,バケット内のデータにアクセスできます。各種SNSが持つグルーピング機能は,このスコープにより実装できます。

ユーザスコープ

「あるユーザがバケットを所有している」状態です。そのユーザのみが,バケット内のデータにアクセスできます。プライベートなデータを扱いたい時に役立ちます。

上記に示したデフォルトのアクセス制御は,⁠Access Control List(以下ACL)⁠を用いて柔軟にカスタマイズすることができます。ACLにより,あるデータに対してアクセス可能なユーザを追加できます。

プッシュ通知

モバイルアプリケーションでは,ユーザに情報を伝える手段としてプッシュ通知が広く用いられています。Androidアプリケーションの場合はGoogle Cloud Messaging(以下GCM)⁠iOSアプリケーションの場合はApple Push Notification Service(以下APNs)を利用してプッシュ通知を実現できます。しかし,これらのサービスを利用するためには,GCM/APNsサーバとやり取りするサーバを別途構築する必要があります。

Kii Cloudでは上記のサーバを既に構築しているため,ユーザはKii CloudにGCM/APNsサーバとのやり取りを委譲するだけでプッシュ通知を実現できます。

また,サーバに保存したデータの作成,更新などをトリガとして,プッシュメッセージを送信することもできます。新着通知などを実装する際に便利です。

データの分析

第1回で触れたように,実装→分析→改善のサイクルを素早く回すことが,アプリケーション開発の成功の鍵です。

Kii Cloudでは上記の分析を支援する強力な解析機能を持っています。ユーザ数やオブジェクト数などの基本的な評価尺度に加え,評価尺度(メトリクス)と解析手法(ルール)を開発者自身が定義できます。これにより開発者は,アプリケーションの持つデータを様々な観点から柔軟に分析できます。

最適なサーバロケーションの選択

Kii Cloudではアプリケーションサーバを配置するリージョンを,日本,アメリカ,中国の3つから選択できます。日本,中国をサポートしているという点は他のMBaaSにはない強みです。

解説した機能以外では,以下を鋭意開発中です。

  • 複数のアドネットワークをサポートするAds SDK
  • 事前に登録したJavaScriptをサーバサイドで実行するServer Extension
  • A/Bテスト
  • アプリケーション課金の決済機能
  • 各種管理機能を提供するWebインターフェースの拡充

以上で,Kii Cloudの簡単な機能説明を終えます。次回からは,Kii Cloudを用いて実際にモバイルアプリケーションを開発していきます。

著者プロフィール

藤井達朗(ふじいたつろう)

Kii株式会社

http://www.kii.com/

コメント

コメントの記入