ニフティクラウドmobile backend(mBaaS)でお手軽にAndroidのプッシュ通知を実装する

# ニフティクラウドmobile backendとは？

## mBaaS？
[MBaaS で巨人の肩に乗る #awscasual // Speaker Deck](https://speakerdeck.com/naoya/mbaas-deju-ren-falsejian-nicheng-ru-number-awscasual)で紹介されているように、クラウドの新しいサービス群である「BaaS」がアメリカでは旺盛です。

ニフティでも各種クラウドサービスを提供していますが、2013/9末からスマートフォンアプリの特化型クラウド「[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/about.htm)」mBaaS（mobile Backend as a Service）(※以下、mBaaSと呼びます)を提供しています。

mBaaS（mobile Backend as a Service）とは、スマートフォンアプリの開発で必要なサーバーとサーバープログラミングをお手軽に肩代わりしてくれるクラウドサービスです。データストア、ファイルストア、会員管理、SNS連携などを用意しているのですが、わりとサーバーサイドの実装が面倒な「プッシュ通知」も提供しています。

今回は、プッシュ通知を例にとって、mBaaSでプッシュ通知を実装するための手順を紹介し、mBaaSの「お手軽感」を感じ取っていただければと思います。

## どうお手軽なの？
例えばAndroidでプッシュ通知を実装するには、GCM(Google Cloud Messaging)に対して自前のサーバーからプッシュ通知をリクエストするサーバープログラムの用意が必要です。mBaaSを使えば、GCMのAPIキーを設定するだけでサーバープログラムの部分は肩代わりしてくれますし、プッシュ通知を送るためのコントロールパネルも提供されるので、わざわざプッシュ通知を送るためだけにサーバーまわりの面倒な用意や作業の必要がありません。


* mBaaS初期設定
* mBaaSで提供されているSDKをセットアップ
* プッシュ通知に対応したアプリケーションの改変
* アプリケーションのアップデート
* mBaaSからプッシュ通知配信


といった具合の手順を踏んでプッシュ通知の配信が実装できます。下記チュートリアルで手順を追って説明します。

# プッシュ通知(for Android)チュートリアル

## 概要
Push通知は作成したアプリケーションが非アクティブの場合でも新しいメッセージやイベントを通知します。Android端末上でPush通知を受信した時、アプリケーションアイコンと、メッセージをステータスバーに表示します。アプリケーションユーザがPush通知をタップした場合、それらはアプリケーションに送られます。Push通知は全てのユーザにブロードキャスト送信することも、マーケティングキャンペーンのためにユーザグループの一組や特定の個人に送信することが可能です。NCMBライブラリはニフティクラウドmobile backendとGCM(Google Cloud Messaging)とのインターネット接続によって、バックグラウンドサービスとして動作するPush通知を提供しています。この方法ではGCMを使用するためのアプリケーションキーとクライアントキーとセンダーIDが必要です。

## 初期設定
このチュートリアルではNCMB Android SDKを利用します。このため最新のSDKを入手しインポートする必要があります。SDK導入手順が[mBaaSクイックスタート](http://mb.cloud.nifty.com/doc/quickstart_android.html#/Android/ "クイックスタート")に記載されています。Push通知を実現するためには、gcm.jarのインポートと、mobile backendでの設定が必要になります。gcm.jarについてはAndroid SDK Managerからダウンロードしてください。Push通知を実現するために必要な、mobile backendの設定を以下に示します。

![初期設定](http://mb.cloud.nifty.com/assets/images/tutorial/android_push/init01.PNG)

左メニューからアプリ設定をクリックし、表示された画面からプッシュ通知欄のプッシュ通知の許可を「許可する」に設定し、保存するボタンを押下します。またAndroidでのPush通知を有効にするため、APIキー欄にはGCMのAPIキーを設定します。GCMのAPIキーはGoogleのAPI Consoleサイトで確認できます。

## GCM登録
Push通知を使用するためには、mobile backendにあなたのアプリケーションを登録しなけばなりません。以下のXMLを、AndroidManifest.xmlファイルの</application>タグの直前に追加して下さい。

```xml:AndroidManifest.xml
<service android:name="com.nifty.cloud.mb.NCMBGCMIntentService" />
<receiver
    android:name="com.nifty.cloud.mb.NCMBGCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.sample.pushsample" />
    </intent-filter>
</receiver>
```

## パーミッション設定
次に、あなたのアプリケーションにPush通知を表示するためのパーミッションを付与しなければなりません。以下のXMLを、AndroidManifest.xmlファイルの<application>タグの直前に追加してください。

```xml:AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Push通知時に端末を振動させたい場合はandroid.permission.VIBRATEを設定 -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.sample.pushsample.permission.C2D_MESSAGE" />
<permission android:name="com.sample.pushsample.permission.C2D_MESSAGE"android:protectionLevel="signature" />
```

## mobile backendのAPIキー追加
あなたのアプリと、mobile backendが連携するために、APIキーのやりとりが必要になります。あなたのアプリケーションクラスのonCreateメソッドに次の処理を追加して下さい。

```java:yourappclass.java
NCMB.initialize(this, "YOUR_APP_ID", "YOUR_CLIENT_KEY");
```

「YOUR_APP_ID」と「YOUR_CLIENT_KEY」についてはmobile backendでアプリを作成した際に表示される、アプリケーションキーとクライアントキーを設定するようにして下さい。


## Push通知を有効にする
最後に、あなたのアプリケーションで通知する準備ができたことをmobile backendに知らせる必要があります。Push通知を始める最も単純な方法は、デフォルトとして全Push通知を使用するためのActivityを明記することです。あなたのアプリケーションクラスのonCreateメソッドに次の処理を追加して下さい。

```java:yourappclass.java
final NCMBInstallation installation = NCMBInstallation.getCurrentInstallation();
installation.getRegistrationIdInBackground("SENDER_ID", new RegistrationCallback(){
    @Override
    public void done(NCMBException e) {
        if (e != null) {
            // 失敗
        } else {
            // 成功
            // 端末登録の実行
            try {
                installation.save();
            } catch(NCMBException e2) {
                e2.printStackTrace();
            }
        }
    }
});
NCMBPush.setDefaultPushCallback(this, MainActivity.class);
```

「SENDER_ID」についてはGCM（Google Cloud Messaging）のProject IDを設定するようにして下さい。GCMのProject IDについてはGoogleのAPI Consoleサイトで確認できます。

## アプリケーションのアップデート

これらの手順でmBaaSのプッシュ通知に対応したコードをビルドして、ユーザに配布されているアプリケーションをアップデートしてもらいましょう。アップデート後にアプリケーションが起動されると、先ほど改変したonCreateメソッドが呼ばれた際に、ユーザの端末がmBaaSに登録され、mBaaSからプッシュ通知を配信する準備が整います。

## ダッシュボードからプッシュ通知を送信する
mBaaSのダッシュボード＞プッシュ通知＞新しいプッシュ通知から作成、送信できます。 

![ダッシュボード>プッシュ通知](http://mb.cloud.nifty.com/assets/images/tutorial/android_push/create_push01.PNG)

送信したいプッシュ通知の文言を設定、作成すると、送信されます。

![ダッシュボード>プッシュ通知](http://mb.cloud.nifty.com/assets/images/tutorial/android_push/create_push02.PNG)

いかがでしたか？うまく端末にプッシュ配信できたでしょうか。

さらに、配信端末の絞込や配信日次指定、再送信設定など、細かな設定を知りたい場合は[ダッシュボードの使い方:プッシュ通知](http://mb.cloud.nifty.com/doc/dashboard/push.html)を参照して下さい。