プッシュ通知をAndroidアプリに組み込む(ニフティモバイルバックエンド)

# アプリにプッシュ通知を実装したい！

アプリをリリースしてダウンロード数も上昇。しかし、なかなか広告収入が増えないので、プッシュ通知の導入を検討してみました。ニフティの管理ページからタイトルとメッセージを入力して送信して、プッシュ通知を受け取るところまで、まとめてみました。

# 環境
Android Studio 1.5.1
Android4.4〜5.1で確認しました

#Google Developers Consoleへアクセス

https://console.developers.google.com/project

## プロジェクトを作成する。

<img width="781" alt="プロジェクト.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/15fd5002-50a7-6bc9-1ce2-ceaac11ad4db.png">

## プロジェクト名を決める。

<img width="491" alt="プロジェクト 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/a9534aa8-c92e-6fad-32b4-86d3d1a82d1a.png">


## プロジェクト番号を覚えておく。
Androidのソースコードに貼り付けるのでメモ帳に貼っておきます。

![ホーム_-_PushNotification 3.png](https://qiita-image-store.s3.amazonaws.com/0/99731/9dd73966-0a45-ec0f-578f-dbde6d46ccad.png)




## APIを有効にする

<img width="467" alt="ホーム_-_PushNotification.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/dafdf270-ea68-2ab9-f27f-ca8f95701f0a.png">






## Google Cloumd Messagingを有効

<img width="388" alt="API_ライブラリ_-_PushNotification_と_MainActivity_java_-_PushNotification_-____Desktop_Android_Dropbox_PushNotification_.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/7a3d0fea-5529-6df0-78df-1a059bc5c449.png">





## 有効にする


<img width="407" alt="Google_Cloud_Messaging_-_PushNotification.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/353772d0-00eb-3b37-5d58-7d018e2d0b75.png">

## 認証情報へ進む

<img width="936" alt="Google_Cloud_Messaging_-_PushNotification 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/da7a5cf5-b6e4-3ffd-3882-322e3036b24f.png">


## サーバーAPIキーの作成

![認証情報ウィザード_-_PushNotification2.png](https://qiita-image-store.s3.amazonaws.com/0/99731/8ba467c5-95f0-09b4-dc84-b1f3eb76ed39.png)


名前だけ入力

![サーバー_API_キーの作成_-_PushNotification_🔊.png](https://qiita-image-store.s3.amazonaws.com/0/99731/9f971fb4-4b27-5633-83e1-49acb0929beb.png)




APIキーはNiftyモバイルバックエンドの管理ページに貼りますのでメモ帳へ

![認証情報_-_PushNotification.png](https://qiita-image-store.s3.amazonaws.com/0/99731/f49538a4-f07c-4cb6-0402-65e8034c0db9.png)


# niftyモバイルバックエンド

Niftyの会員登録が必要ですので、会員登録を行ってください。

http://mb.cloud.nifty.com/

##アプリ名を入力して新規作成

<img width="638" alt="ニフティクラウドmobile_backend.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/467c3f2c-c824-c648-6f5f-edd78e2ab7e3.png">

## APIキーを登録

Google Developers Consoleで作成したAPIキーを入力、プッシュ通知の許可を選択して保存します。

<img width="730" alt="ニフティクラウドmobile_backend.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/d4ef6df1-7fee-30d7-3acf-30890316c201.png">


## SDKをダウンロード

https://github.com/NIFTYCloud-mbaas/ncmb_android/releases

## プロジェクト作成

<img width="646" alt="Create_New_Project.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/ae7672ce-e70d-3224-2081-b49f0d7e32d3.png">

## ダウンロードしたSDKを解凍してNCMB.jarをコピー。

<img width="173" alt="NCMB_2_2_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/35ad1743-60a8-94b6-29ab-5c3076b78268.png">

##Project形式で表示させて、app/libsにペースト。

<img width="324" alt="MainActivity_java_-_PushNotification_-____Desktop_Android_Dropbox_PushNotification_.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/b24a2745-4708-596a-8e65-92635f4fc211.png">

## アプリケーションキーとクライアントキーをメモ帳へ

![ニフティクラウドmobile_backend 4.png](https://qiita-image-store.s3.amazonaws.com/0/99731/b3117207-a294-98e7-5f39-a1d4d27f8f53.png)

※ MainActivity.java
  →プロジェクト番号、アプリケーションキー、クライアントキーを貼り付ける

```java:MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.nifty.cloud.mb.core.DoneCallback;
import com.nifty.cloud.mb.core.NCMB;
import com.nifty.cloud.mb.core.NCMBException;
import com.nifty.cloud.mb.core.NCMBInstallation;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NCMB.initialize(this, "applicationKeyを貼り付ける",
                "clientKeyを貼り付ける");

        final NCMBInstallation installation = NCMBInstallation.getCurrentInstallation();
        Log.d("デバッグ","start");

        installation.getRegistrationIdInBackground("プロジェクト番号", new DoneCallback() {
            @Override
            public void done(NCMBException e) {
                if (e == null) {
                    //成功
                    try {
                        Log.d("デバッグ","成功");
                        //mBaaSに端末情報を保存
                        installation.save();
                    } catch (NCMBException saveError) {
                        //保存失敗
                        Log.d("デバッグ",saveError.getMessage());

                        //error = saveError;
                    }
                } else {
                    //ID取得失敗
                    //error = e;
                }
                //TestCompletion = true;
            }
        });
    }
}
```

```python:build.gradle

dependencies {
    compile 'com.google.code.gson:gson:2.3.1'
    compile files('libs/NCMB.jar')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.google.android.gms:play-services:8.1.0'
    compile 'com.android.support:appcompat-v7:23.1.1'
}

```

パッケージ名には、自分のパッケージ名を貼り付けて下さい。間違えると動かないですよ。

```xml:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="パッケージ名">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <permission android:name="パッケージ.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="パッケージ.permission.C2D_MESSAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- push通知タップ時に遷移するActivity -->
        <meta-data android:name="openPushStartActivity" android:value=".MainActivity"/>
        <!-- 通知エリアに表示されるアイコン -->
        <!-- 通知の複数表示　0:複数表示しない , 1:複数表示する-->
        <meta-data android:name="notificationOverlap" android:value="0"/>
        <!-- ダイアログプッシュの背景画像 -->


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- GCM受信設定 -->
        <receiver
            android:name="com.google.android.gms.gcm.GcmReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <category android:name="パッケージ名"/>
            </intent-filter>
        </receiver>
        <service
            android:name="com.nifty.cloud.mb.core.NCMBGcmListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            </intent-filter>
        </service>

    </application>

</manifest>

```

<img width="664" alt="ニフティクラウドmobile_backend 3.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/b07b00f1-c0c5-4143-3dca-277ccb9c6cb9.png">

## 通知のタイトルとメッセージを入力

<img width="636" alt="ニフティクラウドmobile_backend.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/3b9e5218-d9ee-65cc-d2c5-f4055ef0ceb3.png">



今すぐ配信、Android端末に配信するにチェックをつけること。1端末に向けて送信されますに更新されたことを確認してプッシュ通知ボタンを押す。

![ニフティクラウドmobile_backend 5.png](https://qiita-image-store.s3.amazonaws.com/0/99731/ee62422a-8ed7-2cb2-f1e0-4e496c9908fa.png)

## 配信済み

<img width="631" alt="ニフティクラウドmobile_backend.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/8e1e6476-449d-7531-582f-bb0262a9ab65.png">

## 成功
<img width="425" alt="Screenshot_2016-03-25-10-23-11_jpeg.png" src="https://qiita-image-store.s3.amazonaws.com/0/99731/4e8c8f2f-5e64-dd6b-6ea4-7bed535d61c1.png">

## Androidのプッシュ通知
Googleが提供しているCloud Messaging（GCM）と連携して通知を配信している。

## Registration ID
push通知を送るデバイスを認識するための値