Tech Sketch Bucket of Technical Chips by TIS Inc.

【前編】BaaS、Kinveyを使用したAndroidアプリ作成方法

Pocket

スマートフォンやタブレットなどのスマートデバイスが普及するにつれ、世界中で注目され始めたBaaSをご存知でしょうか?
BaaSとは簡単に言ってしまうとサーバサイドの機能を提供するサービスの事を指します。
そのBaaSの一つであるKinveyを使用したAndroidアプリの作成方法を前編後編に分けて説明したいと思います。
この記事ではKinveyを使用する設定と、データストアの使い方を説明します。


はじめに

Kinveyを使用したAndroidアプリ作成方法という事で、サンプルとしてスケジュール管理アプリを作成します。
アプリの機能はユーザー管理、データ(スケジュール)登録、Push通知(スケジュール通知)になります。
以下は実際の画面になります。

login_ input_

作成方法を説明する前に、まずはBaaS及びKinveyについて説明したいと思います。

BaaSとは

ここ数年で爆発的にシェアを広げてきたスマートデバイス、それに伴いモバイルアプリも増えてきました。
そんなモバイルアプリを構築する上でネックになっていた事があります。
それはサーバの構築です。
なぜかと言いますと、モバイルアプリを作る際にはサーバ側にデータを保存したり、ユーザ認証が必要になる事が良くあります。
そういった機能を利用するには当然サーバが必要になります。
しかし、社内にサーバサイドのエンジニアがいない場合外部の企業にサーバ構築の依頼を出さなくてはならず、費用が多く掛かってしまいます。
だからといって新しくサーバ構築の勉強をして自分達で作成しようとなると、莫大な時間が掛かってしまいます。
また、サーバは構築しただけで終わりではなくメンテナンスや障害時の対応などの管理を行う必要があり、こちらも費用が掛かります。
これが個人開発の場合となると、使える時間も限られているためアプリケーション開発に集中し辛くなってしまいます。
この様な理由からサーバの構築はネックになっていました。

それを解消するために出現したのが Backend as a Service 、BaaSになります。
BaaSとはユーザー管理やデータストアなどの モバイルアプリケーションに特化したサーバサイドの機能を提供するクラウドサービス の事を指します。
現在BaaSを提供している企業は、海外ではParseやKinvey、国産ではappiaries、Kii、SPIRALなどがあります。
今回はこの中から Kinvey を取り上げたいと思います。

Kinveyとは

Kinveyとはアメリカの企業であるKinvey社が提供しているBaaSです。
主な特徴は以下のようになっています

  • Googleと提携を結んでいる
  • 提供しているAPIの対象はAndroid、iOS、REST
  • サーバ側にJavaScriptで機能を追加出来る
    • 追加した機能はiOSやNode.jsなどから実行できる
  • 個人利用から企業利用まで対応
  • 料金体系が柔軟
    • 個人 - 月間アクティブユーザー数のみによって料金が発生
      • 0~99人 - 無料
      • 100~1000人 - 月額20$
      • 1000人以上 - 1000人追加毎に月額7$追加、最大5万人まで、超える場合は応相談
    • 企業 - 月間アクティブユーザー数、外部のデータストアや認証システムとの連携によって料金が発生
      • SLA(Service Level Agreement:サービス品質保証契約)が規定されている

以上が特徴となります。

環境

  • Eclipse 4.3.0.v20130605-2000
  • Nexus S Android4.1.1
  • Kinvey2.5.1

Kinvey側の準備

それでは実際にスケジュール管理アプリを作成していきます。
まずはスケジュールの登録機能から作成していきます。
そのために必要なKinvey側の準備を行います。

Kinveyに登録

Kinveyを使用するためにまずは公式ページから開発者登録をします。
登録に成功すると、新規プロジェクト作成画面(下図)に遷移するので、プロジェクト名の入力、ターゲットの選択、開発規模の選択を行い、スケジュール管理アプリ用のKinveyプロジェクトを作成します。

作成に成功すると Kinvey Console画面 に遷移し、アプリの利用ユーザーを作成するか聞かれますが、今回はアプリ側にユーザー登録処理を作成するので画面下部のスキップを選択します。

スキップを選択すると作成したKinveyプロジェクトのダッシュボード画面に遷移するので、画面右下に表示されている API Keys 内の App Key 及び App Secret をメモします。
この二つを使用してAndroidアプリとKinveyプロジェクトを接続します。

kinvey_new_project

データストア作成

データストアとはKinveyが提供している機能の一つで、データの管理を行っています。
このデータストアは mongoDB を使用しており、スキーマレスにデータを扱えます。
ではデータストアを作成してみましょう。
Kinveyダッシュボードの画面左上にある Addons をクリックします。
リストが開かれるので Data & Storage の中の Data Store をクリックします。
新規データストア作成画面が開かれるので、データストア名に「ScheduleManager」と入力し作成ボタンをクリックします。
画面上部に Success Your new collection has been created とメッセージが出たら作成成功です。

これでKinvey側の準備は終わりです。
次はアプリ側の準備になります。

アプリ側の準備

次にAndroidアプリ側の準備です。
前提としてAndroidアプリケーションプロジェクトは既に作成しているものとします。

Kinvey SDKの追加

まずはSDKを取得しましょう。
公式プラットフォームの ダウンロード からSDKをダウンロードします。
ダウンロード後解凍し、フォルダ内の libs フォルダを開き全てのjarファイルをAndroidアプリケーションプロジェクト内の libs フォルダに追加します。
これでKinvey APIを使用する事ができます。

AppKey・AppSecret設定

次にアプリがKinveyプロジェクトと接続する準備として、AppKeyとAppSecretを設定します。
Androidアプリケーションプロジェクト内の assets フォルダに kinvey.properties ファイルを作成します。
作成したファイルを開き下記の内容を書きます。

以上が設定になります。

Entityクラスの作成

次にアプリとデータストア間のデータやり取りを行う際に使用するEntityクラスを作成します。
このEntityクラスがデータ1件を表すクラスで、データの保存やデータの読み込み時に使用します。
アノテーションを使用し、@KeyでデータストアのカラムとJavaのインスタンス変数を紐付ける事が出来ます。
以下がコードになります。

Entityを詳しく知りたい方は 公式ガイド に詳細な説明が書いてありますのでそちらをご覧下さい。

kinveyClient変数の作成

最後にkinveyClient変数を作成します。

kinveyClient変数はcom.kinvey.android.Client型で定義し、Kinvey APIを呼び出すために使用します。
変数を使用するための準備としてKinvey APIを利用する各ActivityのonCreate関数内でScheduleManagerApplication.getKinveyClient関数を呼び出します。
このScheduleManagerApplicationは自作のアプリケーションクラスで、getKinveyClient関数はKinveyプロジェクトの様々な機能にアクセスするための関数を持つClientインスタンスを返します。
以下のコードはScheduleManagerApplicationクラスの一部を抜粋したものになります。

以下のコードはkinveyClient変数の定義と初期化になります

長くなりましたがこれでアプリ側の準備は終了です。

データストアの使い方

では実際にKinveyプロジェクトに作成したデータストアに対してデータの登録を行ってみましょう。
以下がサンプルコードになります。

コード解説

[1] Entity

今回はスケジュール管理アプリを作成するので、データストアに登録するデータはスケジュールデータになります。
そのため、日時、件名、スケジュール内容を入力するフォームを作成し、その内容をEntityクラスに格納します。
また、最終的にPush通知機能を使用する予定なので、既にPush通知を行ったかどうかを管理するためのフラグもEntityクラスに格納させます。

[2] progressDialogManager

処理に掛かる時間はAndroidの通信状況により変わるので、ProgressDialogを表示します。
progressDialogManagerクラスはプログレスダイアログの機能をまとめた自作クラスです。

[3] appData("kinveyプロジェクト名", Entity.class).save(登録するEntity変数, コールバック関数)

appData 関数はデータストアに対して非同期処理を行う AsyncAppDataクラスのインスタンス を返す関数になります。
このインスタンスからデータストアにデータを登録する save 関数を呼び出します。
処理結果によってKinveyUserCallbackのonSuccessまたはonFailureを呼び出します。

実行・確認

では実際にデータストアにスケジュールを登録してみましょう。
下図のように内容を入力し、送信ボタンを押します。

kinvey_new_project

登録処理終了後、下図のようにkinveyプロジェクトのデータストアにスケジュールが登録されていれば成功になります。
datastore_result.png

まとめ

今回はkinveyを使用するための準備とデータストアの扱い方を説明しました。
次回はkinveyのユーザー管理機能とPush通知機能の使い方について説明します。

エンジニア採用中!私たちと一緒に働いてみませんか?