NCMBのKotlin SDKを使ってプッシュ通知を送信する

NCMBは複数のプラットフォーム向けにSDKを提供しています。一番最新のSDKとしてKotlin SDKで、従来のJava SDKとはまた違った、Kotlinらしい書き方で使えるSDKとなっています。

今回はそんなKotlin SDKを使ってプッシュ通知を受け取るまでの流れを紹介します。

## セットアップ

Androidの場合はFirebaseにてプロジェクトを作成します。そして、Cloud Messagingを有効にしてAndroid用の設定をウィザードで進めます。最終的にgoogle-services.jsonがダウンロードできます。

![3522ee8e-dc4a-4a18-8cbb-bf8815d18957.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/610d1d48-d6e8-c240-f383-f71b2eda2464.jpeg)


また、プロジェクトの設定で新しい秘密鍵を作成、ダウンロードします。この秘密鍵はNCMBの管理画面にてAndroid用プッシュ通知のファイルとしてアップロードしてください。

![ae358af8-fb87-465f-9e4d-30c58b3aceb7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/9d5f1c80-a959-4495-ad0d-ca7bdabb484e.jpeg)


## Androidの設定

### SDKのインストール

[GitHubのリポジトリ](https://github.com/NIFCLOUD-mbaas/ncmb_kotlin/releases)からNCMB.(バージョン).zipをダウンロードして展開します。NCMB.jarができるので、これを `app/libs` の中に配置します。

### google-services.jsonの配置

`app/` に先ほどのgoogle-services.jsonを保存します。

### build.gradleの編集

以下を追加します。バージョンは最新版を追加するようにしてください。バージョンは[Android プロジェクトに Firebase を追加する  |  Firebase Documentation](https://firebase.google.com/docs/android/setup?hl=ja)にて確認できます。

```
buildscript {
		// 省略
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.0"
        // 追加
        classpath "com.google.gms:google-services:4.3.4"
    }
}
```

### app/build.gradleの編集

以下を追記します。

```
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.gms.google-services' //追加
}
```

依存ライブラリを追加します。

```
dependencies {
    // 省略
    implementation 'com.google.code.gson:gson:2.3.1'
    api files('libs/NCMB.jar')
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation platform('com.google.firebase:firebase-bom:28.4.0') //追加
    implementation 'com.google.firebase:firebase-messaging-ktx' //追加
    implementation 'com.google.firebase:firebase-analytics-ktx' //追加
    implementation 'com.google.android.gms:play-services-base:17.6.0' //追加
}
```

各build.gradleをSyncして、ライブラリをインストールします。

### app/src/main/AndroidManifest.xmlの編集

manifestタグの直下にusers-permissionを追加します。

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.moongift.ncmb.pushdemo">
	<!-- 以下を追加 -->
	<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" />
```

applicationタグの下にserviceタグと、meta-dataタグを追加します。

```xml
<application
		android:allowBackup="true"
		android:icon="@mipmap/ic_launcher"
		android:label="@string/app_name"
		android:roundIcon="@mipmap/ic_launcher_round"
		android:supportsRtl="true"
		android:theme="@style/Theme.PushDemo">
		<!-- 追加 -->
		<service
				android:name="com.nifcloud.mbaas.core.NCMBFirebaseMessagingService"
				android:exported="false">
				<intent-filter>
						<action android:name="com.google.firebase.MESSAGING_EVENT"/>
				</intent-filter>
		</service>
		<!-- プッシュ通知タップ時に起動するActivityの設定 ※必須の設定 -->
		<meta-data android:name="openPushStartActivity" android:value=".MainActivity"/>
		<!-- プッシュ通知のchannel idの設定 default（com.nifcloud.mbaas.push.channel）-->
		<meta-data android:name="ChannelId" android:value="com.nifcloud.mbaas.push.channel"/>
		<!-- プッシュ通知のchannel名の設定　default（NCMB Push Channel） -->
		<meta-data android:name="ChannelName" android:value="NCMB Push Channel"/>
		<!-- プッシュ通知のchannel 説明の設定 default（com.nifcloud.mbaas.push.channel） -->
		<meta-data android:name="ChannelDescription" android:value="com.nifcloud.mbaas.push.channel"/>
```

### MainActivity.ktの作成

MainActivity.ktにてSDKをインポートします。

```kotlin
import com.nifcloud.mbaas.core.NCMB
```

SDKを初期化し、さらにプッシュ通知用の機能も初期化します。

```kotlin
NCMB.initialize(this, "YOUR_APPLICATION_KEY", "YOUR_CLIENT")
NCMB.initializePush(this.applicationContext)
```

これでプッシュ通知の送信準備が整いました。アプリを起動すると、NCMBの管理画面にてInstallationクラスにデータが追加されているのを確認できます。

![bcf1b581-f92d-453b-83c1-7858e9b13f23.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/91833033-9d8b-cfab-542b-1368529ab8a4.jpeg)


## プッシュ通知を送信する

NCMBの管理画面でプッシュ通知を送信します。送信先としてAndroidを選んでください。

![screen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/eb01e3e8-a85a-c8e5-88d3-bc5b33f3ecfd.png)


## まとめ

Androidのプッシュ通知の場合、Firebaseでプロジェクトを作成することと、build.gradleの修正、Kotlinファイルの作成が必要です。手順さえ覚えてしまえば簡単に実装できますので、ぜひKotlinアプリにもプッシュ通知を実装してください。


[プッシュ通知 (Kotlin) : 基本的な使い方 | ニフクラ mobile backend](https://mbaas.nifcloud.com/doc/current/push/basic_usage_kotlin.html)