【NCMB】mbaasでデータストアに登録してみた

# mbaasって何？
- Mobile Backend as a Serviceの略
- スマホアプリで良く利用される汎用的な機能を無料で提供してくれるサービス
- サーバーの構築や開発が不要な為、楽にスマホアプリを開発できる

# なんでNCMBを選んだの？
- ググったら一番最初に出てきたから
- 全て日本語だし、マニュアルも豊富なので初心者にオススメ・・・らしい

# 準備
- Android Studio
- NCMBのアカウント

# NCMBのアカウント作成
https://mbaas.nifcloud.com/ にアクセスして新規登録

- **好きな方法で新規登録(自分はGoogleでやりました)**
![スクリーンショット 2019-01-18 17.45.44.png](https://qiita-image-store.s3.amazonaws.com/0/344952/311023d1-c1ba-3244-d5b9-c48d053c997d.png)

- **好きなアプリ名を入れる**
![新規登録.png](https://qiita-image-store.s3.amazonaws.com/0/344952/36853752-cd57-9be8-e436-5d6179d0c4ee.png)


- **APIキーが作成されるので保管(後からまた見れる)**

# SDKのダウントロード&インストール
- **https://github.com/NIFCloud-mbaas/ncmb_android/releases にアクセスしてzipをダウンロード**
- **app/libsにNCMB.jarをコピー**

- **app/build.gradleに以下を追加**

```
compile 'com.google.code.gson:gson:2.3.1'
compile files('libs/NCMB.jar')
```
![スクリーンショット 2019-01-18 18.06.15.png](https://qiita-image-store.s3.amazonaws.com/0/344952/b0bbc014-e675-225c-9bd2-3ac43feb03d8.png)

- **AndroidManifest.xmlのapplicationタグの直前に以下のpermissionを追加**

```
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```
![スクリーンショット 2019-01-18 18.23.08.png](https://qiita-image-store.s3.amazonaws.com/0/344952/57e8e41f-62d5-015c-116b-e57431fbdf1e.png)

- **applicationタグに以下を追加します。**

```
android:name="com.nifcloud.mbaas.core.NCMBApplicationController"
```
![スクリーンショット 2019-01-18 18.24.56.png](https://qiita-image-store.s3.amazonaws.com/0/344952/e128d052-1bdd-c930-4a57-62f315e7c642.png)

# layoutを作成
- **actitivity_main.xmlに以下を記載**

```
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.test.testncmb.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edittext"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Push"
            android:id="@+id/button"/>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>
```
ボタンとエディットテキストが表示される。
![Photo_19-01-18-18-33-49.642.png](https://qiita-image-store.s3.amazonaws.com/0/344952/56f745a0-1c66-9d3a-75d0-7ffa0b7c139a.png)

# 登録処理の作成
- **MainActivity.javaに以下を記載**

```
package com.test.testncmb;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.nifcloud.mbaas.core.DoneCallback;
import com.nifcloud.mbaas.core.NCMB;
import com.nifcloud.mbaas.core.NCMBException;
import com.nifcloud.mbaas.core.NCMBObject;

public class MainActivity extends AppCompatActivity {
    //NCMBにて取得したAPIKEYを記載
    private final String app_key = "hogehoge";
    private final String client_key = "hogehoge";
    public String message = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //SDKの初期化
        NCMB.initialize(this.getApplicationContext(),app_key,client_key);
        //NCMBObjectの作成(クラス名は何でもOK)
        final NCMBObject obj = new NCMBObject("Testclass");
        final Context context = getApplicationContext();
        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText editText = findViewById(R.id.edittext);
                //入力したテキスト取得
                message = editText.getText().toString();
                try{
                    //データストアに登録する値設定(messageカラムに登録)
                    obj.put("message",message);
                }catch (NCMBException e){
                    e.printStackTrace();
                }
                //登録処理
                obj.saveInBackground(new DoneCallback() {
                    @Override
                    public void done(NCMBException e) {
                        if(e != null){
                            //登録失敗
                            Toast.makeText(context, "ERROR", Toast.LENGTH_LONG).show();
                        } else {
                            //登録成功
                            Toast.makeText(context, "SUCCESS", Toast.LENGTH_LONG).show();
                        }
                    }
                });
            }
        });
    }

}
```

# 動作確認
![Photo_19-01-18-18-44-51.284.png](https://qiita-image-store.s3.amazonaws.com/0/344952/8b5562c6-d986-f8da-e158-13dc0aa17561.png)
![Photo_19-01-18-18-44-48.751.png](https://qiita-image-store.s3.amazonaws.com/0/344952/c4128ba4-21d1-079c-39c4-a2dde2bdece8.png)
- **ブラウザからデータストア確認**
![スクリーンショット 2019-01-18 18.47.37.png](https://qiita-image-store.s3.amazonaws.com/0/344952/4187e8f3-078f-54b6-a791-977ce0f48d91.png)


# まとめ
最後らへん説明端折ってしまったが、やってることは単純。
初心者の自分でも簡単にデータ登録できてしまった・・・おそるべし。
mbaasの概要は知っていたけど実際に使ってみて便利さを思い知った。