渋谷のラーメン屋を迷わず選べるAndroidアプリ「めんこれ渋谷」というのを開発していて、サーバ側にラーメン屋や訪問履歴のDBを持っていたりします。
で、設計時に使おうと思っていたMBaaSが思いのほかいけてなかったのと、代替のMBaaSも思いつかなかったのでRails+Herokuで実装しちゃいました。単純にDBをもっていてアプリ側とデータ同期しているだけなのでMBaaSで十分だったんだけど。
最近「Parseいいよー」って話を聞いたので、置き換え候補として試してみようかと思った次第です。
準備
ParseにSignUp済み、既にあるAndroidプロジェクトを想定します。
まずは事前の準備。公式サイトを参照。
https://www.parse.com/apps/quickstart#parse_data/mobile/android/native/existing
jar形式のSDKをインストールします。「Download the SDK」からzipをダウンロード・解凍し、Parse-x.x.x.jarをAndroidプロジェクトのlibsディレクトリ配下にコピーします。これだけで使えるようになります。
「Test the SDK」というところにParseにデータを保存するサンプルコードが書いてあるのでやってみます。
1 2 3 4 5 6 7 8 9 10 11 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Parse.initialize(this, "xxxxxxxxxxxxxxxxxxxxxxxxxxx", "oooooooooooooooooooooooo"); ParseObject testObject = new ParseObject("TestObject"); testObject.put("foo", "bar"); testObject.saveInBackground(); } |
AndroidManifest.xml
1 2 |
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
アプリを起動してみる。この時点でデータが保存されるはず。WEBの画面から「Test」ボタンを押下して下記のように表示されれば成功。key-valueのjson形式でやりとり出来るみたいですね。
1 2 |
Congrats! You saved your first object: { "id": "tRcRTQmZD9", "created_at": "2014-07-21T11:57:58Z", "updated_at": "2014-07-21T11:57:58Z", "foo": "bar" } |
任意のオブジェクトを保存してみる
続いてちょっとだけコードをアレンジしてItemオブジェクトを保存してみます。
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Parse.initialize(this, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, "ooooooooooooooooooooooooooooo); ParseObject itemObject = new ParseObject("Item"); itemObject.put("name", "eraser"); itemObject.put("price", "200"); itemObject.put("sales_enabled", true); itemObject.saveInBackground(); Button getButton = (Button) findViewById(R.id.get_button); getButton.setOnClickListener(this); } |
これでアプリが起動される度にItemオブジェクトがParse側に保存されます。
次は保存されたオブジェクトをアプリ側で取得してみます。ボタンが押されたらItemオブジェクトの中身をログ出力します。
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.haradaatsushi.parsesample.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:text="Get Objects" android:id="@+id/get_button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@Override public void onClick(View v) { ParseQuery<ParseObject> query = ParseQuery.getQuery("Item"); query.findInBackground(new FindCallback<ParseObject>() { @Override public void done(List<ParseObject> itemList, ParseException e) { Log.d("MainActivity", "done"); if (e == null) { for (ParseObject object : itemList) { String name = object.getString("name"); int price = object.getInt("price"); boolean salesEnabled = object.getBoolean("sales_enabled"); Log.d("MainActivity", "name => " + name); Log.d("MainActivity", "price => " + price); Log.d("MainActivity", "sales_enabled => " + salesEnabled); } } else { // something went wrong } } }); } |
ログにこんな感じに出力されてれば成功。
1 2 3 4 |
07-21 21:51:28.487: D/MainActivity(15871): done 07-21 21:51:28.487: D/MainActivity(15871): name => eraser 07-21 21:51:28.487: D/MainActivity(15871): price => 0 07-21 21:51:28.487: D/MainActivity(15871): sales_enabled => true |
保存されたオブジェクトはWEBからも参照できるし、直接値の編集も出来る。これは便利かも。
思ったこと
これだけ試しただけだと他MBaaSに比べてどうなのかあんまりわからないけど、ここまででは不満やストレスはない感じ。もう少しつっこんで動かしてみたいところ。

原田 敦

最新記事 by 原田 敦 (全て見る)
- Rails Engineでブログ機能追加するgemを作る - 2015年3月15日
- WEBエンジニア一人だけでサービスを作りきる方法-夫婦のための自動ごはん予定お知らせサービス「GoHaaan」制作でやったこと - 2015年3月7日
- CentOS6でMariaDBのDynamic Columnsを試してみた - 2015年2月28日