kintoneからニフティクラウドmobile backendのAPIを叩いてプッシュ通知を送る


## 今回やること

クラウド型データベースとして名高いkintoneではWebアプリ上で簡単なjsスクリプトを動かせるそれを利用してニフティクラウドmobile backendのAPIを叩きプッシュ通知を送信する。

##[kintone](https://www.cybozu.com/jp/service/kintone/)とは？

クラウド型DB。主に企業内の業務アプリのDBとして活用できるサービス。中の人曰く「技術者でなくても触れるDB」とのこと。実際使ってみたけど、GUIでアプリケーションを作っていけるので確かにその通りだと思った。

##[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)とは？

mBaaS（mobile backend as a Service）の一つ。スマートフォンアプリでよく利用される汎用的な機能をクラウドから提供するサービス。
今回はAPIを叩けばプッシュ通知を送信できるサービスだと思っていただきたい。

## 事前準備：プッシュ通知を受信できるアプリを作ろう！

下記の資料を参考にプッシュ通知受信アプリを作成してください
http://mb.cloud.nifty.com/doc/current/sdkguide/javascript/push.html#新規プロジェクトにMonacaプラグインを組み込む

以下は上記のアプリにプッシュ通知を送ることを前提に記事を執筆致します。

## kintoneでアプリを作ろう

まずはkintoneに入った最初の画面の作成をクリックします。
※下記画像、赤丸内
![スクリーンショット 2015-10-12 22.14.47.png](https://qiita-image-store.s3.amazonaws.com/0/55227/0161cf6a-98b2-5e13-9e42-5b6569fd7ff1.png "スクリーンショット 2015-10-12 22.14.47.png")

次に出てきたポップアップの「はじめから作成」をクリック
※下記画像、赤丸内
![スクリーンショット 2015-10-12 22.14.27.png](https://qiita-image-store.s3.amazonaws.com/0/55227/f6b9ae14-d8bf-79a6-efb5-43727d7f68e9.png "スクリーンショット 2015-10-12 22.14.27.png")

アプリの名前を入力する
今回は「push_test」と名付けます
![スクリーンショット 2015-10-12 22.15.16.png](https://qiita-image-store.s3.amazonaws.com/0/55227/a65ce33b-d0e4-f596-4ac8-968a926801e6.png "スクリーンショット 2015-10-12 22.15.16.png")

次に上記の画像内の一般設定をクリックしアイコンを設定
一度「アプリの設定」画面（アプリの名前を入力していた画面）にもどり、「フォームの編集」をクリックします
出てきた画面の左上の文字列を右側にドラックアンドドロップし、出て来る「歯車のマーク」をクリックし設定をクリックします。

![スクリーンショット 2015-10-12 22.16.34.png](https://qiita-image-store.s3.amazonaws.com/0/55227/49b60838-8326-a474-7be6-b6cd9ec73d85.png "スクリーンショット 2015-10-12 22.16.34.png")


すると次のような画面がポップアップするので「フィールド名」、「フィールドコード」をそれぞれ「push」,「push_message」と設定し保存する

![スクリーンショット 2015-10-12 23.57.12.png](https://qiita-image-store.s3.amazonaws.com/0/55227/e512de24-e19a-2381-7d8d-4cc71f8ce655.png "スクリーンショット 2015-10-12 23.57.12.png")

ここまで終わったら「アプリの設定」画面（アプリの名前を入力していた画面）にもどり「一覧の追加をクリック」下記の画面で左にある「push」をドラック&ドロップし右に持っていく


![スクリーンショット 2015-10-12 22.17.59.png](https://qiita-image-store.s3.amazonaws.com/0/55227/5bb1c051-5c73-efbf-c327-01692870553f.png "スクリーンショット 2015-10-12 22.17.59.png")

ドラック&ドロップ後「保存」をクリックし「アプリの設定」画面（アプリの名前を入力していた画面）に戻ると下記のように「設定完了」が青くなっているのでそこをクリック

![スクリーンショット 2015-10-13 0.10.55.png](https://qiita-image-store.s3.amazonaws.com/0/55227/23b0a306-be2d-ed46-967a-42050bc075a2.png "スクリーンショット 2015-10-13 0.10.55.png")

するとアプリが作成されます。

## アプリへのデータの設定

一旦アプリへ値の設定を行う
下記の画面の赤丸部分をクリックし、値の設定を行う

![スクリーンショット 2015-10-12 22.19.12.png](https://qiita-image-store.s3.amazonaws.com/0/55227/266b9793-2664-9ffd-e310-bff188bd240e.png "スクリーンショット 2015-10-12 22.19.12.png")
すると下記のような画面が表示される

![スクリーンショット 2015-10-13 0.33.54.png](https://qiita-image-store.s3.amazonaws.com/0/55227/60ae0b6e-8917-a785-5cce-73e22acc7a92.png "スクリーンショット 2015-10-13 0.33.54.png")

「hello kintone」と入力すると下記のような画面になる
![スクリーンショット 2015-10-13 0.36.49.png](https://qiita-image-store.s3.amazonaws.com/0/55227/8240d84d-c018-71d8-125c-9918b3d67555.png "スクリーンショット 2015-10-13 0.36.49.png")


## JSEditプラグインを使ったコード記述やニフティクラウドmobile backendのSDK読み込み

次はニフティクラウドmobile backendのプッシュ通知APIを利用すべく、プラグインを利用したコード実装やSDKの読み込みを行う

kintoneでアプリを作ると、下記の画像のような画面に行く右端の「歯車」をクリックしでてきたウィンドウの「このアプリの設定」をクリックする

![スクリーンショット 2015-10-12 22.19.05.png](https://qiita-image-store.s3.amazonaws.com/0/55227/3862d6b3-d0de-c973-6d4b-21208103449f.png "スクリーンショット 2015-10-12 22.19.05.png")

すると下記の画面が表示され、赤丸部内の「詳細設定」をクリックすると

![スクリーンショット 2015-10-12 22.19.28.png](https://qiita-image-store.s3.amazonaws.com/0/55227/405e5903-6c31-56df-5a87-6c525a408a5c.png "スクリーンショット 2015-10-12 22.19.28.png")

詳細設定のメニューが表示される
![スクリーンショット 2015-10-12 22.19.40.png](https://qiita-image-store.s3.amazonaws.com/0/55227/a2ee4d4d-56a1-c41e-f341-41491cddac25.png "スクリーンショット 2015-10-12 22.19.40.png")

上記の画像の「プラグイン」をクリックするとJSEditのプラグインが設定できる画面に遷移する。「JavaScript/CSSでカスタマイズ」をクリックするとニフティクラウドmobile backendのSDKが読み込む画面に遷移する。まずプラグイン設定の説明し、ニフティクラウドmobile backendのSDK読み込みの説明へと移る

### JSEditプラグインの設定

プラグイン自体は下記の公式ドキュメントを参考に設定する

https://cybozudev.zendesk.com/hc/ja/articles/205452613

ちなみに、こちらのプラグインを使わずともJSスクリプトは設定できるが、今回は開発のしやすさを優先させこのプラグインを利用した。

### プラグインでのコード実装

プラグインの管理画面で「歯車」をクリックする

![スクリーンショット 2015-10-12 22.21.22.png](https://qiita-image-store.s3.amazonaws.com/0/55227/48b52f02-292b-8f4a-50db-9836e90dc050.png "スクリーンショット 2015-10-12 22.21.22.png")

その後、下記画面で「新規作成」をクリックし、「button.js」と名付け保存。

![スクリーンショット 2015-10-12 22.23.26.png](https://qiita-image-store.s3.amazonaws.com/0/55227/e2173170-90f9-072c-2749-1e0d5bfd441d.png "スクリーンショット 2015-10-12 22.23.26.png")

そして上記の黒い画面に下記のコードを書く

```javascript:button.js
(function () {
    kintone.events.on('app.record.detail.show', function (event) {
        // メニュ右側の空白部分にボタンを設置
        var myIndexButton = document.createElement('button');
        myIndexButton.id = 'my_index_button';
        myIndexButton.innerHTML = 'メニュー部ボタン';
        myIndexButton.onclick = function () {
            var record = kintone.app.record.get();
            window.alert(record.record.push_message.value);
            
            //ニフティクラウド mobile backendを初期化しています
            var ncmb = new NCMB("APP_KEY", "CLIENT_KEY");
            
            // ここからがプッシュ作成処理になります
            var push = new ncmb.Push();
            push.set("immediateDeliveryFlag", true)
                .set("message", record.record.push_message.value)
                .set("target", ["android"]);

            push.send()
                .then(function(push){
                    // 送信後処理
                  })
                .catch(function(err){
                    // エラー処理
             });
        }
        kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
    });
})();

```

と記載する。保存後、先ほどの「hello kintone」が書かれていた画面を再度確認すると下記の上に画面上部にボタンが現れる。

![スクリーンショット 2015-10-13 0.56.11.png](https://qiita-image-store.s3.amazonaws.com/0/55227/2a81e8d4-125e-f098-c374-45c9955b984a.png "スクリーンショット 2015-10-13 0.56.11.png")


### ニフティクラウドmobile backendのSDK読み込み

現状コードは実装したが、まだSDKを読み込めていないので上記のコードを動かしてもエラーになる。そのSDKの読み込みをおこなる。詳細メニューの中の「JavaScript/CSSでカスタマイズ」をクリックし下記の画面を表示させる。その上で「URL指定で追加」をクリックする
![スクリーンショット 2015-10-12 22.25.16.png](https://qiita-image-store.s3.amazonaws.com/0/55227/9f01610f-0b87-76f4-7410-7d8260ad8a6c.png "スクリーンショット 2015-10-12 22.25.16.png")

そこに下記のSDKのURLを貼り付ける
https://raw.githubusercontent.com/NIFTYCloud-mbaas/ncmb_js/master/ncmb.min.js

保存をすれば追加される。
下記の画像のように赤丸部をドラック&ドロップし、「button.js」と「SDK（https://raw.githubusercontent.com/NIFTYCloud-mbaas/ncmb_js/master/ncmb.min.js）」の位置を入れ替えてあげ「SDK」が最上部に来るようにする

![スクリーンショット 2015-10-12 22.25.43.png](https://qiita-image-store.s3.amazonaws.com/0/55227/b09e3888-ab1b-0c05-6f07-e60c68641d19.png "スクリーンショット 2015-10-12 22.25.43.png")

## あとは実行してみるのみ

下記の画像の「メニュー部ボタン」をクリックするとプッシュ通知が登録されます。

![スクリーンショット 2015-10-13 0.56.11.png](https://qiita-image-store.s3.amazonaws.com/0/55227/4a23234f-c1d6-9ebe-d246-7eeb6334cbf2.png "スクリーンショット 2015-10-13 0.56.11.png")

実際にニフティクラウドmobile backendのコンパネで下記のように登録ができております。しばらく待つと端末に配信される。

![スクリーンショット 2015-10-12 22.36.30.png](https://qiita-image-store.s3.amazonaws.com/0/55227/e7d9a150-30a4-c60c-a2a1-76bac4abdfc1.png "スクリーンショット 2015-10-12 22.36.30.png")

## 追加事項-ニフティクラウドmobile backendを使うメリット-


ニフティクラウドmobile backendではプッシュ通知の配信を絞り込むことができます。下記のような端末IDを管理するDBに新たなフィールド「Age」や「place」などの属性を入れてあげるとそれを元にプッシュ通知の絞り込み配信が行え、例えば「place」が「America」となっている人にだけ通知を送ることができますその際のコードは下記。kintoneで事業所別にプッシュ通知を送るとかの要望があれば使えそう

```javascript:button.js
(function () {
    kintone.events.on('app.record.detail.show', function (event) {
        // メニュ右側の空白部分にボタンを設置
        var myIndexButton = document.createElement('button');
        myIndexButton.id = 'my_index_button';
        myIndexButton.innerHTML = 'メニュー部ボタン';
        myIndexButton.onclick = function () {
            var record = kintone.app.record.get();
            window.alert(record.record.push_message.value);
            
            //ニフティクラウド mobile backendを初期化しています
            var ncmb = new NCMB("APP_KEY", "CLIENT_KEY");
            
            // ここからがプッシュ作成処理になります
            var push = new ncmb.Push();
            push.set("immediateDeliveryFlag", true)
                .set("message", record.record.push_message.value)
                .set("target", ["android"])
                .set("searchCondition", {"place":"America"});

            push.send()
                .then(function(push){
                    // 送信後処理
                  })
                .catch(function(err){
                    // エラー処理
             });
        }
        kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
    });
})();

```