「Android版」プッシュ通知５分ですぐ試せるサンプル

# 【Android】プッシュ通知機能！

![画像1](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/OverView.png)

## 概要

* [ニフティクラウドmobile backend](http://mb.cloud.nifty.com/)のプッシュ通知機能は、Googleが提供しているCloud Messaging（以下、GCM）と連携することで、通知の配信を行っています
* Androidアプリでプッシュ通知を受信するまでの設定は以下のような流れとなっています
   * GCMの設定とAPIキーの取得
   * ニフティクラウド mobile backendでの設定
   * アプリでの設定
* 詳しい設定内容は[プッシュ通知（Android）](http://mb.cloud.nifty.com/doc/current/push/basic_usage_android.html)を参照ください

## ニフティクラウドmobile backendって何？？
スマートフォンアプリのバックエンド機能（プッシュ通知・データストア・会員管理・ファイルストア・SNS連携・位置情報検索・スクリプト）が**開発不要**、しかも基本**無料**(注1)で使えるクラウドサービス！今回はデータストアを体験します

注1：詳しくは[こちら](http://mb.cloud.nifty.com/price.htm)をご覧ください

![画像2](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/SdkTypes.png)

## 動作環境
* Windows 7 Professional
* Android Studio v2.1.2  (※2016/06 時点での最新バージョン)
* Android ver 4x,5x

※上記内容で動作確認をしています


## 手順
### 0.プッシュ通知機能使うための準備

* [Google Cloud Platform](https://console.cloud.google.com/) にログインします
* GCMを利用するためプロジェクトを作成し、APIキー（認証用の鍵）を発行します

![画像a2](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/a002.png)

![画像a3](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/a003.png)

![画像a4](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/a004.png)

* プロジェクトコードの確認をします
 
![画像a5](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/a005.png)

* GCMの有効化の設定をします

![画像a6](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/a006.png)

* 準備は以上です

### 1. [ニフティクラウドmobile backend](http://mb.cloud.nifty.com/)の会員登録とログイン→アプリ作成

* 上記リンクから会員登録（無料）をします登録ができたらログインをすると下図のように「アプリの新規作成」画面が出るのでアプリを作成します

![画像3](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/mBassNewProject.png)

* アプリ作成されると下図のような画面になります
* この２種類のAPIキー（アプリケーションキーとクライアントキー）は先ほどインポートしたAndroidStudioで作成するAndroidアプリにニフティクラウドmobile backendの紐付けるため、あとで使います

![画像4](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/mBassAPIkey.png)

* 動作確認後installationクラス(端末情報)が保存される場所も確認しておきましょう

![画像5](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/mBassData.png)

* ダッシュボードからアプリ設定→プッシュ通知の設定を行う
   * プッシュ通知の許可するを設定し、保存します
   * Google Developer Consoleで取得したAPIキーを設定し、保存します

![画像6](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/mBassPushEnv.png)

### 2. [GitHub](https://github.com/ncmbadmin/android_push_demo.git)からサンプルプロジェクトのダウンロード

* プロジェクトの[Githubページ](https://github.com/ncmbadmin/android_push_demo.git)から「Clone or download」＞「Download ZIP」をクリックします
* プロジェクトを解凍します

### 3. AndroidStudioでアプリを起動

* AndroidStudioを開き、解凍したプロジェクトを選択します

![画像7](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/SelectProject.png)

* プロジェクトを開きます

![画像8](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/ProjectDesign.png)

### 4. APIキーの設定

* `MainActivity.java`を編集します
* 先程[ニフティクラウドmobile backend](http://mb.cloud.nifty.com/)のダッシュボード上で確認したAPIキーを貼り付けます

![画像9](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/AndroidAPIkey.png)

* それぞれ`YOUR_APPLICATION_KEY`と`YOUR_CLIENT_KEY`の部分を書き換えます
 * このとき、ダブルクォーテーション（`"`）を消さないように注意してください！

### 5. Androidのsender IDキーの設定

* GCMから作成されたプロジェクトの後につく番号(#以降数字)が、sender IDです
* `MainActivity.java`を編集します

![画像10](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/GCMAPIkey.png)

* `ANDROID_SENDER_ID`の部分を書き換えます
 * このとき、ダブルクォーテーション（`"`）を消さないように注意してください！
 
### 6. 動作確認

* インストールしたアプリを起動します
 * プッシュ通知の許可を求めるアラートが出たら、必ず許可してください！
 
![画像11](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/Action1.png)

* 起動されたらこの時点でAndroid端末はレジスタレーションIDが取得されます
* [ニフティクラウドmobile backend](http://mb.cloud.nifty.com/)のダッシュボードから「データストア (installationクラス(端末情報))」を確認してみましょう！

![画像12](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/Action2.png)

* 端末側で起動したアプリは一度閉じておきます

### 7. プッシュ通知を送りましょう！

* いよいよです！実際にプッシュ通知を送ってみましょう！
* ニフティクラウドmobile backendのダッシュボードで「プッシュ通知」＞「＋新しいプッシュ通知」をクリックします
* プッシュ通知のフォームが開かれます
* 必要な項目を入力してプッシュ通知を作成します

![画像13](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/Action3.png)

* Android端末からプッシュ通知を確認しましょう！
* 少し待つとプッシュ通知が届きます！

![画像14](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/Action4.png)

* ダッシュボードからのプッシュ通知結果も確認する

![画像15](https://raw.githubusercontent.com/ncmbadmin/android_push_demo/master/readme-img/Action5.png)


## 解説
サンプルプロジェクトに実装済みの内容のご紹介

#### SDKのインポートと初期設定
* ニフティクラウドmobile backend の[ドキュメント（クイックスタート）](http://mb.cloud.nifty.com/doc/current/introduction/quickstart_android.html#/Android/)をご用意していますので、ご活用ください

#### ロジック
 * `activity_main.xml`でデザインを作成し、`MainActivity.java`にロジックを書いています
 *  installationクラス(端末情報)が保存される処理は以下のように記述されます
 
```java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //**************** APIキーの設定とSDKの初期化 **********************
        NCMB.initialize(this, "YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");

        final NCMBInstallation installation = NCMBInstallation.getCurrentInstallation();

        //GCMからRegistrationIdを取得しinstallationに設定する
        installation.getRegistrationIdInBackground("ANDROID_SENDER_ID", new DoneCallback() {
            //installation.getRegistrationIdInBackground("senderId", new DoneCallback() {
                @Override
            public void done(NCMBException e) {
                if (e == null) {
                    installation.saveInBackground(new DoneCallback() {
                        @Override
                        public void done(NCMBException e) {
                            if (e == null) {
                                //保存成功
                            } else if (NCMBException.DUPLICATE_VALUE.equals(e.getCode())) {
                                //保存失敗 : registrationID重複
                                updateInstallation(installation);
                            } else {
                                //保存失敗 : その他
                            }
                        }
                    });
                } else {
                    //ID取得失敗
                }
            }
        });

        setContentView(R.layout.activity_main);
    }
```

## 参考
* ニフティクラウドmobile backend の[ドキュメント（プッシュ通知（Android））](http://mb.cloud.nifty.com/doc/current/push/basic_usage_android.html)をご用意していますので、ご活用ください